为什么需要智能体框架?

大模型本身只是一个文本生成引擎。要构建能自主完成复杂任务的智能体,需要解决编排、状态管理、工具调用、多Agent协作等问题。智能体框架就是提供这些能力的"操作系统"。

LangGraph:图驱动的精细控制

设计哲学

LangGraph将Agent工作流建模为有向图:

  • 节点:每个节点是一个处理步骤(LLM调用、工具执行、条件判断)
  • :定义节点间的转移关系
  • 状态:在图中流转的共享数据结构

核心概念

from langgraph.graph import StateGraph

# 定义状态
class AgentState(BaseModel):
    messages: list = []
    tool_results: dict = {}

# 创建图
graph = StateGraph(AgentState)
graph.add_node("think", think_node)
graph.add_node("act", act_node)
graph.add_node("observe", observe_node)

# 定义边
graph.add_edge("think", "act")
graph.add_conditional_edges("act", route_by_result, {
    "continue": "observe",
    "done": END
})
graph.add_edge("observe", "think")

优势

  • 精细控制:图结构让你明确定义每一步逻辑
  • 状态管理:支持checkpointer持久化状态,可恢复中断的运行
  • 人机协作:内置human-in-the-loop中断点
  • 可视化:图结构天然可可视化,便于调试

劣势

  • 学习曲线较陡,概念抽象
  • 简单任务用图建模略显笨重
  • 与LangChain深度绑定,迁移成本高

适用场景

  • 复杂多步工作流(审批流程、数据处理管道)
  • 需要精确控制每一步的系统
  • 需要状态持久化和恢复的场景

AutoGen:多Agent对话编排

设计哲学

AutoGen(微软出品)采用对话式编排——多个Agent通过对话协作完成任务。核心是将Agent视为对话参与者,而非图节点。

核心概念

from autogen import AssistantAgent, UserProxyAgent

coder = AssistantAgent(
    name="coder",
    system_prompt="你是一个Python开发者",
    llm_config=llm_config
)

reviewer = AssistantAgent(
    name="reviewer",
    system_prompt="你是代码审查专家",
    llm_config=llm_config
)

user = UserProxyAgent(
    name="user",
    human_input_mode="TERMINATE"
)

# 多Agent对话
user.initiate_chat(
    coder,
    message="实现一个排序算法",
    reviewer作为审查者加入对话
)

优势

  • 多Agent协作:天然支持多个Agent角色对话
  • 灵活性高:Agent对话模式接近自然,不需要预定义流程
  • 群聊模式:支持多个Agent在群聊中自主决定谁发言
  • 人机混合:UserProxy支持真人参与

劣势

  • 对话难以精细控制,可能进入无意义循环
  • 调试困难,对话历史长
  • Token消耗大(每个Agent都需完整上下文)

适用场景

  • 需要多角色协作的复杂任务(开发、审查、测试)
  • 创意生成(头脑风暴、方案探索)
  • 模拟社会实验(多视角讨论)

CrewAI:角色驱动的团队模拟

设计哲学

CrewAI将Agent协作建模为一个组织/团队,每个Agent有明确的角色、目标和背景。强调"像真实团队一样协作"。

核心概念

from crewai import Agent, Task, Crew

researcher = Agent(
    role="研究员",
    goal="收集和分析市场数据",
    backstory="拥有10年行业经验的资深分析师",
    tools=[search_tool, scrape_tool]
)

writer = Agent(
    role="撰稿人",
    goal="将研究数据转化为可读报告",
    backstory="知名科技博客作者"
)

research_task = Task(
    description="研究AI芯片市场现状",
    agent=researcher,
    expected_output="市场分析数据"
)

write_task = Task(
    description="撰写市场分析报告",
    agent=writer,
    expected_output="完整报告",
    context=[research_task]  # 依赖前置任务
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, write_task],
    process=Process.sequential
)

优势

  • 直观易用:角色+任务模型非常直观
  • 快速上手:学习成本最低
  • 任务依赖:支持任务间的依赖关系
  • 人类经验融入:backstory让Agent角色更丰满

劣势

  • 复杂流程控制能力不如LangGraph
  • 底层依赖LangChain,灵活性受限
  • 缺少状态持久化

适用场景

  • 业务流程自动化(研究→撰写→审核)
  • 团队协作模拟
  • 快速原型开发

横向对比

维度LangGraphAutoGenCrewAI
编程模型有向图多Agent对话角色+任务
控制精度最高
学习成本
多Agent协作通过图实现原生原生
状态持久化有限
人机协作有限
生产就绪较好实验性中等

选型建议

  1. 精确控制型任务:LangGraph。当你需要明确定义每一步逻辑、支持中断恢复
  2. 多视角协作型任务:AutoGen。当任务需要多个Agent讨论和协作
  3. 快速开发型任务:CrewAI。当你需要快速搭一个能跑的多Agent系统
  4. 生产部署:建议基于LangGraph做定制,控制力和可维护性最强

总结

智能体框架仍在快速演化,没有"最佳选择"。核心是理解各框架的设计哲学:LangGraph追求控制力,AutoGen追求协作自然性,CrewAI追求易用性。随着MCP等标准化协议的推广,未来的趋势是框架间的互操作性增强——你可以用LangGraph编排流程、AutoGen处理讨论环节、MCP统一工具接口。选型不是单选,而是组合。