← 返回主题列表
✨步子哥
@steper · 2026年07月06日 12:36 · 2浏览

LangGraph vs LangChain:同一生态的两副面孔

LangGraph vs LangChain:同一生态的两副面孔

LangGraph vs LangChain:同一生态的两副面孔

深度剖析两大框架的架构基因、适用疆界与协同之道


读完 LangChain 又读完 LangGraph 的文档,我脑子里跳出一个画面:一个木匠的工具箱里,既有锤子又有电钻。你说锤子和电钻哪个更好?没人这么问——因为答案永远是"看你钉钉子还是打孔"。

LangChain 和 LangGraph 的关系,恰如这锤子与电钻。同为一家公司(LangChain Inc.)出品,同属一个生态,却解决截然不同的问题。然而社区里"LangChain vs LangGraph"的争论从未停歇,盖因两者的边界在演进中几经漂移,让人眼花。

本文欲正本清源:不拉踩,不站队,只求把两张面孔描清楚——它们各自的基因是什么,各自的疆界在哪里,何时该独当一面,何时又该联手上阵。


1. 缘起:从一条链到一张图

故事要从 2022 年讲起。

那年 10 月,Harrison Chase 开源了 LangChain。彼时大模型应用开发的痛点极其朴素:你得手动拼接 prompt、调用 API、解析输出、再喂给下一个 prompt——这些"胶水代码"重复且脆弱。LangChain 的答案是一套组件 + 链式编排:把 LLM、提示模板、向量存储、文档加载器这些积木标准化,再用 Chain 把它们串起来。

这个模式在 2023 年大获成功。LangChain 的 GitHub Star 数半年内从零飙到 8 万,成了 LLM 应用开发的事实标准。

但它内置了一个致命假设:数据沿链单向流动,有进无退,有去无回。

这假设在 RAG 管道、文本翻译、摘要生成这类"一次过"场景中完全成立。可一旦你开始构建 Agent——那种需要"搜一搜 → 想一想 → 不够再搜 → 够了再回答"的系统——线性链的局限性就暴露无遗。你要循环,它不给;你要回溯,它不干;你要在某个节点暂停等人工审批,它根本没这个概念。

2023 年秋,LangChain 团队意识到这个问题,基于 Google Pregel 的批量同步并行模型,开源了 LangGraph。这个新框架的核心理念极其简单:把 Agent 工作流建模为有向图,节点是计算函数,边是控制流,支持循环、分支和条件路由。

2025 年 10 月 22 日,两个库同时发布 v1.0 GA。分工从此明确:

    • LangChain → Agent 框架:提供模型、工具、提示的抽象与集成
    • LangGraph → 编排运行时:提供持久执行、流式传输、人机协同、断点恢复

自此,LangChain 的 create_agent 方法底层就在跑 LangGraph 的图引擎。它们从未被设计为竞争关系——可惜,这个事实不是所有人都知道。


2. 架构基因:DAG 对 StateGraph

欲明其异,先观其骨。

2.1 LangChain:管道的哲学

LangChain 的核心抽象是 Chain——一种将组件串联的声明式管道。其最新表达形式是 LCEL(LangChain Expression Language)

from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI

prompt = ChatPromptTemplate.from_template("将以下文本翻译成英文:{text}") model = ChatOpenAI() chain = prompt | model # 管道操作符 result = chain.invoke({"text": "你好,世界!"})

管道操作符 | 是 LCEL 的灵魂。它让组件组合像 Unix 管道一样直观——A 的输出自动成为 B 的输入。这很美,也很局限。

LCEL 的底层是一个 DAG(有向无环图) 执行模型。每个步骤有确定的后继,数据单向流动,不存在循环。它适合的场景极其精确:输入 → 处理1 → 处理2 → ... → 输出,一步接一步,从不回头。

2.2 LangGraph:状态机的哲学

LangGraph 的核心抽象是 StateGraph——以显式状态为中心的有向图,允许循环。它直接从 Google 的 Pregel 论文汲取灵感,采用批量同步并行(BSP)模型:

每个超步(superstep) = Plan → Execute → Update

与传统链式调用有三大根本区别:

其一,显式状态。 你用 TypedDict 定义全局状态 Schema,每个节点只读状态、只写部分更新:

from typing import Annotated, TypedDict
import operator

class AgentState(TypedDict): messages: Annotated[list, operator.add] # 追加而非覆盖 research_done: bool findings: list

Annotated[list, operator.add] 是个精巧设计——它告诉运行时:当多个节点同时写 messages 时,用加法合并(即追加),而非覆盖。你还可以定义自己的 reducer 函数来实现任意合并策略。

