RSS

LangChain 与 LangGraph:从一个会说话的模型,到一个敢交给别人用的 Agent

难度
进阶
章节
14 章
阅读时长
约 118 分钟
最后更新

你大概已经能让模型说话了:拿到 API key,装个 SDK,几行代码就有了回复。你可能还给它接过工具——定义一个 JSON schema,模型返回一个函数名和参数,你解析出来、执行、把结果拼回去,再调一次模型。

第一次跑通的时候会觉得,这有什么难的。

难的是第二天。产品说:这个退款要人工确认才能执行。你发现你的 while 循环里没地方停。运维说:进程重启了,昨天那个卡在人工确认的会话怎么办。你发现你的对话历史只存在内存里。前端说:用户要看到它正在做什么。你发现你的循环是个黑盒,中间什么都推不出来。测试说:昨天它把一个不该退的单子退了,是哪一步判错的。你发现你除了最后那句回复,什么都没留下。

这四个问题——人工介入、断点续跑、过程可见、事后可查——才是把一个 demo 变成一个能交给别人用的 agent 的真正工作量。它们和「怎么调模型」几乎没关系,和「怎么组织一段有状态的、可能跑很久的、随时可能被打断的流程」全部有关。

LangChain 和 LangGraph 分别站在这条分界线的两侧。LangChain 管的是一次调用:把不同厂商的模型、消息、工具、结构化输出抹平成同一套接口,再给你一个开箱即用的 agent 循环。LangGraph 管的是一段流程:状态放在哪、谁决定下一步去哪、中断了怎么接着跑、跑到一半崩了怎么办。官方自己的说法很直白——LangChain 的 agent 就是建在 LangGraph 上的,你可以从高层开始,需要的时候再往下掉一层。

这份教程要带你走完的不是「十行代码跑通一个 agent」。跑通很容易,官方最小示例确实只有十行。真正难的是后面那一大段:为什么两个节点同时写一个字段会直接报错;模型不肯停下来的时候你怎么让它停;人隔了一天才来点批准,那个会话凭什么还在;前端到底该订阅哪一种流;它变慢变贵的时候钱花在哪里;以及最后那个问题——这套东西上线之后,出了问题你能不能查出来。

读完你会有一个真正做完的产物:一个退款工单助手。它读一条客服工单,查订单、按政策判断、金额超过阈值必须人工批准、批准可能隔一天才来、整个过程能流式展示给前端、上线后能追溯每一次判断。十四章就是把它一步步做出来的过程。

动手之前,先说清楚三件事。

第一,这两个库刚经历过一次大改版,网上大部分中文文章讲的是改版之前的东西。LLMChain、AgentExecutor、initialize_agent、ConversationBufferMemory 这些你搜索时最常见的名字,在当前版本里 import 就会失败。create_react_agent 改名成了 create_agent,prompt= 改成了 system_prompt=。这不是细节,是你复制任何一段旧代码都会撞上的第一堵墙,所以第 2 章会专门用一节把对照表列清楚。

第二,本教程的所有结构性代码都在本机真跑过。文中出现的每一段报错原文、每一份 JSON、每一条消息序列、每一次 REST 响应,都是真实运行结果,版本是 langchain 1.4.0 / langchain-core 1.6.2 / langgraph 1.2.11 / langgraph-cli 0.4.31(2026 年 9 月 6 日安装)。唯一的例外是真实模型调用——写作环境没有模型 API key,所以凡是涉及模型真实返回、token 用量、流式节奏的地方,教程只给代码和官方说明,不会伪装成实测结果。这一点在相关章节都会明确标出。

第三,版本还会继续变,而且变得很快。官方发布政策自己写着 patch 版本「一周数次」;实测这两个包在写作前一周内就发了六个版本。所以本教程里的版本号、参数名、命令语法,动手前请用官方文档核对一遍。教程教的是判断方法和排错路径,不是可以永远照抄的常量。

技术栈:Python 3.12,依赖与命令统一用 uv。

适合谁会 Python、调用过 LLM API,但没系统写过 agent 应用的开发者
前置要求熟悉终端与 git,读得懂 Python 类型注解与异步函数;知道什么是 prompt、token、function calling;不要求了解 LangChain 任何历史版本

章节目录

