为什么你的 AI 助理聊完就忘?Agent 记忆的 5 种实现方案,一次讲透
模型本身没有记忆,所谓的「记住你」,全是外部系统实现的。这篇把落地路径讲清楚。
你有没有过这种体验:上午刚跟 AI 助理说「我吃素」,下午它又给你推荐了红烧肉;或者你想让它「记得我们上周定的方案」,它一脸茫然地让你重新讲一遍。
问题不在模型不够聪明,而在于——你压根没给它装「记忆」。
今天这篇文章,我们拆解一个被很多人忽略、却决定 Agent 能不能真正「好用」的能力:记忆到底是怎么实现的。
一、先搞懂一件事:LLM 本身没有记忆
这是最容易被误解的点。
大语言模型是无状态的:每一次 API 调用都是独立的,模型只「看见」你这次传进去的 prompt。它不保留上一次对话的任何信息,窗口一关,什么都忘了。
所以 Agent 所谓的「记忆」,没有一行是模型自带的,全靠外围系统实现:
- 要么把历史塞回 prompt(让它「假装」记得);
- 要么存到外部数据库,用时再捞出来(真正的长期记忆)。
记住这个前提,后面的方案就顺了。
二、记忆的两层:短期 vs 长期
在工程上,记忆通常分两层:
- 短期记忆(工作记忆):只存在于当前这次对话的上下文里,刷新即丢。
- 长期记忆:跨会话、跨时间保存下来的信息,比如「用户是素食者」「项目 A 用 Python」。
下面 5 种方案,本质都是在回答两个问题:存在哪?用的时候怎么取出来?
三、5 种实现方案
方案 1:上下文直塞(Buffer)
最朴素的做法:把历史对话原样拼回 prompt,每轮都带着聊。
- 做法:维护一个对话列表,每次请求把全部历史发给模型。
- 优点:实现极简,零额外组件。
- 代价:受上下文窗口限制;越长越贵,还容易「中间遗忘」——模型对超长文本中间部分的注意力会下降。
变体:只保留最近 K 轮(滑动窗口),用空间换遗忘。
适用:单轮或很短的对话 demo,别指望它扛长会话。
方案 2:摘要压缩(Summary)
对话一长,就把前面的内容总结成一段摘要,后续只保留「摘要 + 最近几轮」。
- 做法:当历史超过阈值,调用一次模型做总结,用摘要替代原文。
- 优点:显著省 token、降成本。
- 代价:总结可能丢细节;更麻烦的是,摘要本身也可能出错——一旦总结写错,后面全程带着错误记忆。
适用:长对话但需要控成本,对细节精度要求不极致。
方案 3:外部存储 + 语义检索(RAG 式长期记忆)
这是真正「跨会话记住你」的主流方案。
- 做法:把历史对话、用户事实存进向量数据库(如 Chroma、pgvector、FAISS 等);每次用户发消息,先把问题向量化,检索出最相关的几条记忆,再拼进 prompt。
- 优点:记忆可无限积累、跨会话可用;只取相关的,不算「全塞回来」。
- 代价:多了 embedding 和检索环节,有延迟和成本;检索质量直接决定记忆好不好用。
这一步实现的,正是认知科学里的语义记忆——记住「是什么」,而不是逐字回放。
代表实现:LangChain 的
VectorStoreRetrieverMemory,底层可接任意向量库。
方案 4:结构化 / 实体记忆
向量检索解决「想起相关片段」,但有时你需要的是「精确的事实」。
- 做法:从对话里抽取实体和事实(「张三是客户」「用户吃素」),存成结构化记录,甚至进一步组织成知识图谱。
- 优点:精准、可单独更新某条;比向量检索更「确定性」。
- 代价:抽取本身可能不准;需要设计 schema 和维护逻辑。
代表实现:LangChain 的
EntityMemory;更进阶的图谱记忆用图数据库存关系。
方案 5:状态持久化 + 工具化记忆(生产级)
前面四种多在「对话」层面。真要上线一个有状态、可恢复、跨会话的 Agent,还得加一层:
- 状态持久化(Checkpointer):把整个 Agent 的运行状态(含对话)按会话 ID 存进数据库(Postgres / Redis / 文件),可以随时暂停、恢复、续上。代表是 LangGraph 的 checkpointer。
- 工具化记忆:更进一步,直接给 Agent 几个记忆工具——
save_memory/search_memory/delete_memory,让它自己决定记什么、忘什么。代表项目如 Mem0、Zep。
这是目前生产落地最可靠的方向:记忆不再是「被动塞进去」,而是 Agent 主动管理的资产。
四、选型:你的场景该用哪种?
| 场景 | 推荐方案 |
|---|---|
| 单轮 / 极短对话 demo | 方案 1 直塞 Buffer |
| 长对话但要控成本 | 方案 2 摘要 Summary |
| 跨会话回忆知识/历史 | 方案 3 向量语义记忆 |
| 记住用户画像/偏好 | 方案 4 实体/结构化记忆 |
| 复杂、有状态、要可恢复的工作流 | 方案 5 Checkpointer + 外部存储 |
| 想让 Agent 自治地管理记忆 | 方案 5 工具化记忆(Mem0 / Zep) |
现实里往往是组合拳:用 checkpointer 保状态,用向量库存长期知识,用实体记忆管用户画像。
五、避坑清单
- 别把所有历史塞回 prompt。那是把 LLM 当硬盘用,又贵又容易「中间遗忘」。
- 记忆会污染。存错或存了无关信息,检索时就会被捞出来,直接诱发幻觉。
- 注意隐私。记忆里可能沉淀敏感信息,要有留存期限和删除机制。
- 算清成本与延迟。每轮 embedding + 检索都有开销,高频场景要评估。
- 该忘就忘。过期事实要失效,记错比不记更糟。
写在最后
一句话总结 Agent 记忆的本质:
存储(放外面)+ 检索(按需取)+ 取舍(该忘就忘)。
好的 Agent 不是记得多,而是记得对。下次你再抱怨「AI 又忘了我说的」,先别怪模型——看看你到底有没有给它配一套像样的记忆系统。