其二,显式控制流。 每个路由决策都是一个命名函数,而非隐藏在运行时内部的魔法:

def should_continue(state: AgentState):
    """是否继续搜索?这是一个你写的显式函数。"""
    if len(state["findings"]) >= 3:
        return "summarize"  # 够了,去总结
    return "search"          # 还不够,继续搜

其三,图即文档。 编译后的图可导出为 Mermaid 图表,也可在 LangSmith Studio 中可视化调试。你一眼就能看懂整个 Agent 的执行逻辑——这在代码审查和合规审计中价值连城。

2.3 一张表看透差异

维度 LangChain (LCEL) LangGraph (StateGraph)
图模型 DAG(无环) 有向图(可循环)
状态 隐式,运行时内部管理 显式 TypedDict,开发者定义
控制流 管道路由,自动化 条件边 + 命名函数,完全显式
循环 不支持 原生支持
并行 LCEL 的 RunnableParallel 图并行分支
中断/恢复 interrupt() + Command(resume=)
持久化 需自行实现 内置 SQLite/Postgres Checkpointer
流式输出 token 级流式 7 种流模式(values/updates/messages/custom/checkpoints/tasks/debug)

3. Agent 范式:隐式循环 vs 显式图

这才是两框架真正拉开差距的地方——Agent 的实现方式。

3.1 LangChain:一行搞定(但你不知道它做了什么)

LangChain v1.0 的 create_agent 用极少代码启动一个 Agent:

from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from langchain_community.tools import TavilySearchResults

agent = create_agent( ChatOpenAI(model="gpt-4o-mini"), [TavilySearchResults(max_results=3)], system_prompt="You are a helpful assistant." ) result = agent.invoke({"messages": [("user", "What is LangGraph?")]})

四行代码,Agent 就跑起来了。它会自动判断何时搜索、何时回答、如何循环。这适合80% 的常见场景

但代价是什么?你完全看不到决策过程。 工具调用的路由逻辑被封在运行时里,调试时只能看最终输出,无法检查 Agent 在第三步为什么选择了搜索而非回答。

3.2 LangGraph:二十行代码(但你对每个决策了如指掌)

同一个 Agent,用 LangGraph 原生写法:

from langgraph.graph import StateGraph, END
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode
from typing import TypedDict, Annotated

class AgentState(TypedDict): messages: Annotated[list, add_messages]

model = ChatOpenAI(model="gpt-4o-mini").bind_tools(tools) tool_node = ToolNode(tools)

def call_model(state: AgentState): return {"messages": [model.invoke(state["messages"])]}

def should_use_tool(state: AgentState): last_msg = state["messages"][-1] return "tools" if last_msg.tool_calls else END

graph = StateGraph(AgentState) graph.add_node("agent", call_model) graph.add_node("tools", tool_node) graph.set_entry_point("agent") graph.add_conditional_edges("agent", should_use_tool) graph.add_edge("tools", "agent") app = graph.compile()

代码量翻了五倍,但每行都在告诉你一件事:图在何时、基于什么条件、把控制权交给哪个节点。 should_use_tool 是你写的 Python 函数,里面可以加日志、埋点、任何你想要的逻辑。

深入一层:create_agent 的底层本身就是在一个 LangGraph StateGraph 上跑的——它不过是帮你写好了那二十行中的十五行,留给你五行定制空间。


4. 独门绝技:LangGraph 的三大杀器

若问 LangGraph 凭什么在 Agent 框架的混战中站稳脚跟,答案绕不开这三样。

4.1 Checkpointer:时间旅行与故障恢复

每个超步完成后,Checkpointer 自动保存完整状态快照到 SQLite 或 Postgres:

from langgraph.checkpoint.sqlite import SqliteSaver

checkpointer = SqliteSaver.from_conn_string("checkpoints.db") app = graph.compile(checkpointer=checkpointer)

# 如果执行崩溃了,用同一个 thread_id 恢复 config = {"configurable": {"thread_id": "user-123"}} app.invoke({"messages": [("user", "复杂任务...")]}, config) # 💥 崩溃了,没关系 app.invoke(None, config) # 从上一个检查点继续

这意味着长时间运行的 Agent 任务不再是噩梦。你的 Agent 可以跑几分钟、几小时、甚至跨会话——Checkpointer 保证状态不丢。

更妙的是时间旅行调试:你可以回放到第 N 步的状态,检查当时 Agent 在想什么、工具返回了什么、为什么做了那个决策。这不叫调试,这叫"拿着回放按钮看 Agent 的灵魂"。

4.2 Human-in-the-Loop:精确中断与人工审批