14 章 · 约 118 分钟
  1. 01 先分清:一个管调用,一个管流程 需不需要循环、需不需要跨调用存活——两个问题交叉出四种做法,顺带说清什么时候这两个都不该用。 8 min
  2. 02 四块积木:模型、消息、工具、结构化输出 模型、消息、工具、结构化输出四块积木,以及七条旧写法失效的真实报错和 docstring 的一个默认陷阱。 15 min
  3. 03 十行拿到一个会循环的 agent 十行拿到会循环的 agent,看清它编译出来就是一张两节点图,并学会没有 API key 也能验证图结构。 9 min
  4. 04 中间件:不改 agent 内部就能管住它 六个钩子把 agent 循环切成可插拔的段落:内置中间件清单、自定义拦截,以及旧钩子参数的翻译表。 8 min
  5. 05 自己画图:StateGraph 的五个零件 什么时候必须离开预置 agent;StateGraph 的五个零件,以及「节点返回增量而不是完整状态」这条铁律。 7 min
  6. 06 状态与 reducer:合并规则决定一切 并发写冲突的真实报错、add_messages 的三种行为,以及子图共享 key 时的重复累加陷阱与修法。 8 min
  7. 07 控制流:条件边、Command、Send 与递归上限 条件边、Command、Send 扇出各管一件事;递归上限数的是步数,不是模型调用次数。 7 min
  8. 08 持久化:checkpointer、thread 与时间旅行 checkpointer 与 thread 让流程跨进程活下来;时间旅行有一个必须先分叉的陷阱。 8 min
  9. 09 人在回路:让流程停在人身上 interrupt 与 resume 的完整往返、四种审批决策的差别,以及「中断之前的代码会重跑」这个坑。 10 min
  10. 10 流式:该给用户看什么,该给工程师看什么 七种 stream_mode 的产出形状与受众划分;前端该看 custom,工程师该看 updates 和 tasks。 9 min
  11. 11 会崩、会慢、会贵:四道防线 节点级重试、缓存、超时怎么配;钱花在哪的四个来源排序,以及框架自身的攻击面。 9 min
  12. 12 看得见才改得动:追踪与评估 追踪回答这一次发生了什么,评估回答改完是不是真的变好了;附不上云的替代路径。 6 min
  13. 13 上线:从一个脚本变成一个服务 一个 langgraph.json 换来 assistants / threads / runs 三层接口;四种部署形态与框架和平台的许可证边界。 7 min
  14. 14 交付:把它做完,并且知道自己做完了 四轮任务卡把退款助手做完、十项自评量表,以及多智能体之争里那条可操作的判据。 7 min

延伸阅读:本教程引用的官方文档清单 →

常见问题

需要先用过 LangChain 吗?

不需要,甚至没用过更好。这两个库在 1.0 做过一次大改版,你对 0.x 的记忆多半是负资产。第 2.2 节直接列了七条旧写法失效的真实报错和替代写法。

和《Agent 原理与开发实战》是什么关系?

那一篇是不用框架、从 30 行循环手写 harness,看清每个机制由什么痛点触发;这一篇是框架已经把这些做好之后,你该怎么用、什么时候不该用。先读那篇会让这篇的每一章都更好懂,但不是前置条件。

没有模型 API key 能跟着做吗?

能做完大部分。第 3.5 节给了一个五行的假模型,能确定性地验证图结构、状态、中断和恢复——教程里所有 agent 实测就是这么跑的。只有真实模型返回、token 用量和流式节奏需要 key。

教程里的版本号可以直接用吗?

不建议写死。所有结构性代码在 langchain 1.4.0 / langgraph 1.2.11 / Python 3.12 上实际跑过,报错原文和 REST 响应都是真实抓取的,但官方发布政策自己写着补丁版本一周数次,动手前请用官方文档核对一遍。

可以跳着读吗?

第 1 到 3 章建议按顺序,它们建立选型判断和 agent 循环的心智模型。第 6、8 两章是全篇最该慢读的:状态合并和检查点是后面所有能力的地基。第 12、13 章可按需取用。

该用 LangGraph 还是自己写循环?

看你的流程要不要跨越一次调用活下来。跑三十秒就结束、失败了重来一次的,自己写循环更省事;要等人批准、要跨天、要事后回溯是哪一步判错的,那些基础设施你迟早得自己造一遍。第 1.2 节有一张四象限的判断图。