在LangGraph中,
Checkpointers
和InMemoryStore
是管理状态的两种核心机制,但它们的设计目标和使用场景截然不同。本文从持久化方式、数据生命周期、性能特点等维度展开对比,并结合代码示例说明。
LangGraph 的 Checkpointers
和 InMemoryStore
是用于管理状态的两种不同机制,它们的核心区别在于状态的持久化方式和生命周期。
Checkpointers
:适用于需要长期保存、跨服务共享或容灾恢复的场景(如用户历史记录)。InMemoryStore
:专注于单次请求或临时计算的轻量级状态管理(如会话缓存)。
无论您是构建分布式系统还是实现临时状态存储,本文将帮助您快速选择合适的工具。
以下从应用场景、实现原理和代码示例三个维度进行详细对比:
Checkpointers(检查点管理器)
核心功能
- 持久化状态:将状态数据长期保存到外部存储(如文件、数据库、对象存储等),支持服务重启后的状态恢复。
- 断点续传:在分布式系统中支持跨进程/跨节点的状态共享。
典型应用场景
- 用户长对话上下文(需跨请求持久化)
- 分布式任务的状态同步
- 需要长期保留的历史数据(例如用户偏好、游戏进度)
实现原理
- 数据持久化:底层对接持久化存储引擎(如 SQLite、Redis、S3)。
- 原子性写入:支持事务性操作,确保检查点完整写入。
- 版本控制:自动管理状态快照版本(如增量备份)。
示例代码
from langgraph.checkpointing import CheckpointManager
from langgraph.core import State
# 初始化检查点管理器(连接本地SQLite数据库)
checkpoint_manager = CheckpointManager("sqlite:///user_states.db")
# 定义状态类
class UserState(State):
def __init__(self, name: str, score: int):
self.name = name
self.score = score
# 保存状态到检查点(自动持久化)
user_state = UserState("Alice", 100)
checkpoint_manager.save_state(user_state, key="user_123")
# 从检查点恢复状态
loaded_state = checkpoint_manager.load_state(key="user_123")
print(f"Recovered name: {loaded_state.name}, score: {loaded_state.score}") # Alice, 100
InMemoryStore(内存存储)
核心功能
- 临时状态存储:将状态保留在内存中,服务重启或进程结束后数据丢失。
- 高速访问:基于字典实现的键值存储,读写延迟极低。
典型应用场景
- 单次请求的中间状态(如表单验证)
- 实时计算的临时缓存(如用户会话中的临时数据)
- 不需要持久化的测试场景
实现原理
- 内存字典:直接使用 Python 字典存储状态对象。
- 无持久化开销:不涉及磁盘IO或网络通信。
- 自动失效:进程结束时数据自动清除。
示例代码
from langgraph.core import InMemoryStore, State
# 初始化内存存储
store = InMemoryStore()
# 定义状态类
class SessionState(State):
def __init__(self, items: list):
self.items = items
# 存储临时状态(仅存于内存)
session_state = SessionState(["apple", "banana"])
store.set_state("user_session_456", session_state)
# 获取并修改状态
loaded_state = store.get_state("user_session_456")
loaded_state.items.append("orange")
print(f"Updated items: {loaded_state.items}") # ['apple', 'banana', 'orange']
# 进程重启后数据丢失
# store.get_state("user_session_456") # KeyError
对比总结表
维度 | Checkpointers | InMemoryStore |
---|---|---|
持久性 | 数据永久保留(依赖存储介质) | 数据仅存活于进程内存 |
存储媒介 | 文件、数据库、云存储等 | 内存 |
适用场景 | 长期状态、分布式系统、关键业务数据 | 临时计算、单次请求、测试环境 |
性能 | 写入/读取可能有I/O延迟 | 常数时间复杂度,极低延迟 |
故障恢复 | 支持服务崩溃后的状态恢复 | 数据无法恢复 |
选择建议
- 优先使用
Checkpointers
:当状态需要跨请求、跨服务或长期保留时(如用户账户数据)。 - 优先使用
InMemoryStore
:当状态仅在单次交互或短期有效时(如购物车临时数据)。
最后总结
LangGraph的Checkpointers
和InMemoryStore
是状态管理的两种核心方案,Checkpointers通过持久化存储(如数据库、文件)实现数据的长期保留和跨服务共享,适用于用户历史记录、分布式任务等需要高可靠性的场景;而InMemoryStore将数据暂存于内存,提供极低的读写延迟,适合单次请求的临时状态(如会话缓存)或测试环境。前者强调数据的耐久性与容灾能力,后者聚焦瞬时性与效率。开发者在选择时应根据数据生命周期需求权衡:若状态需跨进程或长期存活,优先用Checkpointers
;若仅为短期计算或无需持久化,则InMemoryStore
更为轻量高效。两者结合使用可覆盖从临时缓存到持久化存储的全场景需求。