CrewAI与LangGraph对比:多Agent协作框架怎么选
2026年被业界称为智能体元年,多Agent协作系统正在从概念走向落地。我在最近的项目中深度使用了CrewAI和LangGraph,今天就跟大家聊聊这两个框架的真实体验。
说实话,这两个框架解决的是同一个问题:如何让多个AI Agent协同工作。但它们的思路完全不同,选错框架轻则多花开发时间,重则影响系统稳定性。
一、核心差异:一个像剧组,一个像工厂
CrewAI的设计理念很直观,把Agent当成团队成员。它用Agent、Task、Crew三个核心概念来组织工作流:
Agent:有角色(role)、目标(goal)和背景故事(backstory)的智能体
Task:具体任务,包含描述、期望输出和执行者
Crew:Agent和Task的组合,支持顺序执行、层级管理和动态委托
LangGraph走的是图式编排路线。它把整个系统建模成一张有向图:
State:用TypedDict定义的状态对象,所有节点的输入输出都围绕它
Node:处理函数,负责读取和更新状态
Edge:节点间的连接,支持条件分支
我之前用CrewAI开发过一个内容分析系统,三个Agent(研究员、写手、审核员)配合起来,50行代码就跑起来了。但后来接手一个金融审批流程,需要循环审核、条件分支和人工审批介入,这时CrewAI就有点力不从心,因为它的控制流不够灵活。
二、代码对比:同一个需求,两种写法
用一个实际场景展示两个框架的写法差异:实现一个研究、撰写、审核的工作流,如果审核不通过就返回重写。
CrewAI实现
from crewai import Agent, Task, Crew
from crewai_tools import SerpAPITool, DirectoryReadTool
# 创建Agent
researcher = Agent(
role="Research Analyst",
goal="收集关于{topic}的深度信息",
backstory="你是一位资深研究员,擅长挖掘关键信息",
tools=[SerpAPITool()]
)
writer = Agent(
role="Content Writer",
goal="将研究内容转化为高质量文章",
backstory="你是专业科技写手,文笔简洁有力"
)
reviewer = Agent(
role="Quality Reviewer",
goal="确保文章质量符合标准",
backstory="你是资深编辑,严谨认真"
)
# 定义任务
research_task = Task(
description="深度研究{topic}的技术细节和行业应用",
agent=researcher,
expected_output="结构化的研究报告"
)
write_task = Task(
description="基于研究报告撰写文章初稿",
agent=writer,
expected_output="完整的文章内容"
)
review_task = Task(
description="审核文章,指出需要改进的地方",
agent=reviewer,
expected_output="改进建议列表"
)
# 组装Crew并执行
crew = Crew(
agents=[researcher, writer, reviewer],
tasks=[research_task, write_task, review_task],
process="hierarchical",
verbose=True
)
result = crew.kickoff(inputs={"topic": "LangGraph vs CrewAI"})CrewAI的代码很符合直觉,像在描述一个真实团队。但问题在于,当审核不通过需要循环重写时,你得用Flows模块才行,原生的Crew不够用。
LangGraph实现
from langgraph.graph import StateGraph, END
from typing import TypedDict
from pydantic import BaseModel
import operator
# 定义状态
class AgentState(TypedDict):
query: str
research: str
draft: str
review_feedback: str
revision_count: int
max_revisions: int
# 定义节点函数
def research_node(state: AgentState) -> AgentState:
research_result = perform_deep_search(state["query"])
return {"research": research_result}
def write_node(state: AgentState) -> AgentState:
draft = write_article(state["research"])
return {"draft": draft}
def review_node(state: AgentState) -> AgentState:
feedback = review_article(state["draft"])
return {"review_feedback": feedback}
def should_revise(state: AgentState) -> str:
if state["revision_count"] >= state["max_revisions"]:
return "end"
if "需要修改" in state["review_feedback"]:
return "rewrite"
return "end"
def rewrite_node(state: AgentState) -> AgentState:
revised = revise_article(state["draft"], state["review_feedback"])
return {
"draft": revised,
"revision_count": state["revision_count"] + 1
}
# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("research", research_node)
workflow.add_node("write", write_node)
workflow.add_node("review", review_node)
workflow.add_node("rewrite", rewrite_node)
# 定义边
workflow.set_entry_point("research")
workflow.add_edge("research", "write")
workflow.add_edge("write", "review")
workflow.add_conditional_edges(
"review",
should_revise,
{
"rewrite": "rewrite",
"end": END
}
)
workflow.add_edge("rewrite", "write")
# 编译执行
app = workflow.compile()
result = app.invoke({
"query": "LangGraph vs CrewAI",
"revision_count": 0,
"max_revisions": 3
})LangGraph的代码量确实多,但控制力强得多。想让它循环几次、什么条件下循环、中间插入人工审批,全都写得明明白白。
三、状态管理与持久化
这是两个框架拉开差距的核心战场。
CrewAI的状态管理是隐式的。任务输出自动流向下一个任务,内置记忆系统(ChromaDB+SQLite)记录提取的事实。但代价是你很难精确知道谁在什么时刻读了什么数据。Flows模块可以显式声明状态,不过Crew内部仍然用隐式传递。
LangGraph的状态管理是显式的。你用TypedDict定义每个字段,用Reducer控制更新逻辑:
from typing import Annotated
from operator import add
class ChatState(TypedDict):
messages: Annotated[list, add]
user_id: str
session_active: bool更关键的是Checkpoint机制。LangGraph可以在每个节点执行后保存快照:
from langgraph.checkpoint.sqlite import SqliteSaver
checkpointer = SqliteSaver.from_conn_string(":memory:")
app = workflow.compile(checkpointer=checkpointer)
result = app.invoke(
None,
config={"configurable": {"thread_id": "session-123"}}
)这个特性在做人工审批加长时间等待场景时非常有用。我之前用CrewAI做过类似需求,被迫自己实现状态持久化,吃了不少苦头。
四、人工介入能力
如果系统需要人工介入,两个框架的差距就更明显了:
| 能力 | CrewAI | LangGraph |
|---|---|---|
| 基础人工输入 | human_input=True | 原生interrupt() |
| 持久化等待 | 需自行实现 | Checkpoint自动保存 |
| Web异步审批 | 需自定义架构 | 原生支持 |
| 断点恢复 | 不支持 | 支持 |
去年我做了一个客服多Agent系统,需要在AI处理不了时转人工。用CrewAI折腾了两周,最后还是在Agent逻辑里硬编码了状态检查。换成LangGraph后,一个interrupt()调用就搞定了。
五、生态与工具集成
CrewAI是独立框架,不依赖LangChain。内置了crewai-tools工具包,涵盖搜索、文件读写、网页抓取等常用能力。GitHub星标41K以上,60%的财富500强企业在探索性项目中选用。它还支持YAML配置文件管理Agent定义,对非技术背景的产品经理很友好。
LangGraph背靠LangChain生态,继承了300多个工具集成。配合LangSmith可以实现完整的链路追踪、调试和评估。不过这也意味着学习曲线更陡,你得同时理解LangChain的基础概念。实测数据显示,LangGraph在重复请求场景下可实现40%到50%的LLM调用节省,这得益于其状态缓存机制。
六、流式输出与调试体验
如果你做的是实时聊天界面,流式输出能力很关键。
CrewAI通过stream=True参数支持任务级输出流,可以获取每个Agent的执行进度:
crew = Crew(agents=agents, tasks=tasks, verbose=True)
for token in crew.kickoff_streaming(inputs={"topic": "AI Agent"}):
print(token, end="", flush=True)但它只能输出任务级别的chunk,粒度不够细。
LangGraph提供5种流式模式:values(每个节点执行后的完整状态)、updates(状态变化量)、messages(逐Token输出)、custom(自定义节点数据)和debug(完整执行轨迹)。
async for event in app.astream_events(
{"query": "AI"},
config={"configurable": {"thread_id": "1"}},
stream_mode="messages"
):
if event["event"] == "on_chat_model_stream":
print(event["data"]["chunk"].content, end="", flush=True)在做AI聊天应用时,LangGraph的逐Token流式输出能带来更流畅的用户体验。
七、错误处理与容错
真实项目中,LLM API超时、限流、网络波动都是常见问题。
CrewAI的错误处理比较依赖Agent的prompt内置fallback逻辑,以及任务级的重试配置:
task = Task(
description="复杂任务",
agent=researcher,
max_retries=3,
retry_delay=10,
tools=[search_tool]
)优点是配置简单,缺点是遇到复杂错误链时难以精细控制。
LangGraph把错误处理做成了图的一部分。你可以在节点层面捕获异常:
def safe_research(state: AgentState) -> AgentState:
try:
result = llm_with_tools.invoke(state["query"])
return {"research": result.content}
except RateLimitError:
time.sleep(60)
return safe_research(state)
except Exception as e:
return {"error": str(e)}配合Checkpoint机制,即使整条流水线的某个环节失败,从断点恢复后也不会重复执行已经成功的部分。
八、选型建议:看场景
结合2026年的智能体落地趋势,我的建议是:
选CrewAI的场景:你需要快速验证想法、构建内容流水线(研究员加写手加编辑)、团队对图论不熟悉、或者你想用YAML配置文件管理Agent定义。上手时间以小时计,很适合MVP阶段。
选LangGraph的场景:系统需要生产级稳定性、复杂条件分支和循环、人工审批介入、长时间运行任务、或者你已经在用LangChain生态。初期投入大,但后期可控性完全不在一个层次。
一个实用的策略是:用CrewAI做PoC验证业务可行性,用LangGraph做生产级实现。两者的核心概念可以映射,Crew的层级模式约等于LangGraph的Supervisor模式,迁移成本可控。
总结
CrewAI和LangGraph不是非此即彼的选择,而是应对不同复杂度的工具。作为工程师,我们的任务是准确评估需求,选择合适的工具。
如果你正在做一个需要长期维护的多Agent系统,别被CrewAI的快速上手迷惑,省下的开发时间迟早会在运维阶段还回去。相反,如果只是周末做个演示Demo,CrewAI的直觉式API绝对能让你事半功倍。
选框架这事,适合最重要。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!