LangGraph 核心数据概念:State、Config、Store;
官方文档比较混乱,我让ai整理了一下,它们职责清晰、互不重叠,共同构成了LangGraph的数据层。
理解这三个概念是掌握 LangGraph 持久化机制的关键。
State(短期记忆)
定义
State 是图在单次执行过程中流转的业务数据,由 Checkpointer 在每个 super-step(最小调度单元) 结束时自动保存为 StateSnapshot。
class RagChatState(TypedDict):messages: Annotated[list, add_messages]
作用域
单个Thread内。
graph.invoke() 触发└── super-step 1 → Checkpoint 保存 State└── super-step 2 → Checkpoint 保存 State└── ...└── 同一 thread_id 下次调用 → 自动恢复最新 State
Checkpointer 配置
from langgraph.checkpoint.memory import InMemorySaver # 开发用
from langgraph.checkpoint.postgres import PostgresSaver # 生产用
checkpointer = PostgresSaver.from_conn_string("postgresql://...")
graph = builder.compile(checkpointer=checkpointer)
读取历史状态(时间旅行)
config = {"configurable": {"thread_id": "abc123"}}# 获取最新状态
snapshot = graph.get_state(config)
Config(执行配置)
定义
RunnableConfig 是每次调用 graph.invoke() 时传入的执行控制参数,不会被持久化,每次调用都需要重新传入。
标准结构
config = {"configurable": {"thread_id": "abc123", # 指定使用哪个 Thread(必填,开启持久化时)"checkpoint_id": "xxx", # 从指定 checkpoint 恢复(可选,用于时间旅行)"user_id": "u_001", # 自定义字段:用于在节点内定位用户"top_k": 5, # 自定义字段:控制检索行为的开关},"recursion_limit": 25, # 最大递归深度(默认 25)"callbacks": [...], # LangSmith 追踪等回调"tags": ["prod", "rag"], # 追踪标签"metadata": {"env": "production"}, # 日志/追踪元数据(不用于业务逻辑)
}
作用域
单次invoke
Store(长期记忆)
定义
Store 是 LangGraph 原生的跨 Thread 持久化文档存储,用于保存需要在多次对话间共享的信息。官方定位为 Long-term memory。
Store与State的核心区别
State → 绑定到某个 thread_id,对话结束后只能通过该 thread 访问
Store → 全局共享,任何 thread 都可以读写,天然适合用户级数据
Store 配置
from langgraph.store.memory import InMemoryStore # 开发用
from langgraph.store.postgres import PostgresStore # 生产用store = PostgresStore.from_conn_string("postgresql://...")
graph = builder.compile(checkpointer=checkpointer, store=store)
