介绍
LangGraph 是 LangChain 团队开发的低级有状态编排框架,核心是把 AI Agent/复杂 LLM 工作流建模为可循环、可分支、可持久化的有向图,解决传统线性链(LCEL)无法自然表达循环、状态管理弱、动态路由僵化的问题,是生产级智能体的核心基建。
1. 定位
- 不是 LLM 封装/提示词框架,专注Agent 编排与生命周期管理。
- 可独立使用,也无缝集成 LangChain 生态。
- 2024-01 首发,2025-10 达 1.0,月下载量约 9000 万,企业客户包括 Klarna、Uber、LinkedIn 等。
设计哲学
- 低级可控:不隐藏细节,开发者完全掌控节点、边、状态。
- 图即状态机:每个执行步(superstep)生成状态快照,支持“时间旅行”(回滚/重放)。
- 持久性优先:Checkpoint(状态持久化)是一等公民,非附加功能。
- 框架无关:不强绑定 LangChain,可对接任意 LLM SDK。
- 可组合性:图可嵌套为子图,支持复杂分层工作流。
核心优势
- ✅ 持久执行:故障自动恢复,从断点续跑。
- ✅ 人机协作:任意节点可暂停、查看/修改状态,人工介入。
- ✅ 全面记忆:短期工作记忆+长期会话记忆。
- ✅ 可视化调试:LangSmith 追踪路径、状态转换、运行指标。
- ✅ 生产就绪:原生支持长时间运行、高可用部署。
适用场景
- 多步骤复杂 Agent(如“思考→工具调用→观察→再思考”循环)。
- 对话系统/聊天机器人(需记忆上下文、多轮交互)。
- RAG 增强生成(检索→生成→评估→迭代)。
- 多智能体协作(分工、协商、结果汇总)。
- 需人工审核/干预的流程(审批、内容 moderation)。
- 长时间运行的自动化任务(数据处理、ETL、定时调度)。
四大核心组件
1. State(状态)—— 全局共享内存
- 定义:用 TypedDict 或 Pydantic 模型定义的结构化数据,承载上下文、中间结果、会话信息。
- 核心字段(最佳实践):
from typing import TypedDict, List, Dict, Any class AgentState(TypedDict): messages: List[Dict[str, Any]] # 对话历史(必填) current_step: str # 当前执行步骤 user_id: str # 用户标识 tool_result: Any # 工具返回结果 - 特点:所有节点只读/更新 State,状态唯一、全局共享、自动传递。
2. Node(节点)—— 执行单元
- 定义:纯函数,接收 State,处理后返回 State 更新(增量合并,非覆盖)。
- 常见类型:
- LLM 节点:调用大模型生成文本/决策(如
call_llm(state))。 - Tool 节点:执行外部工具(搜索、API、计算、数据库)。
- Human 节点:暂停等待人工输入/确认。
- 条件节点:纯逻辑判断(如“是否需要继续循环”)。
- 子图节点:嵌套执行另一个 LangGraph(模块化复用)。
- LLM 节点:调用大模型生成文本/决策(如
- 示例(LLM 节点):
def call_llm(state: AgentState) -> AgentState: messages = state["messages"] response = llm.invoke(messages) # 调用 LLM return {"messages": messages + [response]} # 增量更新
Edge(边)—— 流程控制
- 定义:定义节点间的流向、触发条件、分支逻辑,支持普通边、条件边、循环边。
- 类型:
- 普通边:A→B,固定流转。
- 条件边:根据 State 动态选择下一个节点(如“工具结果是否为空?”)。
- 循环边:B→A,实现迭代(如“思考→工具→再思考”)。
- 并行边:A→B、A→C,多节点同时执行。
- 示例(条件边):
def should_continue(state: AgentState) -> str: # 根据消息数判断是否结束 if len(state["messages"]) > 5: return "end" return "continue"
Graph(图)—— 工作流容器
- 定义:组装节点和边,编译为可执行的运行时,负责调度、状态管理、持久化。
- 执行流程:START → 节点1 → 边1 → 节点2 → 边2 → … → END。
- 核心能力:
- 编译(Compile):校验图结构,生成执行计划。
- 调用(Invoke/Stream):同步/异步执行,支持流式返回(逐字输出)。
- 持久化(Checkpoint):自动保存每步状态,支持恢复/回滚。
- 可视化(Draw):生成 Mermaid/PNG 图,直观展示流程。
机制
1. 状态管理(State & Checkpoint)
- 状态不可变:节点返回增量更新,不直接修改原 State,避免副作用。
- 自动合并:多节点更新同一字段时,自动合并(如 messages 追加)。
- Checkpoint 持久化:
- 每执行完一个节点,自动保存 State 快照。
- 支持内存(默认)、文件、Redis、数据库等存储后端。
- 故障时从最近快照恢复, Exactly-Once 语义。
- 时间旅行:可回滚到任意历史快照,重放执行流程,便于调试。
2. 流程控制(分支、循环、并行)
条件分支:通过条件边动态路由,例如:
START → LLM → 判断(需工具?)→ 是→Tool,否→END循环执行:通过循环边实现迭代,例如 Agent 核心循环:
LLM(思考)→ Tool(调用)→ LLM(观察结果)→ 循环- 并行执行:同一节点后触发多个节点并行运行,结果合并后继续。
3. 人机协作(Human-in-the-Loop)
- Human 节点:执行到该节点时自动暂停,等待人工输入。
- 状态干预:人工可查看当前 State、修改内容、添加指令。
- 恢复执行:人工确认后,从修改后的 State 继续运行。
- 典型场景:内容审核、审批流程、复杂决策人工兜底。
4. 调试与可观测性(LangSmith)
- 全链路追踪:记录每个节点的输入/输出、状态变化、执行耗时。
- 可视化执行图:直观展示执行路径、分支选择、循环次数。
- 状态对比:对比不同步骤的 State 差异,定位问题。
- 性能分析:识别慢节点、瓶颈工具调用,优化流程。
与 LangChain LCEL 对比
| 特性 | LangGraph | LangChain LCEL |
|---|---|---|
| 流程模型 | 有向图(支持循环/分支) | 线性链(单向、无循环) |
| 状态管理 | 原生全局状态、持久化、时间旅行 | 无内置状态,需手动传递/存储 |
| 动态路由 | 条件边、循环边、并行边 | 仅固定顺序,无原生分支 |
| 人机协作 | 原生 Human 节点、暂停/干预 | 需自定义工具实现,复杂 |
| 适用场景 | 复杂 Agent、多轮对话、RAG 迭代 | 简单单轮任务、线性管道 |
| 生产就绪 | 持久化、容错、可视化调试 | 轻量便捷,复杂场景需额外开发 |
高级特性
1. 子图(Subgraph)
- 图可嵌套为子图,模块化复用复杂流程(如将“工具调用循环”封装为子图)。
- 子图有独立状态,也可共享父图状态。
2. 流式执行(Stream)
- 支持
stream()方法,逐节点/逐字返回结果,适合实时对话场景。
3. 多智能体协作
- 多个 Agent 作为节点,分工协作(如“研究员→分析师→总结员”)。
- 支持 Agent 间消息传递、状态共享、结果汇总。
4. 自定义 Checkpoint 存储
- 可对接 Redis、PostgreSQL、MongoDB 等,实现分布式持久化。
- 支持自定义序列化/反序列化逻辑。
总结
LangGraph 是复杂 LLM 应用的“操作系统”,用图模型解决线性链的局限性,以状态管理、持久化、人机协作、可视化调试四大核心能力,成为企业级 Agent 的首选框架。无论是对话机器人、RAG 系统还是多智能体协作,LangGraph 都能提供灵活、可靠、生产就绪的解决方案。