LangGraph Memory 详解:短期记忆、持久化 Checkpointer 与上下文管理三策略
上篇你给 Agent 装好了手脚——
@tool、多步循环、工具分包。可一关上进程,或换一轮提问,它就「不记得你叫小明」。这篇讲 Memory:短期 vs 长期、InMemorySaver+thread_id,以及上下文太长时的修剪 / 删除 / 总结。
小明的助手每轮都失忆
小明跑通了多工具 Agent,自信地连问两句:
他一拍大腿:每次 invoke 只塞了当前这一句,历史根本没带上。于是自己维护一个 list,越聊越长,很快又撞上另一墙——上下文窗口(导图举例:有的模型上下文不能超过 128K)。
小明去找老张:”记忆到底分几种?框架能不能自动续聊?历史爆了怎么办?”
老张说:”先分清短期和长期;再用 checkpointer 续上同一条会话;最后才谈三种管理策略。”
什么是 Memory
老张在白板上写导图分类:
“比喻:
-
短期 = 今天这通电话的录音(同一次会话) -
长期 = 客户档案柜(换电话线还能查到偏好)
LangChain 短期侧常见两条实现路:
| 路 | 做法 |
|---|---|
| 外挂 list | 自己 add_user / add_ai,每次 invoke(messages) |
| 框架 State + checkpointer | create_agent(..., checkpointer=...),同一 thread_id 自动续 |
持久化 checkpointer(导图认知级):SqliteSaver / PostgresSaver / CosmosDBSaver——进程挂了还能恢复;教学默认用内存版 InMemorySaver,生产深配另议。”
| 策略 | 对 State 里历史 | 发给 LLM 的内容 | 风险 |
|---|---|---|---|
| 修剪 | 仍完整保留 | 只选一部分发送 | 模型暂时看不见旧细节 |
| 删除 | 真正删掉 | 历史中不再存在 | 不可恢复,慎用 |
| 总结 | 旧轮变摘要 | 摘要 + 最近消息 | 细节可能被压扁;可用 SummarizationMiddleware |
小明:”那我验收啥?”
“两样:① 同一 thread_id 多轮能续聊;② 至少搞清一种管理策略和另两种的差别。”
代码拆解:从 list 到 thread_id
1. 外挂 ShortTermMemory
memory.py:
main.py 里每次问答都带着历史:
“这是最直观的短期记忆:消息链就是大脑的工作台。/clear 对应 memory.clear()——删的是 list 里的对话,system 留下。
缺点:和 Agent 工具循环各管各的,要自己把 list 喂进 create_agent 的 messages。”
2. InMemorySaver + thread_id
agent.py:
main.py Demo A——同一 thread 续聊:
“关键两句:
-
创建时挂上 checkpointer=InMemorySaver() -
每次 invoke带同一config.thread_id
换一个 thread_id,就是另一通电话,互不串话。这就是导图里的自动化短期记忆方案。”
3. 短期不止 messages:自定义 State 字段
state.py:
工具里读 / 写(任务状态也是短期记忆的一种):
“短期包括对话历史、查询结果、任务状态——visit_count 就是任务状态字段。深讲 Runtime 三分法放到后面篇;这里只要知道:短期 ≠ 只能存聊天记录。”
4. 三种管理策略
导图原文要刻进脑子:
-
修剪:State 里列表仍完整,只是发送前少带一些 -
删除:State 里真没有了(类似 Day6 clear的局部版,更危险) -
总结:旧消息变摘要,再拼上最近消息;框架侧有 SummarizationMiddleware
总结中间件(策略演示用):
挂上同一 checkpointer + thread_id,多轮之后旧对话会被摘要压缩——这就是「总结策略」的可运行对照。修剪 / 删除可先记概念表,生产再选型。
小明复述:”短期用 list 或 checkpointer+thread;爆了就修剪、慎删除、或总结;长期进 Store。”
总结
老张说:”第七篇只办一件事——让 Agent 记得住,并知道记不住时怎么办。”
“三个核心理解:
-
短期 vs 长期 —— 会话上下文 vs 跨会话经验;本篇主攻短期 -
续聊公式 —— checkpointer+ 同一thread_id(或 Day6 外挂 list) -
爆窗三策略 —— 修剪 ≠ 删除 ≠ 总结;总结可用 SummarizationMiddleware”
LangChain 支线进度:
小明说:”下一篇该把看图、工具、记忆捏成一个私厨 Demo 了。”
“对。下一篇:入门实战:AI 私厨“
没有记忆的 Agent 只是一次性计算器;checkpointer + thread_id 让会话有了连续剧,管理策略则防止剧集无限注水撑爆上下文。
转载请注明来源:LangGraph Memory 详解:短期记忆、持久化 Checkpointer 与上下文管理三策略







