005|主流多 Agent 框架对比:LangGraph / CrewAI / AutoGen / LlamaIndex
LangGraph、CrewAI、AutoGen、LlamaIndex Workflows 这四个框架各有定位,选错框架会让项目后期很痛苦。
核心结论:LangGraph(兰格·格拉夫)、CrewAI(克鲁·艾)、AutoGen(奥·托·杰恩)、LlamaIndex Workflows(拉·玛·因·戴克斯 沃克·弗洛兹)是四款主流多 Agent 框架。它们抽象层级不同、适合场景不同,选错会让项目后期很痛苦。
一、四个框架一句话定位
| 框架 | 读法 | 一句话定位 |
|---|---|---|
| LangGraph | 兰格·格拉夫 | 用图结构编排复杂工作流,流程可控 |
| CrewAI | 克鲁·艾 | 用角色和团队协作,快速搭 demo |
| AutoGen | 奥·托·杰恩 | 多 Agent 对话式协作,微软出品 |
| LlamaIndex Workflows | 拉·玛·因·戴克斯 沃克·弗洛兹 | 事件驱动的 RAG + Agent 工作流 |
二、对比维度
| 维度 | 说明 |
|---|---|
| 抽象层级 | 高抽象(声明式)还是低抽象(代码式) |
| 流程控制 | 固定流程、条件分支、循环支持 |
| 状态管理 | 是否有内置状态,怎么共享 |
| 通信方式 | Agent 之间怎么传递信息 |
| 学习曲线 | 入门难度 |
| 生态成熟度 | 周边工具、社区 |
| 适合场景 | 什么项目适合用它 |
三、LangGraph(兰格·格拉夫)
特点
- 和 LangChain(兰·切恩)生态深度绑定
- 用图(Graph / 格拉夫)组织节点
- 状态管理内置
- 支持条件分支、循环、并行
- 可持久化 checkpoint(切克·泡·恩特)
代码风格
偏代码式,自己写节点和路由。
workflow = StateGraph(AgentState)
workflow.add_node("data_query", 数据查询)
workflow.add_edge("intent", "data_query")
workflow.add_conditional_edge("data_query", 路由SQL)
优点
- 灵活,流程可控
- 调试能力强
- 生态成熟
- 适合复杂系统
缺点
- 依赖 LangChain
- 学习成本较高
- 节点太多时图会复杂
适合
- 已有 LangChain 基础
- 流程复杂,有分支、循环
- 需要精细控制每个节点
四、CrewAI(克鲁·艾)
特点
- 高抽象,"角色扮演"式
- 你定义 Agent 角色、任务、团队
- 它自动帮你协作
- 不需要自己写图结构
代码风格
声明式,像搭团队。
agent1 = Agent(
role="数据分析师",
goal="查询数据",
backstory="擅长 SQL 和数据分析"
)
agent2 = Agent(
role="归因分析师",
goal="分析原因",
backstory="擅长业务分析"
)
task1 = Task(description="查询广东销售额", agent=agent1)
task2 = Task(description="分析下降原因", agent=agent2)
crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])
crew.kickoff()
优点
- 非常易上手
- 概念直观,像管理团队
- 快速做 demo
- 适合创意项目
缺点
- 黑盒,流程不可控
- 状态管理弱
- 不适合复杂条件分支
- 调试困难
- 企业场景需要谨慎
适合
- 快速验证想法
- 创意写作、研究助理
- 不需要严格流程控制的场景
五、AutoGen(奥·托·杰恩)
特点
- 微软出品
- 强调"对话式"多 Agent
- Agent 之间可以互相聊天
- 人在回路很自然
代码风格
创建多个 Agent,让它们对话。
assistant = AssistantAgent("数据分析师", llm_config=...)
critic = AssistantAgent("风控分析师", llm_config=...)
user_proxy = UserProxyAgent("用户")
groupchat = GroupChat(agents=[user_proxy, assistant, critic], messages=[])
manager = GroupChatManager(groupchat=groupchat)
user_proxy.initiate_chat(manager, message="为什么广东销售额下降?")
优点
- 多 Agent 对话很自然
- 适合人机协作
- 微软生态强
- 适合研究、编程、头脑风暴
缺点
- 对话容易失控
- 流程难以约束
- 成本高(多轮对话)
- 调试和评估困难
适合
- 编程助手
- 多角色讨论
- 需要人机协作的场景
- 研究类项目
六、LlamaIndex Workflows(拉·玛·因·戴克斯 沃克·弗洛兹)
特点
- LlamaIndex(拉·玛·因·戴克斯)出的工作流框架
- 基于事件驱动(Event-driven)
- 强调 RAG 和 Agent 结合
- 事件(Event / 伊·文特)是核心概念
代码风格
class QueryEvent(Event):
question: str
class ResultEvent(Event):
result: str
class DataQueryAgent(Workflow):
@step
async def query(self, ev: QueryEvent) -> ResultEvent:
result = await query_database(ev.question)
return ResultEvent(result=result)
优点
- 事件驱动,天然异步
- 和 RAG 结合好
- 适合检索增强类 Agent
- 可扩展性好
缺点
- 异步编程要求
- 社区比 LangChain 小
- 事件太多时调试难
适合
- 重度 RAG 项目
- 异步需求多
- 事件驱动的系统
七、横向对比表
| 维度 | LangGraph | CrewAI | AutoGen | LlamaIndex Workflows | 手写调度器 |
|---|---|---|---|---|---|
| 抽象层级 | 中 | 高 | 高 | 中 | 低 |
| 流程控制 | 强 | 弱 | 弱 | 中 | 自定义 |
| 状态管理 | 内置 | 弱 | 弱 | 事件驱动 | 自己写 |
| 通信方式 | 共享状态 | 角色协作 | 对话 | 事件 | 函数调用 |
| 学习曲线 | 中 | 低 | 中 | 中 | 低 |
| 调试能力 | 强 | 弱 | 弱 | 中 | 自定义 |
| 生态成熟度 | 强 | 中 | 强 | 中 | 无 |
| 适合快速 demo | 中 | 强 | 强 | 中 | 弱 |
| 适合生产系统 | 强 | 弱 | 中 | 中 | 看团队 |
| 和 LangChain 集成 | 强 | 中 | 弱 | 弱 | 无 |
| 和 RAG 集成 | 强 | 中 | 弱 | 强 | 自定义 |
| 异步支持 | 一般 | 弱 | 弱 | 强 | 自定义 |
八、不同场景推荐
| 场景 | 推荐框架 |
|---|---|
| 快速做 demo、验证想法 | CrewAI |
| 多 Agent 对话、编程协作 | AutoGen |
| 重度 RAG、检索增强 | LlamaIndex Workflows |
| 复杂工作流、企业系统 | LangGraph |
| 小团队、极简项目 | 手写调度器 |
| 已有 LangChain 项目 | LangGraph |
| 微软生态、研究项目 | AutoGen |
九、你的项目怎么选
6616AI 网站项目
- 不需要多 Agent
- 不需要这些框架
数据分析 Agent
- 流程复杂、有分支循环
- 推荐 LangGraph
Maza Studio(小说生成)
- 多个角色协作
- 可以试试 CrewAI 或 AutoGen
未来企业级 Agent 项目
- 流程严格、可审计
- 推荐 LangGraph
十、建议的学习路径
- 先精通 LangGraph(流程可控,适合企业)
- 了解 CrewAI 和 AutoGen(知道它们能做什么)
- 不要手写调度器(除非项目极简)
十一、一句话总结
LangGraph 适合流程复杂、需要精细控制的生产系统;CrewAI 适合快速 demo;AutoGen 适合对话协作;LlamaIndex 适合 RAG 驱动;手写调度器只在小而简的项目里有优势。
下一步可以读
- 006|Agent Memory 设计:让 Agent 有记性(已更新)
- 007|Agent 面试高频问题串讲(已更新)
- 008|Agent 项目工程化:代码组织、测试、部署(待更新)