Agent 的记忆系统:让 AI 真正"记住你"

这篇讲清楚一件用 AI 越深越会发现的事:为什么 ChatGPT 关掉就忘?为什么 Cursor 隔天就不记得我的项目?怎么让 Agent 真的有"长期记忆"?

一、一句话定义

Agent 的记忆系统:让 Agent 在多次会话、多个任务之间保留信息、调用经验、避免重复犯错的一套机制。

简单说:让 AI 从"每次都失忆的金鱼"变成"会成长的同事"。

二、为什么需要记忆系统

LLM 本身有个根本限制:

它的"记忆"只有上下文窗口那么大——窗口外的内容它什么都不记得。

这意味着默认状态下:

  • 你今天告诉 ChatGPT 你是程序员,明天它就忘了
  • Cursor 这次帮你定的代码风格,下个项目就不知道
  • Agent 跑完一个任务,下次跑同样的任务还会重复同样的错误

人不是这样的。 人的同事会记得:

  • “你上次说过你不喜欢这种命名”
  • “这个 Bug 我们三个月前修过”
  • “客户 A 偏好简洁、客户 B 要详细”

让 Agent 像同事一样有记忆——是从"工具"走向"伙伴"的关键一步。

三、记忆 vs 上下文 vs RAG —— 别混淆

概念是什么类比
上下文(Context)当前对话窗口里的内容你"现在脑子里"想着的事
记忆(Memory)跨会话保留的、Agent 自己积累的信息你大脑中长期记忆
RAG外挂的知识库,用相似度检索翻参考书 / 查百科

三者关系:

┌────────────────────────────────────────┐
│                                         │
│  [长期记忆]                             │
│      ↓ 检索 / 加载                      │
│  [当前上下文窗口] ← 用户 / Agent 当前对话│
│      ↑ 检索                              │
│  [RAG 知识库] (外部静态资料)             │
│                                          │
└────────────────────────────────────────┘

关键区别

  • RAG 是查"外部已存在的资料"——百科、文档、代码库
  • 记忆是 Agent 自己产生 / 积累的——和这个用户、这次任务强相关

RAG 是"知识库",记忆是"个人经历"。两者技术相通,用途完全不同

四、记忆的几种类型

学术和工业界常用以下分类(类比人类记忆):

1. 工作记忆(Working Memory)

  • 是什么:当前对话的上下文窗口
  • 像人:你当前思考时"脑子里"的东西
  • 保留时长:本轮会话
  • 实现:直接靠 LLM 的 Context Window

2. 短期记忆(Short-term Memory)

  • 是什么:最近 N 轮对话的总结 / 摘要
  • 像人:今天发生过的事
  • 保留时长:会话内 + 最近几次会话
  • 实现:滚动摘要、对话历史压缩

3. 长期记忆(Long-term Memory)

最重要的一类,又分三种:

子类型是什么例子
情景记忆 (Episodic)“发生了什么”“上次我帮用户改了 API 鉴权”
语义记忆 (Semantic)“事实是什么”“用户名叫小明,偏好简洁回答”
程序记忆 (Procedural)“怎么做某件事”“部署这个项目要先跑迁移脚本”

4. 反思记忆(Reflective Memory)

  • 是什么:Agent 对自己过去行为的复盘
  • 像人:经验教训
  • 例子:“我上次用 grep 搜代码效率低,下次先用 LSP”
  • 实现:定期触发 LLM 反思 → 总结 → 写入长期记忆

五、记忆系统的核心架构

一个完整的 Agent 记忆系统通常包含 4 个组件:

┌─────────────────────────────────────────────┐
│                                              │
│  ① 写入器 Writer                              │
│     ↓ 决定什么值得记                          │
│                                              │
│  ② 存储 Storage(向量库 + 结构化 DB)         │
│     ↓ 持久保存                                │
│                                              │
│  ③ 检索器 Retriever                           │
│     ↓ 检索相关记忆                            │
│                                              │
│  ④ 应用器 Applier                             │
│     ↓ 将记忆注入到 Prompt                     │
│                                              │
│  → LLM 生成回答                               │
│                                              │
└─────────────────────────────────────────────┘

