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 配置无效不影响图运行,仅失去业务数据存储能力

四、一句话总结

  1. Checkpoint 管图的命:负责保存/恢复图的执行状态,是框架的核心持久化能力;
  2. Store 管你的数据:框架只传递不使用,最终存入运行时,供你在节点中读写业务数据。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