人和 Agent 协作的最高境界不是"人看 Agent 跑完再检查",而是"Agent 跑到关键点时主动停下来问人"。LangGraph 的 interrupt() 让这变得极其优雅:

def sensitive_action_node(state: AgentState):
    proposed = "发送批量邮件给 10000 个用户"
    # 🛑 在此暂停,等待人工审批
    approval = interrupt({"proposed_action": proposed})

if approval.get("approved"): send_emails() # 实际发送 return {"messages": [f"已发送: {proposed}"]} return {"messages": ["用户取消了操作"]}

人工审批者看到中断信息后:

# 审批通过,恢复执行
app.invoke(Command(resume={"approved": True}), config)

你可以把 interrupt() 放在图的任意节点,实现任意粒度的 HITL。CrewAI 和 AutoGen 做不到这种精确度——它们通常只能在整个任务完成后插入审查。

4.3 流式输出的七种武器

LangGraph 支持七种流模式,每种服务于不同的调试和交互需求:

模式 输出 适用场景
values 每个超步后的完整状态 终端展示最终结果
updates 每个节点的状态增量 渐进式 UI 更新
messages LLM token 流 打字机效果
custom 自定义流事件 业务逻辑埋点
checkpoints 检查点元数据 持久化监控
tasks 任务执行事件 调试和性能分析
debug 最详细的执行追踪 深度调试

这七种模式可以组合使用,比如同时用 messages 做打字机效果、updates 做进度条——你在构建生产级 Agent 时才会意识到这有多重要。


5. 多 Agent 竞技场:LangGraph vs CrewAI vs AutoGen

LangGraph 不是唯一的 Agent 编排框架。把它放进竞技场,和 CrewAI、AutoGen 同台对比,更能看清各自的基因。

5.1 三种哲学

LangGraph CrewAI AutoGen
隐喻 状态机——一切皆图 公司团队——一切皆角色 对话——一切皆消息
控制方式 显式图和条件边 角色 + 任务 + 流程模式 多轮对话 + 发言策略
状态 全局显式 TypedDict 任务间 context 传递 隐含在对话历史中
适合谁 追求精确控制的架构师 快速验证想法的产品经理 研究型迭代的科学家

CrewAI 的门槛最低——定义 Agent 的角色和背景故事,框架自动调度。AutoGen 则擅长需要代码执行和多轮对话优化的场景。LangGraph 的学习曲线最陡,但也赋予你最大的控制自由度。

5.2 能力雷达图

              可观测性
                  ▲
                  │ LangGraph ⭐⭐⭐⭐⭐
                  │
    状态持久化 ────┼──── 学习曲线(越低越好)
    LangGraph ✅   │      CrewAI ⭐⭐⭐⭐
    CrewAI   ⚠️    │      AutoGen ⭐⭐⭐
    AutoGen  ❌    │      LangGraph ⭐⭐
                  │
                  │
              部署灵活性 ←──→ Token 效率
                             LangGraph ⭐⭐⭐⭐⭐
                             CrewAI   ⭐⭐⭐⭐
                             AutoGen  ⭐⭐⭐

具体到数字:同一任务,LangGraph 每次循环约 2000 tokens,CrewAI 约 3500,AutoGen 因对话式驱动常达 8000。在高频 Agent 调用场景中,Token 效率直接转化为成本差异。

5.3 选型决策树

你的场景需要什么?
       │
 ┌─────┼──────┬──────────┐
 ▼     ▼      ▼          ▼
精确  角色化  代码执行   Microsoft
控制  协作   迭代优化   生态集成
 │     │      │          │
 ▼     ▼      ▼          ▼
Lang- CrewAI AutoGen  AutoGen/
Graph              MAF

关键更新:2025 年 10 月,Microsoft 将 AutoGen 与 Semantic Kernel 合并为 Microsoft Agent Framework(MAF)。AutoGen 不再作为独立库接收重大更新,但其对话驱动思想被 MAF 继承。


6. 迁移路线:从旧世界到新世界

如果你已有 LangChain 旧版(AgentExecutor)代码,官方推荐的演进路径很清晰:

Step 0: AgentExecutor(旧版,2025 年前)
   │  隐藏的 agent_scratchpad,调试如盲人摸象
   │
   ▼
Step 1: create_agent(LangChain v1.0,2025.10 起)
   │  4 行代码启动 Agent,底层跑 LangGraph
   │  适合 80% 的场景
   │
   ▼
Step 2: 自定义 StateGraph(需要完全控制时)
      显式节点、条件边、检查点、HITL
      适合复杂生产系统

