LangChain LangGraph 教程:编排框架介绍

介绍

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 节点):
    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 都能提供灵活、可靠、生产就绪的解决方案。


原文出处:/show_1GW3N4a3nZbu.html