LangChain LangGraph 教程:编排框架介绍 作者:马育民 • 2026-05-24 21:36 • 阅读:10000 # 介绍 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 模型定义的结构化数据,承载上下文、中间结果、会话信息。 - **核心字段(最佳实践)**: ```python 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 节点)**: ```python 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,多节点同时执行。 - **示例(条件边)**: ```python 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 都能提供灵活、可靠、生产就绪的解决方案。 原文出处:http://malaoshi.top/show_1GW3N4a3nZbu.html