LangChain 与 LangGraph

LangChain 是目前生态最广泛的开源 Agent 开发框架,从 2022 年底发布以来经历了多次架构演进。LangGraph 作为 LangChain 生态中的状态图编排引擎,解决了早期 LangChain Agent 在执行流程可控性上的核心痛点。理解两者的关系与分工,是掌握 LangChain 生态的关键。
LangChain 核心概念
LangChain 的设计围绕几个基础抽象展开:
- ChatModel:与大模型的交互接口,支持 OpenAI、Anthropic、Google 等多家提供商,通过统一接口屏蔽模型差异。
- Tool:Agent 可调用的外部能力单元,每个 Tool 有名称、描述和执行函数,模型根据描述决定何时调用哪个 Tool。
- Agent:将 ChatModel 与 Tool 绑定在一起的核心执行单元,负责接收用户输入、决策调用哪些工具、处理工具返回结果、决定是否继续推理或输出最终回答。
- Memory:对话历史与上下文管理机制,短期记忆保存当前会话,长期记忆支持跨会话的信息检索与积累。
- Chain:将多个组件串联为可复用流水线的抽象,是 LangChain 最早的核心概念,在 Agent 模式下退居底层支撑角色。
LangChain 早期通过 AgentExecutor 驱动 Agent 循环:模型推理 → 选择工具 → 执行工具 → 返回结果 → 再次推理,直到模型判断无需继续调用工具。这种循环模式简单直观,但缺乏对执行路径的显式控制——一旦进入循环,开发者很难在特定节点插入自定义逻辑、实现条件分支或处理循环中的异常状态。
LangGraph 状态图驱动
LangGraph 正是为了解决上述痛点而生。它将 Agent 的执行流程建模为状态图(State Graph):
- State:一个 TypedDict 定义的结构化状态对象,在图的执行过程中持续更新,所有节点共享同一份状态。
- Node:图中的处理节点,每个节点是一个接收 State、返回 State 更新的函数。节点之间通过状态传递数据,而非直接调用。
- Edge:定义节点之间的转移关系,包括固定边和条件边。条件边根据当前状态动态决定下一个节点,是实现分支逻辑的核心机制。
- Checkpoint:状态快照机制,在每一步执行后保存当前 State,支持执行中断后的恢复、时间旅行调试以及人类反馈的插入。
一个典型的 LangGraph Agent 包含以下节点:agent_node(模型推理)、tool_node(工具执行),以及从 agent_node 到 tool_node 或直接到结束的条件边。开发者可以在此基础上自由插入自定义节点——例如在工具执行前增加权限校验节点,在模型推理后增加输出格式化节点,甚至实现多 Agent 之间的状态传递与协作。
Agent 构建流程
使用 LangGraph 构建 Agent 的典型步骤:
- 定义 State 结构:明确 Agent 需要跟踪哪些信息,通常包括消息列表、下一步决策、工具调用记录等。
- 创建节点函数:为每个处理步骤编写节点函数,函数签名统一为
State -> Partial[State]。 - 构建状态图:将节点添加到图中,用
add_edge定义固定转移,用add_conditional_edges定义条件分支。 - 编译图:调用
graph.compile()生成可执行的 CompiledGraph,可选配置 Checkpoint 孏式。 - 执行与交互:通过
graph.invoke()或graph.stream()驱动执行,支持流式输出中间步骤。
适用场景
- 需要精细流程控制的 Agent:当 Agent 的执行路径不是简单的线性循环,而是包含分支、回退、人工干预等复杂逻辑时,LangGraph 的状态图是目前最成熟的解决方案。
- 多步骤复杂任务:研究分析、文档处理、代码生成等需要多轮推理与工具协作的任务。
- 需要可观测性与调试的场景:Checkpoint 和时间旅行调试让复杂 Agent 的行为可追溯、可回放。
- 生产环境要求:LangGraph 的中断恢复、状态持久化、并发控制等特性更适合生产部署。
相比之下,如果只需要简单的工具调用循环,LangChain 的 AgentExecutor 或官方 SDK 可能更轻量直接。LangGraph 的学习曲线较高,但付出的成本在复杂场景下会带来显著的架构优势。
本章小结
| 维度 | LangChain | LangGraph |
|---|---|---|
| 核心抽象 | Chain、Agent、Tool、Memory | State、Node、Edge、Checkpoint |
| 流程控制 | 循环执行(AgentExecutor) | 状态图编排(可分支、可中断) |
| 适用场景 | 简单工具调用、快速原型 | 复杂多步任务、生产部署 |
| 学习曲线 | 低 | 较高 |
选型建议:简单 Agent 用 LangChain 的 AgentExecutor;需要精细流程控制、人工介入、多 Agent 协作时用 LangGraph。
📖 延伸阅读
- LangChain 官方文档 —— 核心概念与快速入门
- LangGraph 官方文档 —— 状态图编排详解
- LangChain Expression Language (LCEL) —— 链式表达式语法
- LangGraph Checkpoint 机制 —— 状态持久化与恢复
