学术资源 / 固定快照
LangGraph 1.2.15 修复了检查点与恢复问题
LangGraph 是 LangChain 公司维护的开源 Python 框架(仓库 langchain-ai/langgraph,MIT 许可证),把智能体流程写成由节点和状态构成的图,并用检查点逐步保存状态,让长任务在中断后能接着执行。1.2.15 版于 2026 年 10 月 12 日(UTC)发布,集中修复检查点写入、状态分支和恢复执行中的问题。本文为资料核验,未安装实测。  AI 生成示意图:研究流程被写成节点与箭头组成的图,每完成一步就存入一个检查点;中途暂停或出错后,可以从最近的检查点继续。画面为概念示意,不是 LangGraph 的界面截图。 ### 框架结构与安装 截至 2026 年 10 月 21 日核验,GitHub 仓库 langchain-ai/langgraph 根目录的 LICENSE 是 MIT 许可证,版权声明为“Copyright (c) 2024 LangChain, Inc.”;PyPI 上 1.2.15 的许可证字段同为 MIT,要求 Python 3.10 及以上;仓库在 10 月 19 日仍有新版本发布。README 说明 LangGraph 受 Pregel 和 Apache Beam 启发,可以脱离 LangChain 单独使用;JavaScript/TypeScript 版本在另一个仓库 langchain-ai/langgraphjs。官方给出的安装命令是 `pip install -U langgraph`,PostgreSQL 和 SQLite 检查点分别是需要另行安装的 `langgraph-checkpoint-postgres` 与 `langgraph-checkpoint-sqlite` 包。同一公司提供的 LangSmith 观测与部署服务另有条款,不在这份 MIT 许可范围内;流程中调用的语言模型也按各自服务商的条款计费。以上安装步骤本文没有在本机执行。 使用 LangGraph 时,开发者先定义一份共享状态,再把检索、调用模型、运行工具等步骤写成节点,用边连接成图。图按“超步”(super-step)推进,同一超步中排到的节点可以并行执行。编译时接入检查点器(checkpointer)后,每个超步结束都会按线程(`thread_id`)保存一份状态快照;同一超步中已完成节点的输出也会先作为“待写入”记录保存,某个节点失败后从该超步恢复,成功的节点不必重跑。在这套机制上,`interrupt` 可以让流程停下等待人工输入,`update_state` 可以人工修改状态,`get_state_history` 可以回看每一步的快照,还能从较早的检查点分叉出另一条执行路径。写入时机分三种持久化模式:`sync` 在下一步开始前同步写入;`async` 在下一步执行时异步写入,进程崩溃时有少量丢失风险;`exit` 只在运行结束、出错或被中断时写入,性能最好,但无法从进程中途崩溃中恢复。 ### 1.2.15 版本更新 1.2.15 于 2026 年 10 月 12 日(UTC)在 GitHub Releases 发布,更新说明中除一项依赖升级外都是修复,大致分四类。一是检查点写入:启用节点缓存时,命中缓存的节点现在会像实际运行的节点一样保存写入结果;通过 `update_state` 人工修改状态时,写入改为记在被修改的那个检查点上,`bulk_update_state` 中的每次修改也各自获得任务 ID。二是分支与恢复:从线程已经越过的旧检查点以 `exit` 模式重新运行时,它的写入不再混进较新的分支;恢复后的 `exit` 模式运行按实际发生顺序重放增量写入。三是 `DeltaChannel`:这是 1.2 起加入、仍处于测试阶段的状态通道,只保存增量,靠更早的检查点重建当前值,适合消息不断累积的长对话;本版修复了写入它的消息缺少 ID、分叉快照启动从未运行过的节点、写入失败后仍保存检查点等问题。四是中断与工具:在 `interrupt_before` 断点之前请求排空(drain)时,执行会在断点处停下;`astream_events` 的 v1/v2 事件流不再丢失控制与中断事件;预置的 `ToolNode` 不再吞掉无效的恢复输入。  AI 生成示意图:一条线程上依次保存的检查点。左侧表示从最近的检查点恢复执行,右侧表示 keep_latest 清理时只保留最新检查点、删除较早记录。画面为概念示意,不代表实际数据。 配套的 `langgraph-checkpoint-postgres` 3.2.0 于 10 月 14 日(UTC)发布,唯一的新功能是给 `PostgresSaver` 和 `AsyncPostgresSaver` 加上 `prune`/`aprune`。此前这两个类只继承了基类中直接报 `NotImplementedError` 的方法,长期运行的线程没有受支持的办法清理旧检查点。按合并请求 #9290 的说明,`delete` 策略在一个事务中删除指定线程的全部检查点、写入和数据块;`keep_latest` 只保留每个命名空间的最新检查点及其引用的数据,删除其余部分。使用了 `DeltaChannel` 的线程会被 `keep_latest` 拒绝,因为删掉旧检查点会让它无法重建当前值。截至核验日,LangGraph 的最新正式版已是 10 月 16 日(UTC)发布的 1.2.16,它继续修复恢复执行:恢复时 `Command` 中的状态更新只应用一次,子图不再重跑已完成的任务,恢复输入无效时同一步的其他任务仍能完成。
- 收录日期
- 2026-10-21
- 类别
- 科研 Agent
- 状态
- 资料核验,未安装实测
为何收录
用大模型搭建的科研流程常由多个步骤组成,例如检索文献、筛选摘要、抽取数据、调用统计脚本,再交给研究者确认后继续分析。一次运行可能持续数小时,中途会遇到网络中断、接口限流或进程重启。LangGraph 把这些步骤写成显式的图,每一步的状态都存进检查点:进程崩溃后可以用同一个 thread_id 从最近的检查点继续,不必从头重跑已经付费的模型调用;需要人工判断的环节可以用 interrupt 停下,例如让研究者核对纳入排除结果后再进入数据抽取;get_state_history 能回看每一步的状态,便于排查错误,也便于在论文方法部分说明流程。1.2.15 修复的正是这些环节的正确性:人工修改的状态记在哪个检查点上、命中缓存的步骤有没有留下记录、从旧检查点重跑会不会污染新分支。这类错误通常不报错,只会让恢复后的状态悄悄偏离,在需要复查的研究流程中尤其难发现。PostgreSQL 检查点新增的 prune 则为长期运行的线程提供了控制存储增长的正式办法。
局限与注意事项
- 外部操作仍可能重复:检查点只保存图的状态。按官方中断文档,恢复时节点会从头重新执行,
interrupt 之前的代码会再跑一遍。提交计算任务、写数据库、发送邮件这类操作应设计成幂等(例如用 upsert),或者放在 interrupt 之后、拆成单独的节点。
- 持久化模式要选对:
exit 模式不保存中间状态,进程中途崩溃后无法从中间恢复,需要容错的长任务应使用 sync 或 async。InMemorySaver 只把检查点放在内存里,进程重启即丢失;本地实验可用 SQLite,长期运行可用 PostgreSQL。
- 测试阶段功能:本次多项修复集中在
DeltaChannel,官方文档标注它仍处于测试阶段,接口可能变化;使用它的线程也不能用 keep_latest 清理。
- 清理不可逆:
prune 删除的检查点无法恢复,删除后也不能再回看或从中分叉。合并请求列出的已知限制包括:同一线程同时执行两次清理,可能有一次因序列化冲突或死锁失败(可以安全重试);清理过程中从检查点分叉或重放并不安全;1.2.13 之前写入的部分线程可能绕过 DeltaChannel 检查;PostgreSQL 会复用释放的空间,但表文件不会缩小,需要 VACUUM FULL 或 pg_repack。
- 版本更新频繁:10 月 12 日到 16 日之间就发布了 1.2.15 和 1.2.16 两个版本。用于研究时应锁定
langgraph 及检查点包的版本,并在记录中写明。
- 使用门槛与数据:官方把 LangGraph 定位为底层编排框架,状态和节点需要自己用 Python 编写。所用模型若是外部接口,处理的数据会发送给服务商,涉及受保护数据时需要另行评估。
想先判断是否合用,可以做一个小规模验收(这是建议,本文未执行):锁定版本后,用 SqliteSaver 搭一个“检索 → 筛选 → 人工确认”的三节点图,在人工确认节点调用 interrupt 之前向本地文件追加一行记录,模拟一次外部写入。流程停在确认处后结束进程,再用同一个 thread_id 恢复并提交确认,查看文件里的记录是否重复、get_state_history 中的各步状态是否符合预期,再把写入改成幂等操作重复一次作对照。计划使用 PostgreSQL 时,可以在测试库副本上对一条长线程执行 keep_latest,确认清理后仍能正常加载状态并继续运行。
参考文献
-
langchain-ai/langgraph. GitHub,2026-10-21 核验。
-
LICENSE(MIT License). GitHub,2026-10-21 核验。
-
langgraph==1.2.15. GitHub Releases,2026-10-12(UTC)发布。
-
langgraph-checkpoint-postgres==3.2.0. GitHub Releases,2026-10-14(UTC)发布。
-
langgraph==1.2.16. GitHub Releases,2026-10-16(UTC)发布。
-
feat(checkpoint-postgres): add prune to PostgresSaver and AsyncPostgresSaver (#9290). GitHub,2026-10-14(UTC)合并。
-
langgraph 1.2.15. PyPI,2026-10-21 核验。
-
Checkpointers. LangChain 文档,2026-10-21 核验。
-
Interrupts. LangChain 文档,2026-10-21 核验。
-
信息由 Scholay 学术一站式平台 整理并发表,如有侵权请反馈下架。
-
信息同步发表于恩特学术,智能时代的学者社区
在交互式日历中查看这条记录 ↗