AI Agent 编排框架深度对比:LangGraph vs CrewAI vs AutoGen——从架构哲学到生产选型

950 阅读10分钟

引言

2025-2026年是AI Agent工程化的爆发期。当你的Agent从"单个LLM+Prompt"进化到"多Agent协作系统"时,一个不可回避的问题浮现:用什么框架编排?

目前开源社区三大主流选择——LangGraph、CrewAI、AutoGen——代表了三种截然不同的架构哲学:

  • LangGraph:图驱动,用显式状态机精确控制每一步
  • CrewAI:角色驱动,模拟人类团队的自然协作模式
  • AutoGen:对话驱动,通过Agent间的多轮对话迭代求解

本文将从架构设计哲学、核心抽象、代码实战、生产就绪性四个维度进行全方位对比,并给出选型决策树。


一、三大框架的架构哲学

1.1 LangGraph:图驱动的精确控制

LangGraph是LangChain团队推出的底层编排框架,核心思想是:一切皆节点,一切皆边

┌─────────────────────────────────────────────────┐
│                LangGraph 架构                    │
│                                                  │
│  ┌──────┐    ┌──────┐    ┌──────┐               │
│  │ Node │───▶│ Node │───▶│ Node │               │
│  │(分类) │    │(检索) │    │(生成) │               │
│  └──────┘    └──────┘    └──────┘               │
│       │            │            │                │
│       ▼            ▼            ▼                │
│  ┌─────────────────────────────────────┐        │
│  │        Shared State (TypedDict)      │        │
│  │  messages / intent / context / ...  │        │
│  └─────────────────────────────────────┘        │
│                    │                             │
│              Checkpointer                        │
│         (Memory / SQLite / Postgres)             │
└─────────────────────────────────────────────────┘

核心抽象:

概念说明
StateTypedDict定义的共享状态,在节点间传递
Node纯函数,接收State、返回State更新
Edge控制流连接(普通边/条件边)
Checkpointer每步自动保存状态,支持断点恢复

设计哲学: 开发者必须显式定义所有可能的执行路径和条件分支。这种"白盒"设计保证了流程的可预测性、可审计性、可调试性,代价是代码量较大、学习曲线陡峭。

1.2 CrewAI:角色驱动的团队协作

CrewAI的核心隐喻是人类团队。你定义角色(Agent)、分配任务(Task)、组建团队(Crew),框架自动处理协作流程。

┌─────────────────────────────────────────────────┐
│               CrewAI 架构                        │
│                                                  │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐         │
│  │  Agent  │  │  Agent  │  │  Agent  │         │
│  │研究员    │  │写作者    │  │审核员    │         │
│  │goal:... │  │goal:... │  │goal:... │         │
│  │backstory│  │backstory│  │backstory│         │
│  └────┬────┘  └────┬────┘  └────┬────┘         │
│       │            │            │                │
│       ▼            ▼            ▼                │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐         │
│  │  Task   │──▶│  Task   │──▶│  Task   │         │
│  │(调研)   │  │(撰写)   │  │(审核)   │         │
│  └─────────┘  └─────────┘  └─────────┘         │
│                                                  │
│  Process: Sequential / Hierarchical / Flows     │
│  Memory: Short-term / Long-term / Entity         │
└─────────────────────────────────────────────────┘

核心抽象:

概念说明
Agent角色+目标+背景故事+工具集
Task任务描述+预期输出+关联Agent
CrewAgent集合+Process流程模式
ProcessSequential(顺序)/ Hierarchical(层级经理调度)/ Flows(事件驱动)

设计哲学: 用最直觉的方式映射人类协作模式。Agent的backstory让LLM更好地理解角色定位,降低Prompt工程负担。代码量少、上手快,但复杂流程的控制粒度不如LangGraph。

1.3 AutoGen:对话驱动的迭代求解

AutoGen是Microsoft研究院推出的多Agent对话框架,核心思想是:Agent通过"聊天"来协作,问题通过多轮对话浮现答案

┌─────────────────────────────────────────────────┐
│              AutoGen 架构                        │
│                                                  │
│  ┌───────────┐  ┌───────────────────────┐       │
│  │UserProxy  │  │     GroupChat         │       │
│  │Agent      │  │  ┌─────┐ ┌─────┐     │       │
│  │           │──▶│  │Code │ │Writer│     │       │
│  │           │  │  │Gen  │ │      │     │       │
│  │           │  │  └──┬──┘ └──┬──┘     │       │
│  └───────────┘  │     │      │        │       │
│                 │     ▼      ▼        │       │
│                 │  ┌──────────────┐   │       │
│                 │  │ GroupChat    │   │       │
│                 │  │ Manager      │   │       │
│                 │  │ (发言选择策略)  │   │       │
│                 │  └──────────────┘   │       │
│                 └───────────────────────┘       │
│                                                  │
│  终止条件: TERMINATE / max_round / custom       │
│  发言选择: RoundRobin / Auto(LLM决策)           │
└─────────────────────────────────────────────────┘

