LangGraph vs CrewAI 对比

低层级、基于图结构的智能体编排运行时

VS
CrewAI

通过角色驱动的智能体团队 + 事件驱动的 Flow 实现生产级编排

13 分钟阅读AI

快速结论

没有绝对的赢家,胜出的是你工作流的形态:如果你的架构包含循环/条件分支,LangGraph 更占优势,尤其是在受监管的流程中。如果你想用更少的代码实现'角色团队',CrewAI 能更快给出结果;如果你会频繁对接 MCP,CrewAI 专属的 DSL 是一大优势。2026 年还有第三种选择:对于简单的自动化任务,或许根本不需要框架。

LangGraphCrewAI
阅读完整结论

评分对比

图表加载中…

详细评分

详细评分: LangGraph 和 CrewAI ——按类别打分,满分 10 分
分类LangGraphCrewAI
性能
8/10
8/10
学习难易度
5/10
8/10
生态系统
8/10
7/10
社区
8/10
8/10
就业市场
7/10
6/10
面向未来
9/10
8/10

优缺点

LangGraph

优点

  • 精细化控制:可以在同一张图中混合确定性步骤与 LLM 驱动的步骤
  • 通过 Checkpointer 实现按线程(thread)划分的状态持久化,通过 Store 实现跨线程的长期记忆
  • 内置的 interrupt() 支持人工介入暂停,可通过 thread_id 从中断处继续执行
  • 通过 LangSmith 实现端到端追踪和生产级性能可观测性
  • 在 Klarna、Cisco、Toyota 等企业的生产使用已被 LangChain 客户案例记录
  • 与 LangChain 庞大的集成生态天然兼容(42K+ GitHub 星标)
  • 库本身完全采用 MIT 许可证且免费;托管版 LangSmith 是独立的可选层

缺点

  • 用官方文档自己的话说是'非常底层'——对于简单项目而言需要写过多的代码
  • 图/节点/边的心智模型比 CrewAI 的角色驱动模型更抽象,学习曲线更陡峭
  • 没有突出的专属 MCP 集成文档页面;适配器停留在 LangChain 的 agents 层
  • 在简单场景下,文档会引导你转向 LangChain 自带的预构建智能体架构
  • LangSmith 按用量计费的 LCU/LSU 模式,在大规模使用时可能让成本难以预估

最适合

需要分支、条件判断和循环(cyclic)工作流的复杂智能体系统需要长时间运行、可容错、能从检查点恢复的生产级智能体需要细粒度人工审批步骤的受监管流程(金融、医疗)已经在使用 LangChain 生态、并追求最大控制力的资深团队

CrewAI

优点

  • 通过 Crews 用少量代码搭建角色驱动的智能体协作——非常适合快速原型开发
  • Flows 是专门用于事件驱动、状态管理、条件/循环工作流的独立且强大的层级
  • 通过 @human_feedback 装饰器(v1.8+)实现本地同步的人工审批
  • 专属 MCP DSL(`mcps` 字段)+ MCPServerAdapter:同时支持 stdio/SSE/Streamable HTTP 三种传输方式
  • 58,978 个 GitHub 星标;据官方文档,已有超过 10 万名开发者通过社区课程获得认证
  • 通过 `npx skills add crewaiinc/skills` 与 Claude Code、Codex 等编码智能体实现官方集成
  • 库采用 MIT 许可证,免费;AMP 平台的 Free 层每月提供 50 次工作流执行

缺点

  • 开箱即用的、基于 webhook 的(异步、生产级)人工审批依赖 Enterprise 套餐;开源版需要你自行编写 provider
  • AMP Free 层每月限制 50 次工作流执行——可观测性是开放的,但配额很快就会用完
  • CrewAI 未发布官方、独立的性能基准测试页面;其公开的企业案例细节也不如 LangGraph 详尽
  • 代码仓库更年轻(2023 年 10 月创建)——尚未达到 LangGraph 自 2023 年 8 月以来积累的生态深度
  • 1.15.22 之前的版本在处理非 UTF-8 字符时存在 JSON 检查点损坏的问题(现已修复)

