LangGraph vs CrewAI vs AutoGen------Agentic 框架选型指南
2025 年,Agentic 框架已经进入"百团大战"阶段。面对 LangGraph、CrewAI、AutoGen 等众多选择,你应该选哪个?本文从架构设计、学习曲线、生态成熟度、生产就绪度四个维度进行深度对比,帮你做出正确决策。
一、引言
如果说 2023 年是"大模型元年",2024 年是"AI Agent 元年",那 2025 年就是"Agent 框架元年"。几乎每个月都有新的 Agent 框架涌现------LangGraph、CrewAI、AutoGen、Dify、Coze、Semantic Kernel、AgentLite......
对于技术选型者来说,选择困难症正在加剧。每个框架都声称自己是最好的,每个都有漂亮的 GitHub Star 数,但真正适合你业务场景的,可能只有一两个。
低代码/平台
多 Agent 协作
底层引擎
企业级
Semantic Kernel
.NET 原生
LangGraph
状态图编排
CrewAI
角色扮演
AutoGen
对话驱动
Dify
可视化拖拽
Coze
一站式平台
图:2025 年 Agentic 框架生态------从底层引擎到企业平台
本文聚焦三个最具代表性、GitHub 社区最活跃的框架------LangGraph、CrewAI 和 AutoGen------进行全方位对比。
二、三大框架速览
2.1 LangGraph
一句话描述 :LangChain 团队出品的基于状态图的 Agent 编排框架。
- GitHub Stars:10k+
- 定位:底层状态机引擎,提供最大的灵活性和控制力
- 核心理念:把 Agent 工作流建模为带状态的图(StateGraph),节点是操作,边是流转逻辑
条件路由
条件路由
start
think 思考节点
act 行动节点
end
observe 观察节点
图:LangGraph 核心理念------显式状态图(StateGraph),节点是操作,边是流转逻辑
python
# LangGraph 的核心理念:显式状态图
from langgraph.graph import StateGraph, END
class MyState(TypedDict):
messages: list
next_step: str
workflow = StateGraph(MyState)
workflow.add_node("think", think_node)
workflow.add_node("act", act_node)
workflow.add_node("observe", observe_node)
workflow.add_conditional_edges(
"think",
router_function, # 你的自定义路由逻辑
{"act": "act", "end": END}
)
workflow.add_edge("act", "observe")
workflow.add_edge("observe", "think")
app = workflow.compile()
2.2 CrewAI
一句话描述 :让 AI 像团队一样协作------定义角色、分配任务、管理协作流程。
- GitHub Stars:25k+
- 定位:多 Agent 协作框架,强调角色扮演(Role-Playing)
- 核心理念:定义 Agent 的"角色(Role)"、"目标(Goal)"和"背景故事(Backstory)",让它们自发协作
研究成果
初稿
终稿
研究员 Agent
角色: 市场研究员
目标: 分析市场趋势
撰稿人 Agent
角色: 报告撰写人
目标: 产出商业报告
编辑 Agent
角色: 内容编辑
目标: 润色优化
最终输出
图:CrewAI 核心理念------角色扮演 + 任务分配,模拟人类团队协作
python
# CrewAI 的核心理念:角色扮演 + 任务分配
from crewai import Agent, Task, Crew
# 定义角色
researcher = Agent(
role="市场研究员",
goal="深度分析目标市场,发现趋势和机会",
backstory="你是一位有 10 年经验的资深市场研究员,擅长数据驱动的分析",
)
writer = Agent(
role="报告撰写人",
goal="将研究成果转化为清晰、有说服力的商业报告",
backstory="你是一位顶尖的商业报告撰写专家",
)
# 定义任务
research_task = Task(
description="研究 2024 年中国 AI Agent 市场规模和竞争格局",
agent=researcher,
)
write_task = Task(
description="基于研究结果,撰写一份 3000 字的市场分析报告",
agent=writer,
)
# 组建团队
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process="sequential", # 顺序执行
)
result = crew.kickoff()
2.3 AutoGen(微软)
一句话描述 :微软出品的对话驱动多 Agent 框架,强调 Agent 之间的自然对话。
- GitHub Stars:40k+
- 定位:对话式多 Agent 协作,支持复杂的人机交互
- 核心理念:Agent 通过"聊天"来协作------就像人在 Slack 群里讨论问题一样
代码执行器 编程助手 Agent 用户代理 代码执行器 编程助手 Agent 用户代理 帮我写个数据分析脚本 好的,我先规划脚本结构... 执行生成的代码 返回执行结果 代码运行成功,结果如下... 请加个图表 执行更新后的代码 图表生成成功
图:AutoGen 核心理念------Agent 通过对话自然协作,Human-in-the-loop
python
# AutoGen 的核心理念:对话驱动
from autogen import AssistantAgent, UserProxyAgent
# 定义 Agent
assistant = AssistantAgent(
name="编程助手",
llm_config={"config_list": [{"model": "gpt-4o"}]},
system_message="你是一个资深的 Python 编程专家。",
)
user_proxy = UserProxyAgent(
name="用户代理",
human_input_mode="TERMINATE", # 关键决策时请求人类输入
code_execution_config={"work_dir": "coding"},
)
# 发起对话
user_proxy.initiate_chat(
assistant,
message="请帮我写一个数据分析脚本,分析 sales.csv 的月度趋势并生成图表",
)
三、四维度深度对比
3.1 架构设计
| 维度 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| 核心抽象 | 状态图(StateGraph) | 角色+任务(Agent+Task) | 对话(Conversation) |
| 控制流 | 显式图定义(节点+边) | 声明式(定义角色和任务,框架调度) | 对话自然流转 |
| 灵活性 | ★★★★★ 极细粒度控制 | ★★★☆☆ 受限于框架预设 | ★★★★☆ 对话式灵活 |
| 约束力 | ★★★★☆ 强约束,行为可预测 | ★★★☆☆ 中等 | ★★☆☆☆ 弱约束,涌现性强 |
| 状态管理 | 内置 TypedDict 状态 | 自动管理(不透明) | 对话历史即状态 |
设计哲学对比:
-
LangGraph 是"给你积木,你怎么搭都行"------它只是一个图执行引擎,所有逻辑由你定义。优点是极其灵活,缺点是代码量大、心智负担重。
-
CrewAI 是"给你设置好角色和任务描述,剩下的我来调度"------它封装了常见的协作模式。优点是上手快、代码少,缺点是不够灵活,遇到特殊需求时可能不够用。
-
AutoGen 是"让 Agent 自己聊去吧"------它最小化了人为设计工作流的负担,依赖 Agent 之间的对话涌现来完成任务。优点是自然、适合探索性任务,缺点是不可预测、成本高。
3.2 学习曲线
LangGraph: ████████░░ 熟悉图/状态机概念 → 2-3 天上手 → 1-2 周熟练
CrewAI: ████░░░░░░ 配置角色和任务即可 → 半天上手 → 3 天熟练
AutoGen: ██████░░░░ 理解 Agent 对话模式 → 1 天上手 → 1 周熟练
各阶段典型案例量对比:
| 阶段 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| 第一个 Hello World | ~50 行 | ~15 行 | ~20 行 |
| 有意义的 Demo | ~200 行 | ~50 行 | ~80 行 |
| 生产可用系统 | ~500+ 行 | ~150 行 | ~200 行 |
CrewAI 上手最快的原因:它的抽象层最高,你不需要理解"状态图"、"条件边"这些概念,只需要定义 Agent 的角色、目标和任务就可以开始工作。
LangGraph 学习成本最高但回报最大:一旦你掌握了图思考方式,你能构建任何复杂度的工作流,而不会被框架限制。
3.3 功能矩阵
| 功能 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| Tool Use | ✅ 原生支持(通过 LangChain 工具生态) | ✅ 内置 | ✅ 内置 |
| Human-in-the-Loop | ✅ 任意节点可中断 | ✅ 支持 | ✅ 核心特性 |
| 记忆/持久化 | ✅ 内置 Checkpointer | ✅ 内置 Memory | ⚠️ 需自行管理 |
| 流式输出 | ✅ 支持多种流模式 | ⚠️ 有限支持 | ✅ 支持 |
| 并行执行 | ✅ 支持(Send API) | ⚠️ 有限 | ✅ 支持 |
| 条件路由 | ✅ 核心特性 | ❌ 有机规划 | ⚠️ 通过对话 |
| 图可视化 | ✅ Mermaid/PNG | ❌ 无 | ❌ 无 |
| 缓存 | ✅ LangChain 缓存 | ❌ 无 | ❌ 无 |
| 异步 | ✅ 全异步支持 | ⚠️ 部分支持 | ✅ 支持 |
| 多 LLM 支持 | ✅ 任意 LangChain 模型 | ✅ 主流模型 | ✅ 主流模型 |
3.4 生产就绪度
| 维度 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| 可观测性 | LangSmith 集成 | 有限的日志 | 有限的日志 |
| 错误恢复 | 图级重试机制 | 任务级重试 | 对话级重试 |
| 成本追踪 | LangSmith | 手动 | 手动 |
| 安全性 | 工具级权限控制 | Agent 级 | 代码执行沙箱 |
| 部署方案 | LangGraph Cloud / 自部署 | 自部署 | 自部署 |
| 生产案例 | Elastic、LinkedIn、Uber | 中小企业较多 | 微软内部 + 外部 |
| API 稳定性 | ★★★★☆ | ★★★☆☆(API 变动频繁) | ★★★★☆ |
生产环境选型的关键考量:
python
# LangGraph 的生产优势:精细的容错控制
workflow.add_node("api_call", api_node, retry=RetryPolicy(
max_attempts=3,
initial_interval=1.0,
backoff_factor=2,
))
# 每个节点都可以独立监控
workflow.add_node("critical_step", critical_node,
tags=["production", "pii_handling"]
)
四、场景化选型建议
场景 1:构建企业内部 RAG 问答系统
推荐:LangGraph
理由:RAG 需要精细的流程控制(检索 → 评估相关性 → 重写查询 → 再次检索 → 生成),LangGraph 的条件路由最适合这种"根据中间结果决定下一步"的场景。
python
# RAG 的路由非常适合 LangGraph 的条件边
def route_after_retrieval(state):
if state["relevance_score"] > 0.8:
return "generate_answer"
elif state["relevance_score"] > 0.5:
return "rewrite_query"
else:
return "web_search"
场景 2:自动化市场调研报告生成
推荐:CrewAI
理由:这是一个典型的多角色协作任务(研究员 → 分析师 → 撰稿人),CrewAI 的角色扮演模型天然契合。不需要精细的流程控制,需要的是让 Agent 自然地分工协作。
场景 3:需要频繁人机交互的代码助手
推荐:AutoGen
理由:AutoGen 的 Human-in-the-loop 设计是最自然的------它允许 Agent 在执行到关键步骤时暂停并询问人类。写入文件前、执行危险命令前、关键决策点,都可以自动触发人工确认。
python
# AutoGen 的人机交互很自然
user_proxy = UserProxyAgent(
name="开发者",
human_input_mode="ALWAYS", # 每步都询问
code_execution_config={
"work_dir": "workspace",
"use_docker": True, # 安全隔离
}
)
场景 4:金融风控决策流程
推荐:LangGraph
理由:金融场景要求流程的每一步都可审计、可解释、可重放。LangGraph 的显式状态图让每一步决策都有迹可循,且内置的 Checkpointer 可以完整记录状态变更历史。
场景 5:快速原型验证
推荐:CrewAI → 确认方向后迁移到 LangGraph
理由:创业团队或探索性项目,先用 CrewAI 几天内搭出可用原型。验证可行性后,如果需要更精细的控制(更好的性能、更低的成本、更可靠的输出),再用 LangGraph 重写。
选型决策树:
你需要构建一个 Agent 系统
│
├─ 团队有状态机/图编程经验?
│ └─ 是 → LangGraph
│
├─ 需要极度精细的流程控制?
│ └─ 是 → LangGraph
│
├─ 任务是典型的多角色协作?
│ └─ 是 → CrewAI
│
├─ 需要频繁的人机交互?
│ └─ 是 → AutoGen
│
├─ 快速原型,几天内要 Demo?
│ └─ 是 → CrewAI
│
└─ 生产系统,需要可观测性?
└─ 是 → LangGraph
是
否
是
否
是
否
是
否
需要精细流程控制?
LangGraph
典型多角色协作?
CrewAI
频繁人机交互?
AutoGen
快速原型验证?
CrewAI → 后续迁移 LangGraph
LangGraph
生产首选
图:Agentic 框架选型决策树------根据需求找到最适合的框架
五、实战对比:用三个框架实现同一任务
为了给你一个直观感受,我们用三个框架实现同一个简单任务------"查询天气,如果下雨则建议带伞,否则建议出门散步"。
5.1 LangGraph 实现
python
from langgraph.graph import StateGraph, END
from typing import TypedDict
class WeatherState(TypedDict):
city: str
weather: str
suggestion: str
def get_weather(state):
# 模拟 API 调用
weather = "下雨" if "北京" in state["city"] else "晴天"
return {"weather": weather}
def decide_suggestion(state):
if "雨" in state["weather"]:
suggestion = "今天下雨,建议带伞出门"
else:
suggestion = "天气不错,建议出门散步"
return {"suggestion": suggestion}
workflow = StateGraph(WeatherState)
workflow.add_node("get_weather", get_weather)
workflow.add_node("suggest", decide_suggestion)
workflow.add_edge("get_weather", "suggest")
workflow.add_edge("suggest", END)
workflow.set_entry_point("get_weather")
app = workflow.compile()
result = app.invoke({"city": "北京"})
print(result["suggestion"])
5.2 CrewAI 实现
python
from crewai import Agent, Task, Crew
weather_agent = Agent(
role="天气查询助手",
goal="查询指定城市的天气,并根据天气给出活动建议",
backstory="你是一个贴心的生活助手,善于根据天气给出合理的出行建议",
)
task = Task(
description="查询北京的天气。如果下雨建议带伞,否则建议出门散步。",
agent=weather_agent,
expected_output="一句话的天气查询结果和活动建议",
)
crew = Crew(agents=[weather_agent], tasks=[task])
result = crew.kickoff()
5.3 AutoGen 实现
python
from autogen import AssistantAgent, UserProxyAgent
assistant = AssistantAgent(
name="天气助手",
system_message="你是天气查询助手。查询天气后给出活动建议。下雨→带伞,晴天→散步。",
)
user = UserProxyAgent(
name="用户",
human_input_mode="NEVER",
)
user.initiate_chat(
assistant,
message="查询北京的天气,给出活动建议",
)
5.4 代码量对比
| 框架 | 代码行数 | 核心概念数 |
|---|---|---|
| LangGraph | ~25 行 | StateGraph, State, Node, Edge, EntryPoint |
| CrewAI | ~12 行 | Agent, Task, Crew |
| AutoGen | ~10 行 | AssistantAgent, UserProxyAgent, Chat |
但要注意:代码量少不代表简单。当任务变得复杂时,LangGraph 的代码量增长是线性的,而 CrewAI 和 AutoGen 可能因为框架限制而需要更复杂的 workaround。
六、其他值得关注的框架
除了三大框架,还有一些特定场景下有优势的框架:
| 框架 | 特点 | 适合谁 |
|---|---|---|
| Dify | 可视化拖拽、低代码 | 非技术用户、快速原型 |
| Coze(字节) | 一站式、对接多平台 | 需要快速部署到飞书/微信 |
| Semantic Kernel(微软) | C#/Java 原生支持 | .NET 技术栈团队 |
| Agno | 轻量级(~5000 行核心代码) | 追求极简的开发者 |
| Smolagents(HuggingFace) | 开源、HuggingFace 生态 | 偏好开源的团队 |
七、总结
一句话总结
| 框架 | 一句话 |
|---|---|
| LangGraph | 如果你需要完全掌控工作流的每个细节,选它 |
| CrewAI | 如果你想用最少的代码让多个 Agent 协作起来,选它 |
| AutoGen | 如果你希望 Agent 之间通过对话自然协作,且需要频繁人机交互,选它 |
核心建议
- 不要过早优化框架选型------先用最简单的方案验证你的 Agent 想法是否可行,再根据实际痛点选择框架
- LangGraph + CrewAI 可以混合使用------在 LangGraph 图中的一个节点里调用 CrewAI 的 Crew,或者反过来
- 关注框架的 API 稳定性------Agent 框架还处于快速演进期,升级版本可能会破坏现有代码。做好版本锁定和测试
- 框架只是工具------更重要的还是你对 Agentic Workflow 设计模式的理解(见本系列第三篇)。一个设计良好的工作流,即使裸写也比一个糟糕的框架用法效果好
在本系列最后一篇文章中,我们将聊聊把 Agentic Workflow 真正部署到生产环境时你会遇到的那些坑------以及怎么填。