v0.4 架构三层分层设计(2025年1月重构):

层级名称职责
Core核心层事件驱动代理系统基础构建块
AgentChat中间层任务驱动高级API(群聊、代码执行、预构建代理)
Extensions扩展层第三方集成(Azure代码执行器、OpenAI客户端、MCP等)

⚠️ 重要变更: 2025年10月,Microsoft宣布AutoGen与Semantic Kernel合并为Microsoft Agent Framework(MAF)。AutoGen不再作为独立库接收重大功能更新,但其对话驱动的架构思想被MAF继承。


二、核心机制对比:状态、控制与工具

2.1 状态管理

这是三个框架最本质的差异:

# LangGraph:显式类型化状态
class AgentState(TypedDict):
    messages: Annotated[list, add_messages]  # 自定义reducer
    intent: str
    retrieved_docs: list[str]
    response: str

# CrewAI:任务间上下文传递
task_research = Task(
    description="研究{topic}",
    expected_output="研究报告JSON",
    agent=researcher
)
task_write = Task(
    description="基于研究撰写文章",
    expected_output="完整文章",
    agent=writer,
    context=[task_research]  # 依赖上游任务输出
)

# AutoGen:对话历史即状态
# 状态隐含在GroupChat的messages列表中
# v0.4支持自定义内存组件

关键差异:

维度LangGraphCrewAIAutoGen
状态可见性全局显式TypedDict任务间context传递隐含在对话历史
类型安全✅ 编译期检查❌ 动态❌ 动态
持久化✅ 内置Checkpointer⚠️ 需配置Memory❌ 需自行实现
断点恢复✅ 原生支持⚠️ 有限支持❌ 无官方方案

2.2 执行控制

LangGraph提供最精细的控制——条件边、并行边、循环:

from langgraph.graph import StateGraph, START, END

workflow = StateGraph(AgentState)
workflow.add_node("classify", classify_intent)
workflow.add_node("retrieve", retrieve_documents)
workflow.add_node("generate", generate_response)
workflow.add_node("escalate", human_review)

workflow.add_edge(START, "classify")
workflow.add_edge("classify", "retrieve")

# 条件路由:根据意图决定是否需要人工审核
workflow.add_conditional_edges(
    "retrieve",
    lambda state: "escalate" if state["risk_level"] > 0.8 else "generate",
    {"escalate": "escalate", "generate": "generate"}
)
workflow.add_edge("escalate", "generate")
workflow.add_edge("generate", END)

graph = workflow.compile(
    checkpointer=MemorySaver(),  # 状态持久化
    interrupt_before=["escalate"]  # Human-in-the-Loop
)

CrewAI提供三种流程模式:

from crewai import Agent, Task, Crew, Process

# 模式1:顺序执行(任务按定义顺序逐一完成)
crew = Crew(
    agents=[researcher, writer, reviewer],
    tasks=[task_research, task_write, task_review],
    process=Process.sequential
)

# 模式2:层级管理(Manager Agent自动调度)
crew = Crew(
    agents=[researcher, writer, reviewer],
    tasks=[task_research, task_write, task_review],
    process=Process.hierarchical,
    manager_llm="gpt-4o"  # 经理Agent使用的模型
)

# 模式3:Flows(事件驱动,生产级架构)
# @start / @listen / @router 装饰器定义事件流

AutoGen通过对话轮次和发言策略控制:

from autogen import AssistantAgent, UserProxyAgent
from autogen import RoundRobinGroupChat, SelectorGroupChat

# AutoGen v0.4 (AgentChat层)
code_agent = AssistantAgent(name="Coder", system_message="...")
review_agent = AssistantAgent(name="Reviewer", system_message="...")

# 发言选择策略
group_chat = SelectorGroupChat(
    participants=[code_agent, review_agent],
    max_round=10,  # 防止无限循环
    termination_condition=lambda msgs: "TERMINATE" in msgs[-1].content
)

2.3 Human-in-the-Loop

框架实现方式灵活度
LangGraphinterrupt_before/after + Checkpointer⭐⭐⭐⭐⭐ 精确到任意节点
CrewAI通过自定义工具回调⭐⭐⭐ 需额外工程
AutoGenUserProxyAgent 多种输入模式⭐⭐⭐⭐ 天然支持

