LangGraph 的 Checkpoint 与 Store 总结
·
LangGraph 的 Checkpoint 与 Store 总结
结合全程源码分析,两者是完全独立、职责分离的存储组件,核心区别:Checkpoint 供框架用,Store 供用户用。
一、Checkpoint(检查点 / Checkpointer)
1. 核心定位
LangGraph 执行引擎的核心状态持久化组件(框架自用,是图运行的基础设施)
2. 框架行为
主动读写、深度使用:框架在执行流程中主动调用其读取/写入方法,是状态管理的核心。
- 读取:启动时加载历史状态,实现断点续跑
- 写入:每步执行后、中断时、退出时,保存最新状态
3. 存储内容
图的完整执行状态(与业务数据无关):
- 状态通道(Channel)数据、执行步骤数
- 中断信息、挂起任务、状态版本号
- 所有支撑图恢复运行的元数据
4. 核心作用
- 断点续跑:图中断后可从上次状态恢复
- 人机交互:支持中断/ resume 恢复执行
- 状态持久化:保证执行进度不丢失
- 配合
durability控制持久化时机(sync/async/exit)
5. 源码关键链路
graph.compile(checkpointer=xxx)
→ stream() 透传
→ SyncPregelLoop(加载/保存检查点)
→ PregelLoop(核心持久化逻辑)
→ 调用 get_tuple()/put()/put_writes() 读写状态
二、Store(键值存储)
1. 核心定位
用户自定义业务数据的轻量级存储组件(框架仅透传,用户自用)
2. 框架行为
全程只透传、不读写:框架不调用任何 store.get()/store.put(),仅负责传递实例。
3. 存储内容
用户业务数据(与图执行状态无关):
- 用户偏好、会话缓存、业务中间结果
- 跨节点/跨执行共享的自定义数据
4. 核心作用
- 节点间共享业务数据
- 缓存节点执行结果,提升性能
- 长期存储用户自定义数据
5. 源码关键链路
graph.compile(store=xxx)
→ stream() → SyncPregelLoop → PregelLoop 层层透传
→ prepare_single_task 存入 Runtime.store
→ 框架执行节点时,自动注入到用户节点函数
6. 使用方式
节点函数直接声明参数 store: BaseStore,框架自动传入,无需手动获取。
三、核心区别对比表
| 维度 | Checkpoint(检查点) | Store(存储) |
|---|---|---|
| 使用者 | LangGraph 框架内核 | 用户自定义节点/业务代码 |
| 存储内容 | 图执行状态(步骤、中断、通道数据) | 用户业务数据(缓存、共享值、自定义信息) |
| 框架行为 | 主动读、主动写,核心依赖 | 仅透传、无任何读写操作 |
| 最终位置 | 绑定在 PregelLoop 执行循环中 | 最终保存在 Runtime.store 运行时中 |
| 核心价值 | 断点续跑、状态恢复、中断控制 | 业务数据共享、节点缓存 |
| 无它的影响 | 无法断点续跑,durability 配置无效 | 不影响图运行,仅失去业务数据存储能力 |
四、一句话总结
- Checkpoint 管图的命:负责保存/恢复图的执行状态,是框架的核心持久化能力;
- Store 管你的数据:框架只传递不使用,最终存入运行时,供你在节点中读写业务数据。
更多推荐

所有评论(0)