最适合

快速原型开发,以及习惯用'角色团队'心智模型工作的团队需要频繁对接 MCP 服务器(stdio/SSE/HTTP)、希望使用专属 DSL 的团队希望通过官方技能包与编码智能体(Claude Code、Codex)集成的用户希望用少量代码上线生产环境、且拥有 Enterprise 预算的中大型团队

代码对比

LangGraph
# LangGraph —— 带检查点、需人工审批的简单智能体流程
from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.types import interrupt, Command
from typing import TypedDict

class State(TypedDict):
    input: str
    approved: bool
    result: str

def draft_step(state: State) -> dict:
    return {"result": f"draft for: {state['input']}"}

def approval_step(state: State) -> dict:
    decision = interrupt({"question": "Approve this draft?", "draft": state["result"]})
    return {"approved": decision == "yes"}

graph = StateGraph(State)
graph.add_node("draft", draft_step)
graph.add_node("approval", approval_step)
graph.add_edge(START, "draft")
graph.add_edge("draft", "approval")
graph.add_edge("approval", END)

app = graph.compile(checkpointer=InMemorySaver())
config = {"configurable": {"thread_id": "run-1"}}
app.invoke({"input": "weekly report"}, config=config)
# 人工审批后从中断处继续执行:
app.invoke(Command(resume="yes"), config=config)
CrewAI
# CrewAI —— Flow + Crew,通过 @human_feedback 实现人工审批流程(crewai >= 1.8.0)
from crewai import Agent, Crew, Task
from crewai.flow.flow import Flow, listen, start
from crewai.flow.human_feedback import HumanFeedbackResult, human_feedback

writer = Agent(
    role="Content Writer",
    goal="Draft a short weekly report",
    backstory="You are a concise technical writer.",
)

draft_task = Task(
    description="Write a one-paragraph weekly report about {topic}",
    expected_output="A one-paragraph report",
    agent=writer,
)

class ReportFlow(Flow):
    @start()
    def create_draft(self):
        crew = Crew(agents=[writer], tasks=[draft_task])
        return str(crew.kickoff(inputs={"topic": "deployment metrics"}))

    # emit + llm:将自由文本反馈归约为单一结果
    @listen(create_draft)
    @human_feedback(
        message="Approve this draft, or say what needs changing:",
        emit=["approved", "rejected"],
        llm="gpt-4o-mini",
        default_outcome="rejected",
    )
    def review_draft(self, draft):
        return draft

    # HumanFeedbackResult 会传递给监听者,而不是被装饰的方法本身
    @listen("approved")
    def publish(self, result: HumanFeedbackResult):
        print(f"Published: {result.output}")

    @listen("rejected")
    def discard(self, result: HumanFeedbackResult):
        print(f"Rejected: {result.feedback}")

flow = ReportFlow()
flow.kickoff()

结论

没有绝对的赢家,胜出的是你工作流的形态:如果你的架构包含循环/条件分支,LangGraph 更占优势,尤其是在受监管的流程中。如果你想用更少的代码实现'角色团队',CrewAI 能更快给出结果;如果你会频繁对接 MCP,CrewAI 专属的 DSL 是一大优势。2026 年还有第三种选择:对于简单的自动化任务,或许根本不需要框架。

获取免费咨询
常见问题

常见问题

两者都在积极面向生产环境进行开发。LangGraph 拥有 42,222 个 GitHub 星标,具备持久化执行能力,其产品页的'信赖名单'logo 墙中列出了 Cisco、Nvidia、ServiceNow、Klarna 等企业;CrewAI 拥有 58,978 个星标,官方建议'生产就绪的应用应从 Flow 开始',并分享了 PwC、IBM、AWS 的案例研究。两者的官网都没有明确宣称自己'更适合'——你应该根据自己工作流中分支/循环的复杂程度来做决定。

相关博客文章

查看全部文章

相关项目

查看全部项目
全部对比