LangGraph的HITL是最成熟的,可精确中断在任意节点前/后,等待人工审核后恢复执行:

# 中断图执行,等待人工输入
graph = workflow.compile(
    checkpointer=PostgresSaver(conn_string),
    interrupt_before=["human_review"]
)

# 恢复执行
config = {"configurable": {"thread_id": "user-123"}}
result = graph.invoke(
    {"messages": [HumanMessage(content="继续执行,我已批准")]},
    config=config
)

三、生产就绪性对比

3.1 可观测性

能力LangGraphCrewAIAutoGen
追踪集成LangSmith(一等公民)内置日志OpenTelemetry(v0.4)
可视化Mermaid图导出CLI工具AutoGen Studio
节点级追踪✅ 每步状态快照❌ 任务级❌ 消息级
Token监控✅ LangSmith⚠️ 基础⚠️ v0.4增强

3.2 Token效率

这是一个常被忽视但极其重要的生产指标:

LangGraph:  ~2000 tokens/次(聚焦提示,节点独立)
CrewAI:     ~3500 tokens/次(Agent背景故事增加开销)
AutoGen:    ~8000 tokens/次(多轮对话历史累积)

AutoGen的对话驱动模式导致上下文窗口快速膨胀。在生产环境中,20轮对话可能消耗数万Tokens,成本显著高于其他两个框架。

3.3 错误处理与可靠性

# LangGraph:节点级装饰器容错
from langgraph.errors import GraphRecursionError

try:
    result = graph.invoke(input, config, recursion_limit=25)
except GraphRecursionError:
    # 图循环次数超限
    fallback_handler()

# CrewAI:任务级重试(需手动配置)
task = Task(
    description="...",
    agent=agent,
    max_iter=5  # Agent内部重试
)

# AutoGen:终止条件兜底
group_chat = SelectorGroupChat(
    participants=[...],
    max_round=15  # 硬性终止
)

3.4 部署架构

LangGraph:  LangGraph Cloud / LangGraph Studio(官方托管)
            + 自托管(FastAPI + PostgreSQL Checkpointer)

CrewAI:     CrewAI Enterprise(官方托管)
            + 自托管(FastAPI wrapper)

AutoGen:    已并入Microsoft Agent Framework
            + Azure AI Foundry托管
            + 自托管(Docker + 自定义持久化)

四、代码实战:同一个场景,三种实现

场景: 用户提交技术问题 → 分类意图 → 检索知识库 → 生成回答 → 必要时升级人工

LangGraph实现(~80行)

from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langgraph.checkpoint.memory import MemorySaver

class State(TypedDict):
    messages: Annotated[list, add_messages]
    intent: str
    docs: list
    needs_human: bool

def classify(state: State) -> dict:
    """意图分类节点"""
    response = llm.invoke([
        {"role": "system", "content": "分类用户意图: tech_support / billing / other"},
        *state["messages"]
    ])
    return {"intent": response.content, "needs_human": response.content == "billing"}

def retrieve(state: State) -> dict:
    """检索节点"""
    docs = vector_store.similarity_search(state["messages"][-1].content, k=3)
    return {"docs": docs}

def respond(state: State) -> dict:
    """生成回答节点"""
    context = "\n".join([d.page_content for d in state["docs"]])
    response = llm.invoke([
        {"role": "system", "content": f"基于以下资料回答:\n{context}"},
        *state["messages"]
    ])
    return {"messages": [response]}

def route(state: State) -> str:
    return "human" if state["needs_human"] else "retrieve"

graph = StateGraph(State)
graph.add_node("classify", classify)
graph.add_node("retrieve", retrieve)
graph.add_node("respond", respond)
graph.add_node("human", human_review)

graph.add_edge(START, "classify")
graph.add_conditional_edges("classify", route, {"retrieve": "retrieve", "human": "human"})
graph.add_edge("retrieve", "respond")
graph.add_edge("human", "respond")
graph.add_edge("respond", END)

app = graph.compile(checkpointer=MemorySaver())

CrewAI实现(~40行)

from crewai import Agent, Task, Crew, Process

classifier = Agent(
    role="意图分类器",
    goal="精确分类用户问题意图",
    backstory="你是一个经验丰富的客服路由专家",
    llm="gpt-4o-mini"
)

researcher = Agent(
    role="知识检索员",
    goal="从知识库中找到最相关的技术文档",
    backstory="你擅长在大量技术文档中快速定位答案",
    tools=[search_tool]
)

writer = Agent(
    role="回答生成器",
    goal="基于检索结果生成专业准确的技术回答",
    backstory="你是一个技术写作专家"
)

