首页 › G LangGraph Agent 编排 › G3 持久化与人机协作 › 04

G3-04 · Store 长期记忆:跨会话的用户画像

进阶阶段约 240 分钟阶段:G3 持久化与人机协作

阶段:G3-持久化与人机协作 | 预计耗时:50 分钟 | 前置:G3-03 断点续跑与时间旅行 代码:要你自己敲成 langgraph-learn/examples/g3_store.py 一句话定位:Checkpointer 管对话内记忆(thread_id 维度),Store 管跨对话记忆(用户维度)——客服产品"记住老客户偏好"就是它

学习目标

  1. 理解两层记忆的分工:thread 记忆 vs Store 记忆(别混)
  2. 掌握 InMemoryStore 三操作:put / get / search,理解 namespace 分层
  3. 做一个"跨会话记住用户偏好"的对话 agent(最小可用版)

核心知识

1. 两层记忆对照表(背下来)

Checkpointer Store
维度 thread_id(一次对话) 用户/实体(跨所有对话)
内容 完整 State 快照链 你主动存的键值对
生命周期 会话结束仍在,但属于该会话 永久,所有会话可读
典型用途 断点续跑、审批恢复 用户画像、偏好、历史结论

2. Store 的结构与操作

from langgraph.store.memory import InMemoryStore
store = InMemoryStore()
graph = builder.compile(checkpointer=saver, store=store)

# namespace 是"文件夹路径",key 是文件名,value 是任意 dict
store.put(("users", "u001"), "preference", {"tone": "简洁", "language": "中文"})
store.get(("users", "u001"), "preference")
store.search(("users", "u001"))            # 列出该文件夹全部

节点内拿 store:节点函数多声明一个参数 def node(state, *, store)(框架自动注入),或运行时 graph.get_store()。

3. 生产换 Postgres 版只改一行

InMemoryStore 用于开发;上线换 langgraph-checkpoint-postgres 的 PostgresStore——接口不变,这就是框架分层的好处。(你的本机/私有化路线:SQLite/Postgres 都可行,G7 项目里落地。)

实验任务

任务 1:偏好存取(20 分钟)

写 g3_store.py: - agent 有两个节点:chat(回答)与 remember(从对话里提取偏好写 Store) - 第一轮对话:用户说"我喜欢简洁回答" → remember 节点 put 进 ("users", "u001") - 换一个全新 thread_id 开第二轮:chat 节点先 store.search 读偏好 → 回答风格应体现"简洁" - 验证点:thread 换了(checkpointer 记忆没了),Store 记忆还在

任务 2:画像页(15 分钟)

store.search(("users", "u001")) 打印该用户全部记忆,做成"用户画像卡"输出——产品里"个人中心-我的偏好"就是这么做出来的。

任务 3:边界思考(10 分钟)

写进笔记:① 什么信息该进 Store?(稳定偏好/结论)什么不该?(本轮临时上下文)② 记得太多会怎样?(检索噪声——所以 namespace 设计要像文件夹一样有条理)

验收标准

G3 毕业检查点(对应路线图检查点 2):能演示杀进程后从检查点恢复;能解释 interrupt 配 checkpointer 的原因;能给老用户"记住偏好"。

衔接下一阶段

Agent 有记忆有审批了 → G4-01 结构化输出与工具进阶:接真实世界的工具。

小测验(3 题)

答完立即判分,错题给解析;得分存本地。实验与实操题不上网测:回对话找老师验收。