① 什么该记(Writer)

不是所有对话都值得记。常见判断标准:

  • 用户明确说了偏好 / 事实 / 身份
  • 任务的关键决策点
  • 出现了错误 / 修正——下次别再犯
  • 用户纠正了 Agent

实现方式:

  • 简单版:每轮结束让 LLM 判断"有没有值得记的事"
  • 进阶版:根据用户的"反馈信号"(点赞、修改、重做)触发记忆写入

② 怎么存(Storage)

通常是两种数据结构混合

  • 向量存储(用 Embedding):处理"语义相关"的记忆 → 用于"语义记忆 / 情景记忆"
  • 结构化存储(KV / SQL / 图):处理"事实型"记忆 → 用于"用户档案 / 偏好 / 程序步骤"

现实中两种都要有——纯向量不够准,纯结构化不够灵活。

③ 怎么查(Retriever)

  • 相似度检索:用当前问题作为 query,找相关记忆(类似 RAG)
  • 时间检索:最近的 N 条
  • 重要性检索:标记过 importance 的优先返回
  • 图检索:根据实体关系跳转(“张三的偏好” → “张三的项目” → “项目里用过的库”)

④ 怎么用(Applier)

把检索到的记忆注入到 System Prompt

[System]
你是一个 AI 助手。
用户档案:
- 姓名:小明
- 偏好简洁、技术导向回答
- 主要项目:一个 React + Node.js 电商平台
最近的相关记忆:
- 上周用户修复了 Stripe 支付的 webhook 验签问题
- 用户偏好用 Zustand 而非 Redux

[User]
今天怎么搭支付流程?

**记忆系统的最终输出,就是更好的 Context。**它本质上是 Context Engineering 的一种自动化

六、主流记忆方案盘点

1. ChatGPT Memory(OpenAI)

  • 启用后,ChatGPT 会主动记住关键信息
  • 用户能看到记忆列表、手动删除
  • 简单、用户感知明显
  • 限制:只能存"事实型"记忆,不能调用复杂的过程记忆

2. Claude Projects(Anthropic)

  • 一个 Project 对应一组文件 + 系统级指令
  • 不是真正的"自动记忆",但提供了长期上下文容器
  • 配合 Claude Code 形成"项目级记忆"

3. Cursor Rules / .cursorrules / AGENTS.md

  • 手写的"项目记忆"——风格、约定、避免的坑
  • 简单暴力但最实用
  • 现实里:80% 的"Agent 记忆"用这种方式就够了

4. Mem0

  • 开源记忆框架,主打用 LLM 提取 + 向量存储
  • 把对话提炼成结构化记忆(事实、关系、偏好)
  • 可以与 LangChain / OpenAI SDK 集成

5. Letta(前身 MemGPT)

  • 把 Agent 当操作系统——分层管理"工作记忆 vs 主存"
  • LLM 自主决定调入 / 调出记忆
  • 学术派偏多,工程上仍在演进

6. Zep

  • 专注对话记忆 + 知识图谱
  • 自动从对话中抽实体和关系,构造图记忆
  • 适合需要复杂关系推理的场景

7. LangGraph / LangChain Memory

  • 提供多种记忆模式(buffer、summary、entity、vector)
  • 可组合
  • 工程界用得最多

8. 自研方案

很多严肃产品最终选择自己写记忆系统——
因为通用记忆框架不能精确匹配业务规则

  • 哪些算"重要"很场景化
  • 检索策略要根据业务调
  • 隐私 / 删除要有产品化设计

七、什么时候该记 / 不该记

应该记

✅ 用户的身份与偏好(语言、风格、技术栈)
✅ 项目的架构与约定
✅ 反复出现的错误模式
✅ 用户多次纠正过的事
✅ 任务的关键决策点

不该记

