Checkpointer 解决了单个对话内记忆的问题。但如果你需要在不同对话之间共享数据——比如用户偏好、学习进度——就需要用到 Store。Checkpointer vs Store维度CheckpointerStore作用域单个对话线程thread_id跨所有对话线程数据类型Agent 状态快照自动管理任意键值数据手动管理典型用途多轮对话记忆用户偏好、知识库、配置数据组织thread_id → checkpoint(namespace, key) → valueStore 的基本操作Store 使用 命名空间 键 的层级结构来组织数据实例from langgraph.store.memory import InMemoryStorestore InMemoryStore()# 写入数据put(namespace, key, value)# namespace 是元组key 是字符串value 是字典store.put((users, user_001), # 命名空间preferences, # 键{ # 值theme: dark,language: zh-CN,level: 入门,})store.put((users, user_001),progress,{completed_courses: [HTML 基础, Python 基础],total_hours: 35,})# 读取数据get(namespace, key)prefs store.get((users, user_001), preferences)print(f偏好设置: {prefs.value})progress store.get((users, user_001), progress)print(f学习进度: {progress.value})# 搜索数据search(namespace)all_user_data store.search((users, user_001))print(f\n用户的所有数据 ({len(all_user_data)} 项):)for item in all_user_data:print(f {item.key}: {item.value})# 删除数据delete(namespace, key)store.delete((users, user_001), preferences)deleted store.get((users, user_001), preferences)print(f\n删除后: {deleted}) # None运行结果偏好设置: {theme: dark, language: zh-CN, level: 入门} 学习进度: {completed_courses: [HTML 基础, Python 基础], total_hours: 35} 用户的所有数据 (2 项): preferences: {theme: dark, language: zh-CN, level: 入门} progress: {completed_courses: [HTML 基础, Python 基础], total_hours: 35} 删除后: None在 Agent 中使用 Store将 Store 传给 create_agent()Agent 中的所有工具都能通过 InjectedStore 访问它实例from dotenv import load_dotenvload_dotenv()from typing import Annotatedfrom langgraph.store.base import BaseStorefrom langgraph.store.memory import InMemoryStorefrom langchain.tools import tool, InjectedStorefrom langchain.agents import create_agentfrom langchain.chat_models import init_chat_modelfrom langchain.messages import HumanMessage# 创建 Store 并预置数据store InMemoryStore()store.put((runoob, courses), catalog, {Python3 基础教程: {price: 免费, hours: 20, level: 入门},Python 数据分析: {price: 会员, hours: 30, level: 进阶},Java 面向对象: {price: 免费, hours: 25, level: 进阶},})store.put((runoob, users), user_vip_001, {name: 小明,membership: VIP,joined: 2024-01-15,})tooldef query_course_info(course_name: str,store: Annotated[BaseStore, InjectedStore()],) - str:查询菜鸟教程 RUNOOB 中课程的详细信息。Args:course_name: 课程名称item store.get((runoob, courses), catalog)catalog item.value if item else {}if course_name in catalog:info catalog[course_name]return (f《{course_name}》- 价格{info[price]}f时长{info[hours]}小时难度{info[level]})return f未找到课程《{course_name}》tooldef get_user_membership(user_id: str,store: Annotated[BaseStore, InjectedStore()],) - str:查询用户会员信息。Args:user_id: 用户 IDitem store.get((runoob, users), user_id)if item is None:return f未找到用户 {user_id}user item.valuereturn (f用户 {user[name]}{user[membership]} 会员f注册日期 {user[joined]})model init_chat_model(deepseek:deepseek-v4-flash, temperature0)agent create_agent(modelmodel,tools[query_course_info, get_user_membership],storestore,system_prompt你是菜鸟教程 RUNOOB 的课程顾问。,)# 查询课程信息数据来自 Storeresult agent.invoke({messages: [HumanMessage(contentPython3 基础教程多少钱)]})print(f查询课程: {result[messages][-1].content})# 查询用户信息数据来自 Storeresult agent.invoke({messages: [HumanMessage(content帮我查一下用户 user_vip_001 的信息)]})print(f查询用户: {result[messages][-1].content})运行结果查询课程: 《Python3 基础教程》是免费的学习时长约20小时难度为入门级别。 查询用户: 用户小明是 VIP 会员注册日期为 2024年1月15日。Store 的持久化InMemoryStore 的数据在程序重启后丢失。生产环境可以使用 PostgresStore 等持久化方案实例# 开发阶段from langgraph.store.memory import InMemoryStorestore InMemoryStore()# 生产环境需要 PostgreSQL# from langgraph.store.postgres import PostgresStore# store PostgresStore.from_conn_string(postgresql://...)Store 使用建议场景namespace 示例key 示例说明用户偏好(users, user_id)preferences主题、语言、通知设置学习进度(users, user_id)progress已完成课程、学习时长知识库(kb, collection)doc_id文档、FAQ、产品信息会话摘要(sessions, thread_id)summary长对话的摘要供 Checkpointer 之外的场景使用Checkpointer 负责对话到哪了Store 负责用户是谁、会什么、喜欢什么。两者配合使用才能构建出有持续记忆的智能 Agent。