AI Agent 的记忆系统:短期记忆 vs 长期记忆,一文讲透
AI Agent 的记忆系统:短期记忆 vs 长期记忆,一文讲透
一、为什么 Agent 需要"记忆"?
你有没有遇到过这种情况:和 AI 聊了半天,它突然"失忆"了,前面说过的事完全不记得;或者每次打开新对话,都要重新自我介绍一遍。
这背后的根本原因是:大模型本身是"无状态"的——它不会自动记住任何东西。每次调用,它只能看到你这一次传给它的内容,过完即忘。
但一个真正好用的 AI Agent,必须能"记事":
- 记住你这轮对话前面说了什么(不然没法多轮交流)
- 记住你是谁、喜欢什么(不然每次都像初次见面)
- 记住之前做过的任务、学到的经验(不然永远在重复犯错)
给 Agent 加上"记忆系统",就是让它从"金鱼记忆"变成"靠谱助理"的关键。而记忆主要分两类:短期记忆和长期记忆。
二、短期记忆(Short-term Memory)
2.1 它是什么
短期记忆 =当前这轮对话/任务的上下文。它对应的就是模型的「上下文窗口」里那些对话历史。
打个比方:短期记忆就像你和人聊天时脑子里的当前话题——这次聊天结束、或者话题切换太久,它就淡忘了。
你:我叫小明,在做一个电商项目 AI:好的小明,关于电商项目有什么可以帮你? 你:帮我设计数据库 ← AI 还记得你叫小明、在做电商 你:(新开一个对话)你好 ← AI 不记得小明了,短期记忆没了2.2 怎么实现
最直接的方式:把历史对话拼接到每次请求里。
# 短期记忆 = 维护一个 messages 列表messages=[{"role":"user","content":"我叫小明"},{"role":"assistant","content":"你好小明"},{"role":"user","content":"我刚才说我叫什么?"},# 它能答对]2.3 核心挑战:上下文窗口装不下
对话越长,历史越多,迟早会超出上下文窗口,而且 Token 成本飙升。常见应对:
| 策略 | 做法 |
|---|---|
| 滑动窗口 | 只保留最近 N 轮对话,旧的丢掉 |
| 摘要压缩 | 把早期对话总结成一段话,替代原文 |
| 混合 | 近期保留原文 + 远期保留摘要 |
三、长期记忆(Long-term Memory)
3.1 它是什么
长期记忆 =跨对话、跨会话持久保存的信息。关掉重开、过了一周,它依然记得。
打比方:长期记忆就像你写在笔记本里的东西——不依赖当前在不在聊,需要时翻出来看。
它通常存储:
- 用户画像:你的名字、偏好、习惯(“小明喜欢用 Python、讨厌过度设计”)
- 历史事实:之前发生过的关键事件、做过的决定
- 经验知识:从过往任务中学到的方法、踩过的坑
3.2 怎么实现
长期记忆不能塞在上下文里(太多了),而是存到外部,需要时再检索回来。最主流的方式就是向量数据库 + 检索——这其实就是 RAG 的思路用在了"记忆"上:
存入:把记忆("小明喜欢 Python")转成向量,存进向量库 ↓ 读取:新对话时,根据当前话题检索相关记忆,拼进上下文 ↓ 模型:"我记得你喜欢 Python,那这个方案就用 Python 写"# 长期记忆的极简示意# 1. 存:把重要信息写入向量库memory_db.add("用户小明:偏好 Python,反感过度设计",user_id="xiaoming")# 2. 取:新会话开始时,检索该用户的相关记忆memories=memory_db.search(query=当前问题,user_id="xiaoming",top_k=3)# 3. 把检索到的记忆拼进 system promptsystem_prompt=f"关于该用户你已知:{memories}\n请基于这些信息回答。"3.3 进阶:记忆的"读 / 写 / 更新"
成熟的长期记忆系统不只是"存",还要管理:
- 写入时机:哪些信息值得记?(不是所有对话都要存)
- 更新/纠正:“小明换成 Go 了”——旧记忆要能更新
- 遗忘机制:过时、无用的记忆要清理,否则越积越乱
四、短期 vs 长期:一张表看清
| 维度 | 短期记忆 | 长期记忆 |
|---|---|---|
| 范围 | 当前对话/任务 | 跨对话、永久 |
| 存在哪 | 上下文窗口(对话历史) | 外部存储(向量库/数据库) |
| 生命周期 | 对话结束就没了 | 持久保存 |
| 典型内容 | 刚才聊的内容 | 用户画像、历史经验 |
| 主要挑战 | 窗口装不下 → 压缩/裁剪 | 何时写、怎么检索、如何更新 |
| 类比 | 脑子里的当前话题 | 写在笔记本上的东西 |
五、一个完整 Agent 的记忆是怎么协作的
真实的 Agent 通常两种记忆一起用:
用户提问 ↓ ① 从【长期记忆】检索相关信息(用户偏好、历史经验) ↓ ② 加上【短期记忆】(本轮对话历史) ↓ ③ 一起组成上下文 → 喂给模型 → 生成回答 ↓ ④ 判断:本轮有没有值得长期记住的新信息? 有 → 写入【长期记忆】举个例子——一个编程助手 Agent:
- 长期记忆:记得你常用 Python、项目用 FastAPI、不喜欢复杂方案
- 短期记忆:记得这轮你正在调试一个登录接口的报错
- 协作效果:它给的方案既贴合你的长期偏好(Python + 简洁),又紧扣当前问题(登录报错)
这就是"有记忆"和"没记忆"Agent 的体验鸿沟。
六、几个实践建议
| # | 建议 | 说明 |
|---|---|---|
| 1 | 先做好短期记忆 | 多数应用,把多轮对话 + 摘要压缩做好就够用了 |
| 2 | 长期记忆按需引入 | 真的需要"跨会话记住用户"时再上,别过度设计 |
| 3 | 不是什么都要记 | 长期记忆只存高价值信息,垃圾进垃圾出 |
| 4 | 记忆也要"检索得准" | 长期记忆本质是 RAG,Embedding 和检索质量决定效果 |
| 5 | 注意隐私合规 | 存用户信息要考虑授权、加密、可删除 |
| 6 | 善用现成方案 | 有 Mem0、LangChain Memory 等开源库,不用全从零造 |
七、总结
- 大模型本身无状态,记忆是外挂上去的能力
- 短期记忆= 当前对话上下文,存在窗口里,靠压缩/裁剪管理
- 长期记忆= 跨会话持久信息,存在外部(向量库),靠检索调用,本质是 RAG
- 好的 Agent 两者结合:长期记忆提供"你是谁",短期记忆提供"我们在聊什么"
- 实践原则:先把短期做扎实,长期按需引入,只记高价值信息
一句话:记忆系统,是让 AI Agent 从"一次性工具"进化成"懂你的长期助手"的核心。理解了短期与长期记忆的分工,你就掌握了构建实用 Agent 的关键一环。
相关阅读:长期记忆与我之前写的《RAG 知识库实战》《向量数据库选型》《Embedding 指南》《上下文工程》是同一条技术线,建议串起来看。