❌ 一次性的、无法泛化的细节
❌ 涉及 PII / 敏感信息(除非加密 + 合规)
❌ 短期变化的状态(在线 / 离线、当下心情)
❌ 错误的、未验证的信息

必须能"忘掉"

记忆系统最容易被忽视的设计

  • 用户能查看自己的记忆
  • 用户能删除记忆
  • 记忆能过期(自动 / 手动)
  • 记忆能纠正

没有删除按钮的记忆系统不是好系统——既是合规要求(GDPR),也是用户信任的基础。

八、记忆系统的几个真实坑

1. 记忆"污染"

错误信息一旦写入,会持续误导后续回答。
防御:所有写入要有置信度可纠正可回滚

2. 隐私"泄漏"

把敏感信息存到向量库,取出来时容易混入到不该看的对话里
防御:按用户 / 任务 / 角色严格隔离 namespace

3. 记忆"过载"

记的越多,注入 Prompt 时越容易冲淡核心信息
防御:只检索 Top-K + 严格按 importance 过滤。

4. “幻觉记忆”

LLM 写记忆时把对话内容改写错了——把"我喜欢 Python"记成"我讨厌 Python"。
防御:写入前用 LLM 二次校验、关键事实结构化存储。

5. 用户感知问题

用户看不到记忆,但感受到 Agent 的偏见 / 误判 ——这种体验最差。
防御:让记忆可见、可解释、可干预

6. 跨会话一致性

同一个事实在不同会话里被写成不同版本(“用户偏好 A” vs “用户偏好 B”)。
防御:写入前先检索 + 更新,而不是无脑追加。

九、设计一个简单的 Agent 记忆系统

如果你要从零做一个,建议从最简单版本开始:

Level 1(最简版本)

  • 项目根目录放一个 MEMORY.md
  • 用户 / Agent 有意识地手动维护
  • 每次启动 Agent 时把它放进 System Prompt

这是 80% 场景下最佳方案 —— Cursor / Claude Code 实际上就是这种模式。

Level 2(半自动)

  • LLM 每次会话结束时自动总结:要记什么
  • 总结写到 MEMORY.md 或简单数据库
  • 用户能看 / 能改 / 能删

Level 3(向量化)

  • 引入向量库
  • 检索:当前对话 query + 最近 N 条 + 用户偏好
  • 适合多用户、多任务、多项目的 SaaS

Level 4(结构化 + 反思)

  • 实体 / 关系 / 时序结构化
  • 引入"反思 Agent"——定期总结教训
  • 适合企业级 Agent / 长期运行的自主 Agent

大多数项目做到 Level 2 就够了。Level 3 / 4 是少数复杂场景才需要的。

十、记忆 vs 模型的"内化"

一个值得思考的对比:

方式是什么优点缺点
外挂记忆通过检索注入 Prompt灵活、可删除、可调试每次都要检索 / 注入
微调把信息训进模型权重不用每次注入改一次贵、不可解释
大上下文窗口全塞到 Context Window简单、直接贵、注意力衰减

当前主流:以"外挂记忆"为主,配合大上下文窗口——
因为它便宜、可控、可改、可合规。微调只在确定信息很稳定 + 很有价值时才考虑。

十一、小结

  • Agent 记忆系统让 AI 从"金鱼"变"同事"——跨会话、跨任务保留信息。
  • 别把记忆 / 上下文 / RAG 混淆——它们解决不同问题,技术接近。
  • 记忆分工作 / 短期 / 长期 / 反思,长期再分情景 / 语义 / 程序
  • 系统四件套:写入器、存储、检索器、应用器
  • 主流方案:ChatGPT Memory、Cursor Rules、Mem0、Letta、Zep、自研——多数严肃产品最终自研。
  • 记忆系统的关键不是"能记多少",而是记得对、查得准、删得掉
  • 务实建议:MEMORY.md 开始,先把记忆做"可见可改",再考虑向量化。

一句话总结:记忆不是把所有事都存下来——是让 AI 在对的时间、想起对的事、做对的判断。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