前六篇围绕"一张图"展开:怎么画、怎么走、怎么存档、怎么暂停。这是本系列的最后一篇,视野放大一圈,回答三个问题:**一个用户换了新会话,Agent 还能记得他吗?一张图越画越大,怎么拆?一个 Agent 忙不过来,怎么让多个 Agent 分工?**它们分别对应长期记忆 Store、子图和多 Agent 协作。文末对整个系列做一次总结。

一、长期记忆:跨会话记住用户#

1.1 Checkpointer 的记忆边界#

第五篇用 Checkpointer 实现了会话记忆:同一个 thread_id 下,Agent 记得之前说过的话。但这份记忆被锁在线程里。用户今天在一个对话里说"我喜欢简短的回答",明天开一个新对话,thread_id 换了,Agent 就什么都不知道了。

这其实很合理:线程存的是"这次对话的完整过程",内容又多又杂,本来就不该带到别的对话里。用户偏好、个人信息、长期积累的知识,需要另一种存储——不属于任何一次对话,属于这个用户本身。

Checkpointer(短期记忆)Store(长期记忆)
存什么一次会话的完整执行过程提炼出来的事实、偏好、知识
按什么区分thread_id自定义的命名空间,通常含 user_id
作用范围同一线程内跨线程、跨会话
谁来写LangGraph 每个超步自动存档你在节点里主动写入

最后一行是关键区别:Checkpointer 是全自动的,Store 则完全由你决定"什么值得长期记住"。

1.2 Store 的基本操作#

Store 是一个键值存储,数据按命名空间组织。命名空间是一个元组,像文件夹路径一样,比如 ("alice", "profile") 表示"用户 alice 的个人资料":

Python
from langgraph.store.memory import InMemoryStore

store = InMemoryStore()
store.put(("alice", "profile"), "pref-1", {"fact": "喜欢简短的回答"})   # 写入:命名空间、键、值
store.get(("alice", "profile"), "pref-1")                           # 按键读取一条
store.search(("alice", "profile"))                                  # 列出命名空间下的所有条目