Agent框架的核心问题

构建AI Agent需要解决三个核心问题:任务规划与分解、工具调用与执行、多Agent协作。不同的Agent框架对这些问题的回答各不相同,形成了截然不同的编程范式。

LangGraph:图驱动的精确控制

设计哲学

LangGraph将Agent工作流建模为有向图:节点是处理步骤,边是控制流。这种设计赋予了开发者对Agent行为的精确控制。

核心概念

from langgraph.graph import StateGraph, END

class AgentState(TypedDict):
    messages: list
    tool_results: list
    next_step: str

# 定义图
graph = StateGraph(AgentState)

# 添加节点
graph.add_node("planner", plan_task)
graph.add_node("executor", execute_tools)
graph.add_node("reviewer", review_results)

# 添加边(控制流)
graph.add_edge("planner", "executor")
graph.add_conditional_edges(
    "executor",
    lambda state: "reviewer" if state["tool_results"] else END,
    {True: "reviewer", False: END}
)
graph.add_conditional_edges(
    "reviewer",
    lambda state: "planner" if not state["success"] else END
)

优势

精确控制:图的拓扑结构让Agent的执行路径完全可见和可预测。这在需要审计和合规的场景中至关重要。

状态管理:LangGraph内置了检查点(checkpoint)机制,可以在任何节点暂停和恢复执行。这对于长时间运行的Agent任务非常有用。

人机协作interrupt_beforeinterrupt_after参数允许在特定节点暂停,等待人类反馈:

graph.compile(
    checkpointer=MemorySaver(),
    interrupt_before=["executor"]  # 执行前等待人类确认
)

局限

  • 学习曲线陡峭,图思维需要适应
  • 简单任务显得过度工程化
  • 调试复杂图流程需要可视化工具辅助

AutoGen:多Agent对话的原生范式

设计哲学

AutoGen(微软研究院)将多Agent协作建模为对话。每个Agent有角色定义,通过消息传递完成协作。

核心模式

from autogen import AssistantAgent, UserProxyAgent, GroupChat

# 创建Agent
planner = AssistantAgent(
    name="Planner",
    system_message="你负责分析用户需求并制定执行计划",
    llm_config=llm_config
)

coder = AssistantAgent(
    name="Coder",
    system_message="你负责根据计划编写代码",
    llm_config=llm_config
)

reviewer = AssistantAgent(
    name="Reviewer",
    system_message="你负责审查代码质量",
    llm_config=llm_config
)

user_proxy = UserProxyAgent(
    name="User",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "workspace"}
)

# 创建群聊
group_chat = GroupChat(
    agents=[user_proxy, planner, coder, reviewer],
    messages=[],
    max_round=15
)

manager = GroupChatManager(groupchat=group_chat, llm_config=llm_config)
user_proxy.initiate_chat(manager, message="实现一个用户注册API")

优势

对话式协作自然:多Agent之间的协作就像团队会议,每个Agent专注于自己的职责。

代码执行能力:UserProxyAgent可以自动执行代码并反馈结果,形成"写代码→运行→调试"的闭环。

灵活的对话模式:支持一对一对话、群聊、嵌套对话等多种模式。

局限

  • 对话轮次控制不够精确,容易出现"对话跑偏"
  • Agent之间的消息传递消耗大量token
  • 缺乏全局状态管理,难以实现复杂控制流

CrewAI:角色驱动的团队协作

设计哲学

CrewAI(原Crewy)将Agent协作建模为"团队执行任务":定义角色、分配任务、遵循流程。

核心模式

from crewai import Agent, Task, Crew, Process

researcher = Agent(
    role="AI研究员",
    goal="收集和分析AI领域最新技术进展",
    backstory="你是一位资深的AI研究员,擅长技术调研",
    tools=[search_tool, web_scraper],
    llm=llm
)

writer = Agent(
    role="技术撰稿人",
    goal="将研究结果转化为易读的技术文章",
    backstory="你是一位经验丰富的技术作者",
    llm=llm
)

research_task = Task(
    description="调研RAG技术的最新进展",
    agent=researcher,
    expected_output="一份包含5个关键发现的研究报告"
)

write_task = Task(
    description="基于研究报告撰写一篇技术博客",
    agent=writer,
    expected_output="一篇2000字的技术博客文章",
    context=[research_task]  # 依赖前一个任务
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, write_task],
    process=Process.sequential  # 顺序执行
)

result = crew.kickoff()

优势

直观的角色模型:Agent定义包含角色、目标、背景故事,非常贴近真实团队结构。

任务依赖管理:通过context参数声明任务间的依赖关系,框架自动管理执行顺序。

工具集成简单@tool装饰器让任何Python函数变成Agent可用的工具。

局限

  • 底层基于ReAct模式,对复杂控制流支持有限
  • 错误处理机制不够完善
  • 社区规模和生态比LangGraph小

实战对比:同一任务三种实现

任务:“分析GitHub仓库的代码质量并生成报告”

LangGraph实现

图结构:
  clone_repo → analyze_structure → analyze_quality → 
  check_security → generate_report → review → (pass: END / fail: regenerate)
  • 控制精确,可以精确控制每个步骤
  • 报告不满意时可以回到特定步骤重新执行
  • 代码量最多,约150行

AutoGen实现

群聊:
  CodeAnalyzer: "我来分析代码结构..."
  SecurityExpert: "我发现潜在SQL注入..."
  ReportWriter: "我来整合分析结果..."
  User: "报告需要补充测试覆盖率分析"
  • 多专家协作自然
  • 可以动态调整分析方向
  • 消耗token最多,约15轮对话

CrewAI实现

团队:
  代码分析Agent → 任务:分析代码结构和质量
  安全审计Agent → 任务:检查安全漏洞
  报告撰写Agent → 任务:生成综合报告
  • 定义最简洁,约50行
  • 执行流程清晰
  • 灵活性最低

选型决策

维度LangGraphAutoGenCrewAI
控制精度★★★★★★★★★★★
开发效率★★★★★★★★★★★★
多Agent协作★★★★★★★★★★★★
适合场景生产级Agent研究探索快速原型
学习曲线陡峭中等平缓
社区活跃度最高

具体建议

选LangGraph:需要精确控制Agent行为、有审计合规要求、长时间运行的任务。

选AutoGen:需要多专家协作、研究探索性任务、对话式交互自然。

选CrewAI:快速原型、任务流程清晰、团队规模小。

结语

Agent框架的竞争本质上是"控制力 vs 易用性"的权衡。LangGraph选择了最大控制力,CrewAI选择了最大易用性,AutoGen在中间找到了多Agent对话的独特位置。框架选型没有银弹,关键看你的应用场景更需要哪一端。