task_classify = Task(description="分类用户意图: {query}", expected_output="意图类别", agent=classifier)
task_search = Task(description="检索相关文档: {query}", expected_output="相关文档列表", agent=researcher, context=[task_classify])
task_respond = Task(description="生成专业回答", expected_output="最终回答", agent=writer, context=[task_search])

crew = Crew(agents=[classifier, researcher, writer], tasks=[task_classify, task_search, task_respond], process=Process.hierarchical, manager_llm="gpt-4o")
result = crew.kickoff(inputs={"query": "如何配置Kubernetes GPU调度?"})

AutoGen实现(~35行)

from autogen import AssistantAgent, UserProxyAgent, SelectorGroupChat

classifier = AssistantAgent(
    name="Classifier",
    system_message="分类用户意图并转发给合适的专家。用TERMINATE结束。",
    llm_config={"config_list": [{"model": "gpt-4o-mini"}]}
)

researcher = AssistantAgent(
    name="TechExpert",
    system_message="你是技术专家,负责检索知识库并回答技术问题。",
    tools=[search_function],
    llm_config={"config_list": [{"model": "gpt-4o"}]}
)

user = UserProxyAgent(
    name="User",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=0
)

group_chat = SelectorGroupChat(
    participants=[classifier, researcher, user],
    max_round=10
)

result = user.initiate_chat(
    group_chat,
    message="如何配置Kubernetes GPU调度?"
)

代码量对比:LangGraph(~80行)> CrewAI(~40行)> AutoGen(~35行),但LangGraph提供了最精确的控制粒度。


五、选型决策树

                    你的需求是什么?
                         │
              ┌──────────┼──────────┐
              ▼          ▼          ▼
          精确控制    角色化协作   迭代优化
          + 合规审计  + 快速原型  + 代码执行
              │          │          │
              ▼          ▼          ▼
         LangGraph   CrewAI     AutoGen
         /MAF

按场景推荐

场景推荐框架理由
企业级客服系统(合规/审计/可控路由)LangGraph显式状态机、条件分支、审计追踪、HITL
内容生产流水线(角色分工/创意协作)CrewAI角色隐喻直觉、backstory增强角色一致性
代码生成与自动化(迭代开发/沙盒执行)AutoGen内置代码执行、多轮对话优化
复杂数据分析(多步骤、分支决策)LangGraph精确流程控制、状态持久化
销售自动化(线索-分析-跟进-转化)CrewAI自然映射销售团队角色分工
研发原型验证(快速验证想法)CrewAI学习曲线最低、代码量最少
Microsoft生态深度集成AutoGen/MAF原生Azure集成、Semantic Kernel协同
需要LangChain生态工具链LangGraph无缝集成LangChain工具库

避坑指南

1. 不要从复杂架构开始 无论选择哪个框架,都从2-3个Agent开始验证核心流程。过早引入层级、并行、循环是Agent项目失败的首要原因。

2. 设置循环上限

# LangGraph
graph.invoke(input, config={"recursion_limit": 25})

# CrewAI
crew = Crew(..., max_iter=10)

# AutoGen
group_chat = SelectorGroupChat(..., max_round=15)

3. 控制上下文膨胀 AutoGen多轮对话会快速填满上下文窗口。使用摘要模型定期压缩对话历史,或用滑动窗口保留最近N轮。

4. 错误隔离 单点Agent故障不应导致整个系统崩溃。用装饰器或错误边界包裹每个Agent节点。


六、趋势展望

三大框架的演进方向正在趋同:

  • LangGraph 持续强化生产能力,LangGraph Cloud提供托管服务,LangGraph Studio提供可视化调试
  • CrewAI 从"快速原型"向"生产级"进化,Flows架构引入事件驱动、支持Guardrails
  • AutoGen 并入Microsoft Agent Framework,与Semantic Kernel统一,Python/.NET双语言支持

2026年的趋势是框架融合:LangGraph的精确控制、CrewAI的直觉化配置、AutoGen的对话驱动——优秀的设计理念正在互相渗透。选择框架时不要被社区热度绑架,回归你的具体场景需求才是正确答案。


总结

维度LangGraphCrewAIAutoGen
架构哲学图驱动显式控制角色驱动团队协作对话驱动迭代优化
学习曲线⭐⭐(陡峭)⭐⭐⭐⭐(平缓)⭐⭐⭐(中等)
生产就绪⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Token效率⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
可观测性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
HITL支持⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
适用规模企业级复杂流程中小规模快速迭代研究探索/代码生成
社区活跃度最活跃快速增长并入MAF

一句话选型:需要极致控制选LangGraph,追求快速上手选CrewAI,对话式迭代选AutoGen。