第 13 篇把前十二篇的机制拼成了一个完整的多代理研究助手,项目层面算是收官了。但有一件事整个系列都刻意绕开:那张图怎么跑进生产环境。差距不在图本身——生产跑的还是同一个编译产物——而在图外面的一圈:状态放在哪、崩了怎么续、谁来观测、并发来了顶不顶得住。本篇是《LangGraph 从入门到实战》第 14 篇,也是系列最后一篇:先回头把 13 篇铺成一张地图,再把图从笔记本送进生产。
口径先交代。langgraph 1.2.x(PyPI 独立发布),部署现状以 2026 年 10 月的官方部署文档为准——原 LangGraph Platform 的托管能力已并入 LangSmith 体系,名目有变化,第 3 节细说。全文按"系列地图 → 生产五差距 → 部署三选项 → FastAPI 示例 → 上线清单 → 何时不需要 → 总结"展开。
1、13 篇全景地图
回头看,13 篇只回答一个问题:一张 Agent 图怎么从"能跑"变成"能扛事"。四个阶段各管一段,地图如下:
| 阶段 | 篇目 | 回答的问题 | 标志性机制 |
|---|---|---|---|
| 基础篇 | 第 1~3 篇 | 图怎么搭、黑板怎么写 | StateGraph 与 reducer |
| 控制流篇 | 第 4~7 篇 | 流程怎么走、循环怎么管 | 条件边、create_agent、interrupt、子图 |
| 记忆篇 | 第 8~9 篇 | 状态怎么存、记忆怎么续 | checkpointer 与 Store |
| 进阶篇 | 第 10~13 篇 | 过程怎么看得见、规模怎么上去 | 流式、CRAG、Send、多代理组网 |
基础篇立心智模型:节点是函数、边是控制流、State 是共享黑板,reducer 定合并语义。控制流篇把"走哪条路"讲完:条件边管路由,create_agent 把标准工具循环收进一个函数,interrupt 给不可逆操作加人工闸门,子图让一张图嵌进另一张图。记忆篇解决"进程之外"的事:checkpointer 按 thread 存快照、支持时间旅行,Store 按 namespace 存跨会话的长期记忆。进阶篇面向规模化:流式与 LangSmith 让执行可见,CRAG 给检索装纠错循环,Send 支撑运行期才定路数的并行扇出,第 13 篇把这些收拢进一张研究助手图。
四个阶段的依赖是单向的:后面每篇都在前面给出的结构上做文章,没有一篇推翻过前面的结论。这份稳定性,正是选 LangGraph 做 Agent 专题收官系列的理由。这张地图的用法是倒查:黑板合并不对回第 3 篇,循环停不下来回第 2、4 篇,挂起待审的单子丢了回第 8 篇,执行过程看不清回第 10 篇——生产环境里每一处故障,都能落回某一篇的机制说明里。
2、demo 与生产的五项差距
第 13 篇的研究助手已经有了生产系统的骨架:审批闸门、并行检索、质量把关、全程轨迹。但五处配置仍是 demo 口径,逐项过一遍。
持久化在内存里。第 6 篇的 MemorySaver、第 9 篇的 InMemoryStore,当时都注明"仅演示":进程一退,检查点、挂起待审的单子、长期记忆全部蒸发。生产第一件事,把两个后端都换成 Postgres 实现。
恢复靠重跑。demo 里进程崩了就重新 invoke 一次;生产里一个跑十分钟的多代理任务崩在第九步,不能让用户为前八步再付一遍钱。checkpointer 落库之后,同 thread_id 续跑是框架默认能力——前提是它真的落了库。
观测靠 print。第 10 篇的观测三件套——stream 是录像、get_state 是照片、LangSmith 是档案馆——demo 里通常只用了第一个。生产要求答错能定位到节点、慢能定位到边,这就得把档案馆建起来。
评测靠手感。"跑两遍看着对"不算评测。第 13 篇的 grader 用结构化输出当裁判,已经是评测思想的雏形;生产上要把裁判固化成数据集和断言,进 CI,改提示词先过门禁再上线。
并发没设防。demo 单请求顺序执行;生产里多请求同时来、Send 扇出撞模型限流、工具调用超时,三件事迟早都来。图结构不设防,防线全在运行时 config 里。
五项差距没有一项需要改图结构——这正是图式编排的红利:生产化改的是外围配置,不是业务拓扑。
3、部署三选项对照
2026 年 10 月的官方口径下,LangGraph 应用的部署收敛为三条路。第一条,FastAPI 手动挂图:编译好的图是普通 Python 对象,挂进任意 Web 框架,持久化、流式、鉴权全部自己接。第二条,自托管 Agent Server:用 LangGraph CLI 把图打包成标准运行时——本地 langgraph dev 开发、langgraph build 打 Docker 镜像,自己用 Docker 或 Kubernetes 跑。自托管文档的口径:standalone server 是 production-ready 且最轻量的自托管形态。
第三条,LangSmith Cloud:全托管,连 GitHub 仓库或 langgraph deploy 一键部署,平台负责构建、扩缩与数据库。部署分两种规格:Serverless 空闲时缩到零,适合后台任务与延迟不敏感的负载;Dedicated 常驻并按副本自动扩缩,适合延迟敏感的在线服务。费用需 Plus 计划起步($39/席位/月,含 1 个 Small Serverless 部署,见官方定价页);免费 Developer 档不含 Deployment,但每月 5k 条 trace 的追踪与本地 Studio 免费可用。三条路怎么选,先问自己两个问题,决策路径如下:
解读:要省运维直接上 Cloud;不想把数据送出门、但要后台任务、队列、持久化编排这些平台能力,就自托管 Agent Server;只需要"图加一个 HTTP 入口",FastAPI 最直接。三个维度展开对照如下:
| 维度 | FastAPI 手动挂图 | 自托管 Agent Server | LangSmith Cloud |
|---|---|---|---|
| 形态 | 自己的 Web 服务 | CLI 打出的镜像 | 平台托管 |
| 持久化与队列 | 全部自己接 | 运行时内置,自管 Postgres 与 Redis | 平台全管 |
| 运维责任 | 全在自己 | 中等,K8s Helm 为官方推荐路径 | 最低 |
| 费用 | 仅基础设施 | 无席位费,企业特性需 license key | Plus 计划 $39 每席位每月 |
| 适合场景 | 嵌入现有后端、小规模 | 数据不出门、要平台能力 | 快速上线、小团队 |
Agent Server 这条路的入口是项目根目录的 langgraph.json,声明图在哪、依赖是什么:
{
"dependencies": ["."],
"graphs": {
"research": "./src/agent.py:graph"
},
"env": ".env"
}
解读:graphs 里的 research 是服务对外暴露的助手名,SDK 按名字调用;本地开发与打镜像共用这一份配置。配套命令四条(细节见本地开发文档):
pip install "langgraph-cli[inmem]" # dev 服务器;全栈验证另装 langgraph-cli
langgraph dev # 热重载开发服务器,端口 2024
langgraph up # 本地生产级验证:Docker 起 Postgres 与 Redis
langgraph build -t research:latest # 打生产镜像,交给 Docker 或 Kubernetes
解读:dev 起的界面里可用 Studio 可视化调试;up 在本地拉起与生产同构的全栈;build 产出的镜像就是部署物。另有一条官方提醒值得单独记:
官方警告:standalone server 不要跑在会缩容到零的环境,后台任务会随实例一起蒸发。
4、FastAPI 最小生产示例
三条路里最常被低估的是第一条——它把自由和责任一起给你。以 FastAPI 为例,最小可生产入口如下,图沿用第 13 篇的研究助手:
from contextlib import asynccontextmanager
from fastapi import FastAPI
from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver
from agent import builder # 第 13 篇研究助手
DB_URI = "postgresql://user:pass@localhost:5432/agents"
@asynccontextmanager
async def lifespan(app: FastAPI):
async with AsyncPostgresSaver.from_conn_string(DB_URI) as cp:
await cp.setup() # 首次部署建表
app.state.graph = builder.compile(checkpointer=cp)
yield # 进程存活期间共享连接池
app = FastAPI(lifespan=lifespan)
@app.post("/chat/{thread_id}")
async def chat(thread_id: str, body: dict):
config = {
"configurable": {"thread_id": thread_id},
"recursion_limit": 50, # 步数兜底
"max_concurrency": 5, # 并发兜底
}
result = await app.state.graph.ainvoke(
{"messages": body["messages"]}, config)
return {"reply": result["messages"][-1].content}
解读四件事。其一,checkpointer 的生命周期交给 FastAPI 的 lifespan:连接池随进程起、随进程灭,不在请求里反复建连。其二,入口用 ainvoke 而非 invoke,异步栈不会被一次长图执行卡死。其三,thread_id 放进 URL 路径不是随手设计:同一个 id 再次 POST,框架会带着 checkpointer 里的档案续跑,第 6 篇挂起的审批单也走这条路恢复——中断恢复机制在 HTTP 语境下原样生效。其四,config 里的两道兜底来自第 5 节清单:recursion_limit 按业务收紧,max_concurrency 护住模型限流与数据库连接池(用法见 Graph API 文档)。同样要看清缺什么:流式响应、后台任务、鉴权、速率限制都得自己做——这是自由的价签。
5、生产上线 checklist
图结构一字不改,按清单过外围。第一项落库先行,需安装 langgraph-checkpoint-postgres:
from langgraph.checkpoint.postgres import PostgresSaver
from langgraph.store.postgres import PostgresStore
with PostgresSaver.from_conn_string(DB_URI) as cp, \
PostgresStore.from_conn_string(DB_URI) as store:
cp.setup() # 建检查点表:thread 内快照与挂起单
store.setup() # 建记忆表:跨 thread 的长期记忆
graph = builder.compile(checkpointer=cp, store=store)
解读:checkpointer 管 thread 内的快照与中断恢复,Store 管 namespace 编址的跨会话记忆,两者可共用一个 Postgres 实例、各自建表;Checkpointers 文档与 Stores 文档都把 Postgres 系实现列为生产推荐,前者正是 LangSmith 自用的实现。其余各项逐条打勾:
- 持久化后端全部换 Postgres,setup 建表
- recursion_limit 按业务显式收紧,别用默认的 1000
- max_concurrency 限住并行扇出,护模型限流与连接池
- 模型客户端 max_retries 打开,工具层显式设超时
- 评测数据集与断言进 CI,提示词变更先过门禁
- LangSmith 环境变量配好,延迟与错误率有面板可看
- 自托管不进缩容到零的环境,部署窗口留足排空时间
七项过完,这张图就配得上"生产"两个字。清单每一项都有出处:前两项是第 8、9 篇的机制落地,max_concurrency 护的是第 12 篇的 Send 扇出,评测门禁是第 13 篇 grader 的延续——demo 与生产的分水岭,从来不在图里。
6、何时不需要 LangGraph
收官之前,把第 1 篇的判断再钉一遍:把业务流程画在纸上,如果图里没有回边——不需要循环、不需要中断审批、单次调用即走即回——那个十行的 while 循环,或者一行 create_agent,就是更合适的答案。中间地带也有现成的分界:检索若只是固定的五步管线,LangChain 基础系列的固定管道就够;要纠错、要回头路,才轮到第 11 篇的 CRAG 图。LangGraph 的全部价值建立在"循环复杂到需要显式化"之上;没有循环的复杂度,就不必为它付框架的税。
7、总结
本篇给系列收尾:13 篇按基础、控制流、记忆、进阶四段铺开,从五步建图走到多代理组网;demo 与生产的差距归为持久化、恢复、观测、评测、并发五项,全部只动外围不动图;部署三选项按控制欲与运维预算选型——FastAPI 挂图、自托管 Agent Server、LangSmith Cloud;上线前七项清单逐条打勾,图就能进生产。
往大处看,这也是 Agent 专题四条系列的终点:从 OpenAI 与 Anthropic 两侧的裸 SDK 手写工具循环,到 LangChain 用组件把循环收进 create_agent,再到本系列把流程提升为显式的图——手写过的每一行都成了理解框架的底子,框架的每一层抽象都省在手写过的地方。TypeScript 侧的 Mastra 对照轮次同理:框架会换,循环、状态、工具分发这三个内核不会。
行动建议按处境给。手头已有图要上线的,今天就做两件事:checkpointer 换成 PostgresSaver,LANGSMITH_TRACING 环境变量设上——前者买来崩溃可恢复,后者免费买来第一份真实延迟画像。还在选型的,用第 1 篇那张纸上的业务图回答回边之问,再对着第 3 节的决策图落位。四条系列到此收官,接下来只剩一件事:把你自己的业务画成图,跑进生产。

