第33章 学习路径与资源
33.1 学习路径
LangGraph 的学习可分为三个阶段,各阶段目标明确、依赖递进。
入门阶段(1–2 周):该阶段目标是建立对图编排的基本直觉并能运行最小示例。所需预备知识包括 Python 异步编程基础(async/await、asyncio 事件循环的基本概念)与 LangChain 三大基础抽象——ChatModel(聊天模型)、Tool(工具)与 Prompt(提示词模板)。学习内容包括:安装 LangGraph 并运行最小 StateGraph 示例;理解 State(状态)、Node(节点)、Edge(边)三个核心概念的关系;掌握 add_node、add_edge、add_conditional_edges、set_entry_point、compile 等基础 API;理解通道(Channel)与 reducer 的基本作用;完成一个单节点加一个条件边的简单 LLM 工作流(如笑话生成器、简单问答机器人)。阶段产出:能独立编写包含 3–5 个节点、含一次条件分支的图,并通过 invoke 执行。
进阶阶段(2–4 周):该阶段目标是掌握 LangGraph 的核心执行模型与生产可用能力。学习内容包括:Pregel 计算模型——超步(Superstep)、屏障同步(Barrier Synchronization)、扇出扇入(Fan-out/Fan-in);Channel 类型与 reducer 语义(LastValue、BinaryOperatorAggregate、Topic、add_messages);Checkpointer 与 Store 的区别与配置(MemorySaver、PostgresSaver、BaseStore);流式输出(stream_mode 的 values/updates/messages 等模式与 v2 事件格式);HITL(interrupt()、Command(resume=...));子图(Subgraph)编译与嵌套;并行执行与 Send 机制;错误处理(RetryPolicy、节点级异常捕获)。阶段产出:完成一个包含持久化、流式输出与至少一次人工中断的完整实战项目(如带审核的文档处理流程、多步骤研究 Agent)。
生产阶段(2–4 周):该阶段目标是具备将 LangGraph 应用部署到生产环境的工程能力。学习内容包括:四种多智能体模式(Supervisor、Router、Handoffs、Swarm)的实现与选型;MCP 集成与工具生态扩展;LangSmith 评估(Evaluation)——数据集构建、评估器编写、线上 trace 对比;部署方案(LangGraph CLI 构建、自托管 FastAPI 封装、Docker 镜像化);性能优化(并发控制、批处理、连接池配置);监控告警(通过 LangSmith 与 OTel 集成观测延迟、错误率、token 消耗);安全治理(Guardrails、PII 脱敏、Prompt Injection 防护)。阶段产出:将一个多智能体应用部署到测试或预生产环境,并配置基本的可观测性与评估流水线。
33.2 官方与中文资源
官方资源
- LangGraph 官方文档(https://langchain-ai.github.io/langgraph/):涵盖概念指南、API Reference、教程与多智能体模式示例,是权威的第一手资料。
- LangGraph GitHub 仓库(https://github.com/langchain-ai/langgraph):包含源码、Issue 跟踪与 examples 目录下的官方示例。examples 目录覆盖从最小用例到多智能体、持久化、流式等典型场景。
- LangGraph.js 仓库(https://github.com/langchain-ai/langgraphjs):LangGraph 的 JavaScript/TypeScript 版本,API 设计与 Python 版本保持一致,适用于 Node.js 与前端场景。
- LangSmith 文档(https://docs.smith.langchain.com/):涵盖 Tracing、Evaluation、Prompt Hub 与监控能力的使用指南。
- LangGraph Platform 文档(https://langchain-ai.github.io/langgraph/concepts/langgraph_platform/):介绍 LangGraph Server、CLI 与 Cloud 部署方案。
- LangChain Academy(https://academy.langchain.com/):官方课程平台,提供从 LangChain 基础到 LangGraph 进阶的结构化课程。
中文资源
- LangGraph 中文文档与社区中文站(如 https://langgraphtutorial.cn 等社区维护站点):提供核心概念与 API 的中文翻译,但更新可能滞后于官方文档,遇到行为差异时应以官方英文文档为准。
- 技术博客渠道:国内技术社区(如 InfoQ 中文站、CSDN、稀土掘金、知乎技术专栏)中关于 LangGraph 实战、多智能体架构与 Agent 工程化的文章。阅读时注意甄别文章对应的 LangGraph 版本,0.1/0.2 版本的部分 API 已在 1.x 中变更。
- 开源中文教程仓库:GitHub 上以 LangGraph 为主题的中文教程与示例仓库,通常提供可直接运行的 Jupyter Notebook 与项目脚手架。
33.3 英文资源、进阶阅读与社区
英文资源
- LangChain Blog(https://blog.langchain.com/):发布 LangChain 与 LangGraph 的版本更新、新特性解析与工程实践文章,是跟进框架演进的主要渠道。
- LangChain GitHub Discussions(https://github.com/langchain-ai/langgraph/discussions):官方社区讨论区,可搜索到大量常见问题、设计决策解释与社区贡献的模式示例。
- YouTube LangChain 频道:包含新特性演示、多智能体模式直播讲解与会议分享视频。
- DeepLearning.AI 短课程:Andrew Ng 团队与 LangChain 合作推出的短期课程,涵盖 LangChain、LangGraph 与 Agent 设计模式,单门课程时长通常在 1–2 小时。
推荐书籍与进阶阅读
- 《Building LLM Apps》:介绍 LangChain 生态下构建 LLM 应用的方法,覆盖 RAG、Agent 与工作流编排等主题,适合作为生态全景入门读物。
- 《Designing Machine Learning Systems》(Chip Huyen 著):从工程视角系统讲解 ML 系统设计,涵盖数据管理、评估、部署、监控等话题,其工程方法论同样适用于 LLM 应用的生产化。
- Pregel 原始论文:Grzegorz Malewicz 等人于 2010 年发表的"Pregel: A System for Large-Scale Graph Processing"(SIGMOD 2010)。理解该论文提出的以顶点为中心、超步同步的图计算模型,有助于深入理解 LangGraph 底层执行引擎的设计逻辑。
- ReAct 论文:Shunyu Yao 等人于 2022 年发表的"ReAct: Synergizing Reasoning and Acting in Language Models"(ICLR 2023)。该论文提出的推理-行动交替范式是 ToolNode 与 create_react_agent 等预构建组件的理论基础。
- Anthropic 工程实践博客系列:Anthropic 官方博客中关于构建 Agent 的工程实践文章,涵盖工具设计、上下文管理、多 Agent 协作与安全评估等主题,提供了独立于具体框架的工程经验。
实践建议与社区
实践方面,建议从功能边界清晰的小项目起步(如客服工单分类、文档摘要流水线),避免初期直接构建覆盖过多能力的复杂 Agent;阅读 LangGraph 源码有助于形成对框架行为的准确理解,核心文件集中在 pregel/(执行引擎)、graph/state.py(状态与通道)、checkpoint/(检查点持久化)等目录;在掌握使用方法后,可通过参与开源 Issue 解答与 PR 提交深化理解;在项目中逐步沉淀自己的 Agent 工具库与模式模板,比每次从零构建效率更高。
社区方面,LangChain GitHub Discussions 是最直接的官方问答渠道;Python Discord 的 LangChain 频道提供实时交流;LangChain 中文社区(包括微信群、Discord 中文频道与线下聚会)是中文使用者交流经验与招聘信息的场所。框架演进较快,建议订阅 LangChain Blog 与 GitHub Release 通知,及时关注新版本的 API 变更与特性发布。
附录A API 速查表
A.1 langgraph.graph 与 langgraph.types
langgraph.graph
| 模块/对象 | 方法/属性 | 作用 | 关键参数 |
|---|---|---|---|
| StateGraph | __init__ | 初始化状态图 | state_schema: State 类型定义(TypedDict 或 Pydantic Model);config_schema: 配置类型 |
| StateGraph | add_node | 添加节点 | node: 节点函数或 Runnable;name: 节点名称(默认使用函数名) |
| StateGraph | add_edge | 添加固定边 | start_key: 起始节点名或 START;end_key: 目标节点名或 END |
| StateGraph | add_conditional_edges | 添加条件边 | source: 源节点;path: 路由函数(返回节点名、节点名列表或 Command);path_map: 可选名称映射 |
| StateGraph | set_entry_point | 设置入口节点 | key: 入口节点名 |
| StateGraph | set_finish_point | 设置结束节点 | key: 结束节点名 |
| StateGraph | compile | 编译图为可执行 CompiledGraph | checkpointer: Checkpointer 实例;store: BaseStore 实例;interrupt_before/interrupt_after: 节点名列表;name: 图名称(子图用) |
| START | 常量 | 图入口标记 | 作为 add_edge 的 start_key 使用 |
| END | 常量 | 图出口标记 | 作为 add_edge 的 end_key 使用 |
| Send | __init__ | 扇出到指定节点的发送指令 | node: 目标节点名;arg: 传入该节点的状态参数 |
| Command | __init__ | 统一的路由、更新与恢复指令 | goto: 目标节点名/列表/Send 列表;update: 状态更新字典;resume: interrupt 恢复值 |
| MessagesState | 预定义 State | 预置 messages: Annotated[list, add_messages] 的 State 基类 | 直接继承使用 |
| add_messages | reducer 函数 | messages 通道的默认合并 reducer,支持追加、按 id 覆盖、删除 | left, right: 消息列表 |
langgraph.types
| 模块/对象 | 方法/属性 | 作用 | 关键参数 |
|---|---|---|---|
| interrupt | 函数 | 在节点内触发中断,等待 resume 值返回 | value: 中断时向外暴露的数据 |
| Command | 类 | 统一路由/更新/resume 的返回对象 | goto, update, resume |
| Send | 类 | 并行扇出发送指令 | node, arg |
| RetryPolicy | 类 | 节点级重试策略配置 | max_attempts: 最大重试次数;initial_interval: 初始退避间隔;backoff_factor: 退避指数;jitter: 是否加随机抖动;retry_on: 指定可重试的异常类型 |
| StreamWriter | 类 | 自定义流式写入器,支持在节点内推送自定义流事件 | 通过 get_stream_writer() 获取实例;write(data) 写入事件 |
A.2 持久化与预构建模块
langgraph.checkpoint.memory
| 模块/对象 | 方法/属性 | 作用 | 关键参数 |
|---|---|---|---|
| MemorySaver(InMemorySaver) | 类 | 内存级 Checkpointer,进程退出后数据丢失 | 无必填参数;适用于开发与测试 |
langgraph.checkpoint.postgres
| 模块/对象 | 方法/属性 | 作用 | 关键参数 |
|---|---|---|---|
| PostgresSaver | 类 | 同步 PostgreSQL Checkpointer | conn: 数据库连接 URI 或 psycopg Connection |
| PostgresSaver | setup | 初始化数据库表 | 无参数;首次使用前必须调用 |
| AsyncPostgresSaver | 类 | 异步 PostgreSQL Checkpointer | conn: 异步数据库连接 URI 或 AsyncConnection |
| AsyncPostgresSaver | setup | 异步初始化数据库表 | 无参数 |
| PostgresStore | 类 | PostgreSQL 实现的 BaseStore | conn: 数据库连接 |
langgraph.checkpoint.sqlite
| 模块/对象 | 方法/属性 | 作用 | 关键参数 |
|---|---|---|---|
| SqliteSaver | from_conn_string | 从连接字符串创建 SqliteSaver | conn_string: SQLite 文件路径或 :memory: |
| SqliteSaver | setup | 初始化表结构 | 无参数 |
langgraph.prebuilt
| 模块/对象 | 方法/属性 | 作用 | 关键参数 |
|---|---|---|---|
| ToolNode | 类 | 自动执行 AIMessage.tool_calls 中工具并返回 ToolMessage 的节点 | tools: 工具列表;handle_tool_errors: 是否将工具异常转为 ToolMessage(默认 True) |
| tools_condition | 函数 | 预定义条件函数:存在 tool_calls 则路由到 tools 节点,否则路由到 END | 作为 add_conditional_edges 的 path 参数 |
| create_react_agent | 函数(deprecated) | 创建 ReAct 风格 Agent 执行器(1.x 标记弃用,建议迁移到 langchain.agents.create_agent) | model, tools, prompt, checkpointer 等 |
| ValidationNode | 类 | 对结构化输出进行校验的预构建节点 | schema: 校验 schema |
A.3 配置、存储与执行方法
langgraph.config
| 模块/对象 | 方法/属性 | 作用 | 关键参数 |
|---|---|---|---|
| get_config | 函数 | 在节点内获取当前 RunnableConfig | 无参数 |
| get_store | 函数 | 在节点内获取 BaseStore 实例 | 无参数 |
| get_stream_writer | 函数 | 在节点内获取 StreamWriter 实例,用于写入自定义流事件 | 无参数;返回 StreamWriter 实例,调用 .write(data) 推送事件 |
| RunnableConfig | 类型 | 配置类型定义 | configurable: 自定义配置字典(含 thread_id 等);recursion_limit: 递归上限;tags, metadata, run_name, callbacks |
langgraph.store.base.BaseStore
| 方法 | 作用 | 关键参数 |
|---|---|---|
| put | 写入键值对 | namespace: 命名空间元组;key: 键;value: 值字典 |
| get | 获取单条记录 | namespace, key |
| search | 按条件搜索记录(支持语义搜索需子类实现) | namespace, query, filter, limit, offset |
| delete | 删除记录 | namespace, key |
执行方法(CompiledGraph)
| 方法 | 作用 | 关键参数 | 返回值 |
|---|---|---|---|
| invoke | 同步执行图 | input: 初始状态输入;config: RunnableConfig;stream_mode;interrupt_before/after | 最终状态字典 |
| ainvoke | 异步执行图 | 同 invoke | 最终状态字典(协程) |
| stream | 同步流式执行 | input, config, stream_mode(默认 "values");version("v1"/"v2");subgraphs(是否展开子图) | 事件迭代器 |
| astream | 异步流式执行 | 同 stream | 异步事件迭代器 |
| batch | 同步批量执行 | inputs: 输入列表;config;max_concurrency | 结果列表 |
| abatch | 异步批量执行 | 同 batch | 结果列表(协程) |
| stream_events | 同步流式事件(v2 详细事件) | input, config;version;subgraphs | 事件迭代器 |
| astream_events | 异步流式事件 | 同 stream_events | 异步事件迭代器 |
常见配置项
| 配置项 | 位置 | 作用 |
|---|---|---|
| configurable.thread_id | config.configurable | 检查点线程标识,决定状态持久化与恢复的隔离维度 |
| recursion_limit | config | 单图执行的最大超步数,默认 25 |
| tags | config | trace 标签列表,用于 LangSmith 过滤 |
| metadata | config | trace 元数据字典 |
| run_name | config | 单次运行名称 |
| callbacks | config | 回调处理器列表 |
stream_mode 取值
| 值 | 作用 |
|---|---|
| values | 每个超步后推送完整 State 快照 |
| updates | 推送每个节点的增量状态更新 |
| messages | 推送 LLM token 级流式输出 |
| custom | 推送 StreamWriter.write() 写入的自定义事件 |
| checkpoints | 推送 checkpoint 保存事件 |
| tasks | 推送任务(并行分支)状态事件 |
| debug | 推送调试详细事件(含节点开始/结束等) |
附录B 术语表
术语按中文拼音顺序排列。
BSP(Bulk Synchronous Parallel,整体同步并行):一种并行计算模型,将计算分为若干超步,每个超步结束时进行全局屏障同步,是 Pregel 模型的理论基础。
Barrier(屏障):BSP/Pregel 模型中超步结束时的同步点,所有并行任务到达屏障后才进入下一个超步。
Channel(通道):State 中单个字段的底层抽象,负责定义该字段的写入合并语义(通过 reducer),类似 Pregel 中的顶点间通信通道。
Checkpoint(检查点):图执行到某个超步时的状态快照,包含各通道值、待发送任务与执行元数据,用于中断恢复与状态持久化。
Checkpointer(检查点器):负责 checkpoint 持久化与加载的组件,常见实现包括 MemorySaver、PostgresSaver、SqliteSaver。
Circuit Breaker(熔断器):一种容错模式,当下游服务连续失败达到阈值时自动"断开"调用,快速返回错误以避免级联故障。
Command 路由:通过在节点中返回 Command 对象指定下一执行节点、状态更新或 resume 值的路由机制,是 1.x 统一的流程控制方式。
DSL(Domain-Specific Language,领域特定语言):为特定领域设计的专用语言。LangGraph 的 StateGraph API 可视为图编排领域的内部 DSL(嵌入 Python)。
Embedding(嵌入向量):将文本等离散数据映射为连续低维稠密向量的表示方法,用于语义搜索与相似度计算。
Evaluation(评估):对 LLM 应用输出质量、准确性、安全性的系统化度量流程,通常通过数据集、评估器与人工标注结合完成。
Fallback(降级):主路径失败时启用备用方案的容错策略,如主模型不可用时切换到备用模型或返回缓存结果。
Fan-out/Fan-in(扇出/扇入):并行模式。Fan-out 将任务分发到多个并行节点;Fan-in 将多个并行节点的结果通过 reducer 合并回状态。
Function Calling(函数调用):LLM 根据用户意图生成结构化函数调用参数的能力,是 Tool Calling 的早期命名。
GraphInterrupt:interrupt() 触发中断时抛出(或返回)的特殊信号类型,携带中断值并挂起图执行。
GraphRecursionError:图执行超过 recursion_limit 时抛出的异常,通常表示存在死循环或合法流程超过步数上限。
Guardrails(护栏):对 LLM 输入/输出施加的安全约束与规则,用于过滤有害内容、约束输出格式、防止越权操作。
HITL(Human-in-the-Loop,人在回路):在自动化流程中嵌入人工审批、确认或输入环节的模式,LangGraph 通过 interrupt()/resume 实现。
Idempotency(幂等性):操作重复执行多次与执行一次产生相同效果的性质。节点中的副作用操作(如发邮件、写数据库)应设计为幂等以应对重试与恢复。
LangChain:LLM 应用开发框架,提供 ChatModel、Tool、Prompt、Runnable 等基础抽象,是 LangGraph 的上层生态。
LangGraph CLI:LangGraph 官方命令行工具,支持本地开发服务启动(langgraph dev)、部署构建(langgraph build)与上传(langgraph up)。
LangGraph Platform/Server:LangGraph 的部署平台与服务端组件,提供标准化的 REST API、流式端点、线程状态管理与认证。
LangSmith:LangChain 生态的可观测性与评估平台,提供 Tracing、Evaluation、Prompt Hub、监控等能力。
LLM(Large Language Model,大语言模型):基于大规模语料训练的 Transformer 架构语言模型,具备文本生成、理解与推理能力。
Map-Reduce:一种分布式编程模型,将任务分为 Map(映射/分发)与 Reduce(归约/合并)两阶段,与 Fan-out/Fan-in 概念对应。
MCP(Model Context Protocol,模型上下文协议):由 Anthropic 提出的开放协议,标准化 LLM 与外部工具、数据源的交互方式。
Namespace(命名空间):在 Store 中用于组织键的层级路径;在图执行中用于区分子图事件来源(ns 字段)。
Namespace Prefix(命名空间前缀):子图节点名在父图中使用的路径前缀,以图名与分隔符构成,避免节点名冲突。
Node(节点):图中的执行单元,通常为一个接受 State、返回状态更新的 Python 函数或 Runnable。
OTel(OpenTelemetry):云原生计算基金会(CNCF)的可观测性标准框架,定义了 Tracing、Metrics、Logs 的统一采集与传输规范。
PII(Personally Identifiable Information,个人身份信息):可用于识别特定个人的信息(如姓名、身份证号、电话、邮箱),在 LLM 应用中需做脱敏处理。
Pregel:Google 提出的大规模图处理计算模型,以顶点为中心、超步同步、消息传递为核心思想,是 LangGraph 执行引擎的底层模型。
Prompt(提示词):输入给 LLM 的文本指令,包含系统提示、用户输入与上下文。
Prompt Injection(提示词注入):攻击者通过构造恶意输入覆盖或绕过系统提示约束的安全攻击方式。
RAG(Retrieval-Augmented Generation,检索增强生成):在生成前从外部知识库检索相关文档注入上下文的模式,用于减少幻觉并提供事实依据。
ReAct:一种将推理(Reasoning)与行动(Acting)交替进行的 Agent 范式,模型先思考、再调用工具、观察结果,循环直至完成任务。
Reducer(归约器):定义通道如何将多个写入值合并为单一状态值的函数,常见类型包括 LastValue、BinaryOperatorAggregate、add_messages 等。
BinaryOperatorAggregate:使用二元操作符(如加法、列表拼接)对新值与旧值进行合并的 Reducer。
LastValue:默认 Reducer,新值直接覆盖旧值。
Topic:一种发布-订阅风格的通道 Reducer,支持向消费者推送值而不持久化累积。
Resume(恢复):在 interrupt() 挂起后,通过传入恢复值继续图执行的操作,通过 Command(resume=...) 实现。
RetryPolicy(重试策略):节点级配置,定义节点执行失败时的重试次数、退避间隔与抖动参数。
Runnable:LangChain 核心执行抽象,所有可调用组件(模型、链、工具、编译后的图)均实现 Runnable 接口,统一支持 invoke/stream/batch 等方法。
Semantic Search(语义搜索):基于向量相似度而非关键词匹配的搜索方式,通过 Embedding 向量计算查询与文档的语义相关性。
Send:LangGraph 中用于动态扇出并行任务的指令对象,指定目标节点与传入参数。
SSE(Server-Sent Events,服务器发送事件):HTTP 协议下服务器向客户端单向推送事件的标准,LangGraph 流式端点常采用该协议。
State(状态):图执行过程中在节点间传递的共享数据结构,以 TypedDict 或 Pydantic Model 定义,由多个 Channel 组成。
Stream(流):在图执行过程中实时输出中间结果或 token 的机制,支持多种 stream_mode。
Structured Output(结构化输出):LLM 按照预定义 Schema(如 JSON Schema)输出结构化数据的能力,通常通过 with_structured_output 或 function calling 实现。
Subgraph(子图):作为节点嵌套在父图中的编译后图,拥有独立的 State 与命名空间,可实现模块化复用。
Superstep(超步):Pregel/BSP 模型中的一次计算-通信-同步周期。每个超步内节点并行执行,结束时通过屏障同步。
Supervisor(监督者):多智能体模式之一,由一个中心 Supervisor Agent 根据任务状态决定调度哪个 Worker Agent 执行或终止流程。
Store(存储):跨线程、长期持久化的键值存储接口(BaseStore),与 Checkpointer 的线程内短期状态不同,Store 适合存储用户画像、知识库索引等长期数据。
Swarm(蜂群):多智能体模式之一,Agent 之间通过 Handoff 自由交接,无固定中心调度者。
Tool(工具):LLM 可调用的外部函数或服务,执行确定性计算、API 调用、数据查询等操作,并将结果返回给 LLM。
Tool Calling(工具调用):LLM 输出结构化的工具名称与参数,由执行层调用对应工具并将结果回传模型的能力,是 Function Calling 的正式命名。
ToolNode:LangGraph 预构建节点,自动解析 AIMessage 中的 tool_calls、执行对应工具并生成 ToolMessage。
Token(词元):LLM 处理文本的基本单位,可以是字、子词或词。模型的上下文窗口与计费通常以 token 为单位。
TTFT(Time To First Token,首 token 时间):从发送请求到收到第一个流式 token 的时间,是衡量流式交互体验的核心指标。
Trace(追踪):一次 LLM 应用执行的完整调用链路记录,包含各节点输入输出、延迟、token 消耗与错误信息。
Tracing(链路追踪):采集、记录与展示 Trace 的过程,通常通过 LangSmith 或 OTel 兼容后端实现。
Vector Store(向量数据库/向量存储):专门存储与检索 Embedding 向量的数据库,支持近似最近邻(ANN)搜索,是 RAG 的基础组件。
interrupt(中断):LangGraph 1.x 原语,在节点内调用以挂起图执行并向外部暴露中断值,等待 resume 传入恢复数据后继续执行。
messages(消息列表):LangGraph 中最常用的 State 通道类型,存储对话消息序列(HumanMessage、AIMessage、ToolMessage 等),通过 add_messages reducer 管理合并。
add_messages:messages 通道的预定义 Reducer,支持按消息 id 追加、覆盖与删除,确保消息列表的正确合并。
附录C 代码示例索引
以下按章节顺序列出手册中出现的主要代码示例。
| 编号 | 名称 | 所在章节 | 功能说明 |
|---|---|---|---|
| 2-1 | 最小笑话生成器 | §2.4 | 展示 StateGraph 最基本的节点、边与 invoke 调用 |
| 2-2 | 双节点顺序执行 | §2.5 | 演示 add_edge 串联两个节点的线性流程 |
| 3-1 | 双节点并行执行过程(伪代码) | §3.4 | 展示 Pregel 超步并行执行的概念性流程 |
| 3-2 | Send 扇出示例 | §3.5 | 使用 Send 将列表元素分发给并行节点处理 |
| 4-1 | TypedDict State 定义 | §4.2 | 使用 TypedDict 声明 State 结构与字段类型 |
| 4-2 | Annotated Reducer 声明 | §4.3 | 通过 Annotated 为字段指定 reducer 函数 |
| 4-3 | MessagesState 继承 | §4.4 | 继承预定义 MessagesState 快速构建对话 State |
| 4-4 | add_messages 追加行为 | §4.5 | 演示 add_messages 按 id 合并与追加消息的语义 |
| 5-1 | 条件边路由函数 | §5.2 | 编写根据 State 字段返回目标节点名的路由函数 |
| 5-2 | 循环边实现(ReAct 循环) | §5.3 | 通过条件边构建工具调用-观察的循环流程 |
| 5-3 | Command 路由与更新 | §5.4 | 在节点内返回 Command 同时完成路由与状态更新 |
| 6-1 | MemorySaver 基础用法 | §6.2 | 编译图时传入 MemorySaver 启用检查点 |
| 6-2 | PostgresSaver 连接与 setup | §6.3 | 配置 PostgreSQL 持久化检查点并初始化表 |
| 6-3 | thread_id 恢复对话 | §6.4 | 使用相同 thread_id 调用 invoke 恢复历史会话 |
| 6-4 | BaseStore put/get 示例 | §6.5 | 使用 Store 存储与检索长期记忆数据 |
| 7-1 | stream_mode="values" 消费 | §7.2 | 以 values 模式流式消费完整 State 快照 |
| 7-2 | stream_mode="updates" 消费 | §7.3 | 以 updates 模式消费增量更新 |
| 7-3 | stream_mode="messages" token 流 | §7.4 | 逐 token 消费 LLM 输出用于打字机效果 |
| 7-4 | 自定义 StreamWriter 写入 | §7.5 | 节点内通过 StreamWriter 推送自定义进度事件 |
| 7-5 | v2 事件格式解析 | §7.6 | 解析 {type, ns, data} 三元组并区分子图事件 |
| 8-1 | interrupt() 基础用法 | §8.2 | 在节点内调用 interrupt 挂起并暴露信息 |
| 8-2 | Command(resume=...) 恢复 | §8.3 | 通过 resume 值恢复被中断的图执行 |
| 8-3 | interrupt_before 静态断点 | §8.4 | 编译时配置节点边界中断 |
| 8-4 | 审批流 HITL 完整示例 | §8.5 | 构建含人工审批环节的文档处理流程图 |
| 9-1 | 子图定义与嵌套 | §9.2 | 将编译后的子图作为节点加入父图 |
| 9-2 | 子图 State 映射 | §9.3 | 配置父子图之间的 State 字段映射 |
| 9-3 | subgraphs=True 展开流式 | §9.4 | 流式消费时展开子图内部事件 |
| 10-1 | 节点异常 try/except 处理 | §10.2 | 在节点内部捕获工具异常并转写为 State 错误字段 |
| 10-2 | RetryPolicy 配置 | §10.3 | 为节点配置指数退避重试策略 |
| 10-3 | 超时控制 | §10.4 | 为图执行配置超时与降级逻辑 |
| 11-1 | ToolNode 与 tools_condition | §11.2 | 使用预构建 ToolNode 与 tools_condition 快速搭建 ReAct 循环 |
| 11-2 | bind_tools 绑定工具 | §11.3 | 将工具定义绑定到 ChatModel 以启用 tool calling |
| 11-3 | 自定义工具封装 | §11.4 | 使用 @tool 装饰器定义自定义工具 |
| 12-1 | 并行工具调用扇出 | §12.2 | 利用并行执行同时调用多个无依赖工具 |
| 12-2 | Map-Reduce 批量处理 | §12.3 | Send 扇出处理列表项 + Reducer 合并结果 |
| 13-1 | Supervisor 多 Agent 骨架 | §13.2 | 构建中心 Supervisor 调度多个 Worker 的模式 |
| 13-2 | Router 模式实现 | §13.3 | 通过路由节点将任务分发到专项 Agent |
| 13-3 | Handoffs 交接模式 | §13.4 | Agent 间通过工具调用实现控制权交接 |
| 13-4 | Swarm 蜂群模式 | §13.5 | 无中心调度、自由交接的蜂群协作模式 |
| 14-1 | 国产模型 ChatOpenAI 适配 | §14.2 | 通过 base_url 与 api_key 配置兼容 OpenAI 接口的国产模型 |
| 14-2 | 非 OpenAI 兼容模型适配 | §14.3 | 为不兼容 OpenAI 接口的模型封装标准 ChatModel 接口 |
| 15-1 | LangSmith Tracing 配置 | §15.2 | 通过环境变量启用 LangSmith Tracing |
| 15-2 | 自定义 Evaluator | §15.3 | 编写自定义评估器对输出进行自动打分 |
| 15-3 | LangSmith Dataset 评估 | §15.4 | 在数据集上运行评估并对比版本结果 |
| 16-1 | MCP 工具接入 | §16.2 | 通过 MCP 协议接入外部工具服务器 |
| 17-1 | 自托管 FastAPI 封装 | §17.2 | 将编译后的图封装为 FastAPI 应用,提供 invoke/stream 端点 |
| 17-2 | LangGraph CLI 部署 | §17.3 | 使用 langgraph dev/build/up 构建与部署服务 |
| 17-3 | Docker 镜像打包 | §17.4 | 编写 Dockerfile 将 LangGraph 应用容器化 |
| 18-1 | Token 计数与上下文控制 | §18.2 | 在节点内统计 token 长度并触发裁剪 |
| 18-2 | 并发限流配置 | §18.3 | 通过 max_concurrency 与信号量控制并发 |
| 18-3 | Postgres 连接池调优 | §18.4 | 调整 AsyncPostgresSaver 连接池参数提升吞吐 |
| 19-1 | Guardrails 输入检查节点 | §19.2 | 构建输入内容安全检查节点 |
| 19-2 | PII 脱敏处理 | §19.3 | 在工具调用前对敏感信息进行脱敏 |
| 20-1 | 客服对话机器人实战 | §20.2 | 综合运用状态、工具、流式、持久化构建客服机器人 |
| 20-2 | 多步骤研究 Agent 实战 | §20.3 | 构建搜索-阅读-总结的多步骤研究 Agent |
| 21-1 | OpenTelemetry 集成 | §21.2 | 配置 OTel 导出 Trace 到 Jaeger 等后端 |
| 21-2 | 监控指标埋点 | §21.3 | 采集延迟、错误率、token 消耗等核心指标 |
附录D 框架对比矩阵
D.1 多维度对比
以下对比聚焦 Python 版本实现,数据基于 2026 年各框架的稳定版本。
| 维度 | LangGraph | AutoGen (Microsoft Agent Framework) | CrewAI | LlamaIndex Workflows | Semantic Kernel |
|---|---|---|---|---|---|
| 开发者/维护方 | LangChain Inc. | Microsoft | CrewAI Inc. | LlamaIndex Inc. | Microsoft |
| 首版发布时间 | 2024 年初 | 2023 年下半年(原 AutoGen);2025 年整合为 Microsoft Agent Framework | 2023 年下半年 | 2024 年 | 2023 年 |
| 核心抽象 | 图(StateGraph)、节点、边、通道 | Agent、Actor、GroupChat、AgentThread | Agent、Crew、Task、Process | Workflow、Event、Step、Context | Plugin、Kernel、Function、Planner |
| 状态管理 | 显式 State + Channel/Reducer,支持共享状态与定制合并语义 | 基于消息历史与 Agent 上下文记忆,支持共享状态容器 | 基于 Task 输出传递,Crew 级别共享上下文 | 基于 Event 驱动的 Context 传递 | 基于 Kernel Memory 与 Plugin 状态 |
| 循环/分支支持 | 原生全支持(条件边、循环、动态扇出/扇入) | 支持循环对话与条件分支,但多通过代码逻辑而非显式图结构 | 支持顺序与层级 Process,复杂循环需自定义 | 支持 Step 间条件分支与循环(基于 Event 触发) | 支持 Planner 驱动的循环调用,分支需代码控制 |
| 持久化能力 | 内置 Checkpointer(Memory/Postgres/SQLite)+ BaseStore | 内置会话状态持久化,支持自定义状态提供者 | 需依赖记忆组件与外部存储,内置持久化能力较弱 | 内置 Checkpoint 机制(Workflow Checkpointer) | 支持 Kernel Memory 持久化,执行流持久化需自行实现 |
| HITL 支持程度 | 一等公民:interrupt()/resume 原语,支持跨进程中断恢复 | 支持通过 UserProxyAgent 实现人工介入 | 支持 HumanInput 工具,中断粒度较粗 | 支持中断与恢复事件,可实现 HITL | 支持 HumanInput 插件,需与 Planner 配合 |
| 多智能体模式覆盖 | 官方定义 Supervisor/Router/Handoffs/Swarm 四种模式 | 群聊对话为核心模式,支持 Supervisor、Handoff 与自由对话 | 以 Crew 层级流程为核心,支持顺序、层级与自定义 Process | 以事件驱动的 Step 协作为核心,多 Agent 通过 Event 交互 | 以 Planner 规划+Plugin 执行为核心,多 Agent 通过 Kernel 协调 |
| 流式输出 | 原生支持,多 stream_mode(values/updates/messages/custom),v2 事件格式带命名空间 | 支持消息流式返回 | 支持流式但粒度有限 | 支持 Step 级与 Token 级流式 | 支持流式调用,但统一流事件抽象较弱 |
| 部署方案 | LangGraph Server/CLI、自托管 FastAPI、Docker、LangGraph Cloud | 提供 AutoGen Studio 与自托管部署 | 提供 CrewAI+(托管)与自托管 API | 自托管为主,可集成到任意 Python 服务 | 提供 Azure 托管与自托管 SDK 部署 |
| 可观测性 | 原生集成 LangSmith Tracing,支持 OTel | 支持 AppInsights 与日志输出 | 与 LangSmith 等平台有集成 | 支持 LangSmith、Arize 等集成 | 原生集成 AppInsights/Application Insights |
| 学习曲线 | 中高:需理解 Pregel、Channel、Reducer 等底层抽象,灵活度高 | 中:群聊直觉易懂,复杂自定义需理解 Actor 模型 | 低-中:角色/任务/流程隐喻直观,上手快 | 中:事件驱动模型需适应,API 简洁 | 中:Plugin/Kernel 概念需适应,企业功能丰富 |
| 生态丰富度 | 依托 LangChain 生态,工具、文档、社区活跃;LangGraph.js 提供 TS 支持 | Microsoft 生态背书,企业集成好;.NET/Python 双语言 | 独立生态,模板市场增长较快;与 LangChain 工具可互操作 | 依托 LlamaIndex RAG 生态,数据连接器丰富 | Microsoft 生态强,Azure 集成、企业级安全完善 |
| 典型适用场景 | 需要复杂控制流、持久化、HITL、严格状态管理的生产级 Agent 工作流;多步骤长任务 | 群聊式多 Agent 协作场景;原型验证;对话驱动的研究任务 | 角色明确、流程相对固定的多 Agent 任务(如内容生产团队、营销流程) | RAG 密集型工作流;数据处理管道;事件驱动 LLM 应用 | 企业 Microsoft 生态内的 LLM 应用;需要 Planner+Plugin 架构的 Copilot 场景 |
| 典型不适用场景 | 极简单轮对话(杀鸡用牛刀);纯 RAG 查询(直接用 Chain 更轻量) | 需严格状态一致性、细粒度检查点恢复的生产流程 | 复杂动态路由、长期持久化中断恢复的高并发场景 | 非 RAG 为主、需复杂多 Agent 自由协作的场景 | 非 Microsoft 生态的轻量级独立部署 |
D.2 选型决策树
以下以文本决策树形式给出选型思路,每一步判断给出方向。
是否需要严格的持久化检查点、跨进程中断恢复或显式状态合并控制?
- 是 → 优先评估 LangGraph(Checkpoint/Store 原生支持、HITL 原语成熟)。
- 否 → 进入第 2 步。
场景核心是否为 RAG/数据摄取/索引工作流?
- 是 → 优先评估 LlamaIndex Workflows(数据连接器与索引生态最完善)。
- 否 → 进入第 3 步。
是否部署在 Microsoft/Azure 生态,需要与 Microsoft 365、Azure OpenAI、AppInsights 深度集成?
- 是 → 优先评估 Semantic Kernel(企业集成与安全能力最强)。
- 否 → 进入第 4 步。
多 Agent 协作模式是否以群聊对话/自由讨论为主,控制流要求不严格?
- 是 → 评估 AutoGen(Microsoft Agent Framework)(群聊抽象天然适配)。
- 否 → 进入第 5 步。
团队是否希望快速原型、角色驱动的流程(如内容生产、调研流水线),学习成本敏感?
- 是 → 评估 CrewAI(角色/任务/Crew 隐喻上手快)。
- 否 → 回到 LangGraph 评估:当需要最大灵活度、可定制状态语义、长期工程化维护时,LangGraph 是通用底座。
补充判断:
- 若应用需要同时支持流式输出、持久化、人工审批、子图复用与多智能体协作,且需在生产环境长期演进,LangGraph 提供的底层抽象覆盖面最完整。
- 若应用核心是多角色对话博弈或开放式讨论(如多专家辩论),AutoGen 的群聊模型更贴合。
- 若应用是固定流程的多角色协作(如研究员-写手-编辑流水线)且不需要动态路由,CrewAI 的 Process 模型足够。
- 若应用主要围绕文档索引、知识检索与数据转换,LlamaIndex Workflows 与 LlamaIndex 数据生态耦合更紧密。
- 若目标用户是企业 Microsoft 生态客户,Semantic Kernel 的集成优势明显。
框架间并非互斥关系。LangGraph 可通过节点封装调用其他框架的 Agent 作为子图节点;CrewAI 与 LlamaIndex Workflows 底层均可使用 LangChain 组件。选型应基于具体场景的控制流复杂度、持久化需求、部署环境与团队熟悉度综合决策。
后记
LangGraph 在 LLM 应用工程化体系中承担的角色是有状态工作流编排层。它解决的核心问题是如何让多个 LLM 调用、工具执行、条件分支、人工介入与持久化状态以可预测、可恢复、可观测的方式协同工作。它不替代模型本身,不替代向量数据库,不替代评估体系,也不替代安全护栏。
正确的 Agent 工程化需要分层设计:模型层负责推理与生成,工具层负责与外部系统交互,编排层(LangGraph 所在位置)负责流程控制与状态管理,评估层负责输出质量度量,监控层负责运行时观测,安全层负责输入输出治理。任一层的缺失都会在生产环境中暴露问题,框架本身无法弥补架构层面的缺陷。
本手册提供的是基于 1.2.x 版本的 API 说明、模式总结与工程经验。框架迭代迅速,API 行为、预构建组件与部署工具链在后续版本中可能发生变化。手册内容应在实际项目中通过运行代码、阅读官方文档与测试验证后再投入生产。建议关注 LangGraph GitHub 仓库的 Release Notes 与 LangChain Blog,及时跟进版本变更。
框架是工具,对 Pregel 计算模型的理解、对状态与副作用边界的判断、对幂等性与容错的工程习惯、对评估与监控的持续投入,是比具体框架更长期的资产。当这些判断力形成之后,框架的迁移与替换成本会显著降低,工程质量也不会被绑定在单一工具之上。
