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 prompt
system_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 指南》《上下文工程》是同一条技术线,建议串起来看。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