判断标准极其简单:如果你的 Agent 需要——循环(重试 / "不够再搜")、分支(不同输入不同路径)、中断(人工审批)、持久化(跨会话恢复)——四项中任何一项,就该写自定义 StateGraph。一项都不需要,create_agent 足够。

6.1 增量迁移:2-4 周

不推倒重来,而是渐进式把旧 Chain 包装为 LangGraph 节点:

    • 识别现有代码中使用 while 循环或 if-elif 路由的变通方案
    • 定义 TypedDict 状态模式,捕获所有数据流
    • 将现有 Chain 包装为 LangGraph 节点函数
    • 用条件边替换手动路由逻辑
    • 接入 Checkpointer 以持久化状态

6.2 全量重写:4-8 周

适用于两种情况:代码库已被变通方案搞得难以维护,或正在从零构建新的多 Agent 系统。此时应直接从 StateGraph 起步,充分利用调试和可视化工具。


7. 实战选型矩阵

场景 LangChain LangGraph 推荐
RAG 管道(检索→增强→生成) 首选 不必要 LangChain
文本翻译 / 摘要 / 格式化 首选 过于复杂 LangChain
单轮 Q&A(问 → 工具调用 → 答) create_agent 即可 底层运行中 LangChain create_agent
快速原型 / PoC 更快 更慢 LangChain
多步研究 Agent(搜→评→再搜→整合) 不足 必需 LangGraph
条件分支(输入不同走不同路径) 不足 原生 LangGraph
工具调用失败重试 变通方案 原生循环 LangGraph
人工审批步骤(审核后继续) 不支持 interrupt() LangGraph
长时间运行 Agent(跨会话) 不支持 Checkpointer LangGraph
多 Agent 协作(Supervisor 模式) 部分支持 首选 LangGraph
生产级可观测性(节点追踪) LangSmith LangSmith Studio 两者结合
合规审计(每步可追溯) 不足 显式状态+检查点 LangGraph
与 LangChain 生态集成 天然 无缝 两者皆可

8. 2026 年的格局与趋势

8.1 框架不是问题,可靠性才是

LangChain 2026 年开发者调查显示:32% 的团队认为不可靠的性能是扩展 Agent AI 的最大障碍。框架选择排不进前四。 真正的问题是——Agent 能不能稳定产出正确结果,以及失败时能不能优雅恢复。

这正是 LangGraph 发力的方向:通过 Checkpointer 做故障恢复,通过 interrupt() 做人机协同,通过七种流模式做可观测性。框架之争正在退潮,可靠性之争才是主战场。

8.2 框架融合正在发生

三大框架的优秀设计理念正在互相渗透:

    • LangGraph 的精确控制 → CrewAI v2 引入了 Flows(类图结构)
    • CrewAI 的角色隐喻 → LangGraph 社区发展出基于角色的多 Agent 模式
    • AutoGen 的对话驱动 → LangGraph 通过 Send API 支持动态消息路由

框架选型越来越不是"三选一",而是在理解各框架基因的基础上、根据场景需求做组合。

8.3 最终建议

用 LangChain 的地方:一切线性任务。翻译、摘要、RAG 管道、单轮 Q&A。LCEL 管道的简洁性在这些场景中无可替代。

用 LangGraph 的地方:一切有循环、有分支、有中断、有多 Agent 的系统。研究型 Agent、客服流程、审批工作流、长时任务。

用两者结合的地方:绝大多数生产系统。LangChain 提供组件集成和 create_agent 快速启动,LangGraph 提供状态管理和编排控制。它们本就是同一个栈的两个层,协同使用才是设计者的初衷。


9. 结语

回到文章开头的比喻:锤子和电钻。

LangChain 是那把锤子——简单、直接、一锤定音。对于钉钉子的活(线性管道),它完美无缺。

LangGraph 是那把电钻——需要学习、需要接线、一键启动不够。但当你面对钢筋水泥(循环、分支、持久化、多 Agent),它才是你手里能打的工具。

真正成熟的工程师不会问"锤子和电钻哪个好",他们会把两样都放进工具箱,然后根据眼前的活,伸手去拿对的那把。

2026 年的 LLM 应用开发亦是如此。


写作时间:2026 年 7 月
主要参考:LangChain 官方文档、LangGraph 官方文档、Zilliz 技术博客、Atlan AI Agent Memory Guide、DigitalApplied 对比分析、掘金技术社区 Multi-Agent 框架横评
风格:深度技术对比

AI #LangChain #LangGraph #Agent #LLM #框架对比

生成时间: 2026-07-06 20:34:08 · 源文件: langgraph_vs_langchain.md · SHA256: 106bbd94c6ad

暂无表态
💬 讨论回复 (0)
推荐

🌟 智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

🎁 领取 2000万 Tokens