Agent 记忆系统设计
你将学到什么
- Agent 为什么需要记忆系统
- 三层记忆架构(工作记忆、情节记忆、语义记忆)
- 记忆系统的 5 个核心设计问题
- 三种主流实现方案的选择标准
- 记忆系统的产品设计要点(透明度、隐私、成本)
为什么重要:记忆系统是 Agent 从"工具"升级为"助手"的关键。没有记忆的 Agent,每次对话都是全新开始,无法提供个性化服务。
为什么 Agent 需要记忆?
没有记忆的 Agent,每次对话都是全新开始——用户今天告诉你"我喜欢简洁风格",明天又要重新说一遍。这不是助手,是金鱼。
记忆系统让 Agent 能够:
- 持久化用户偏好:跨会话记住用户习惯
- 任务连续性:长期任务在多轮对话中保持状态
- 知识积累:随着使用时间增长,越来越懂用户
- 个性化服务:基于历史行为定制响应
三层记忆架构
┌─────────────────────────────────────┐
│ 第一层:工作记忆(Working Memory) │
│ 当前会话的对话历史 │
│ 存储:内存(最快) │
│ 容量:有限(最近 10-20 轮) │
└─────────────────────────────────────┘
↓ 重要信息提取
┌─────────────────────────────────────┐
│ 第二层:情节记忆(Episodic Memory) │
│ 本次会话的关键信息 │
│ 存储:向量数据库 │
│ 容量:中等(单会话级别) │
└─────────────────────────────────────┘
↓ 知识提炼
┌─────────────────────────────────────┐
│ 第三层:语义记忆(Semantic Memory) │
│ 用户长期偏好、历史知识 │
│ 存储:知识图谱 + 向量库 │
│ 容量:无限(跨会话持久化) │
└─────────────────────────────────────┘类比理解
| 记忆层级 | 产品类比 | 特点 | 典型内容 |
|---|---|---|---|
| 工作记忆 | 当前打开的浏览器标签页 | 快速但有限 | 最近 10-20 轮对话 |
| 情节记忆 | 最近的浏览历史 | 可回溯 | 本次会话的关键决策、用户反馈 |
| 语义记忆 | 书签收藏夹 | 永久保存 | 用户偏好、历史任务、知识积累 |
面试加分点
能说出这个架构借鉴了认知心理学的"多存储模型"(Atkinson-Shiffrin Model),展示你对 Agent 设计的理论基础有了解。
互动练习:设计记忆策略
场景:你在设计一个代码助手 Agent,用户在第 1 天问"如何用 Python 读取 CSV",第 30 天又问"上次那个 CSV 的代码在哪?"
应该用哪一层记忆存储这个信息?为什么?
查看答案
答案:语义记忆(第三层)
原因:
- 跨会话:第 1 天和第 30 天是两个不同的会话,工作记忆和情节记忆都已清空
- 长期价值:用户可能会反复参考这段代码,属于"知识积累"
- 检索需求:需要通过语义相似度检索("CSV 的代码")找到历史记录
存储格式建议:
{
"type": "code_snippet",
"language": "Python",
"topic": "读取 CSV",
"code": "import pandas as pd\ndf = pd.read_csv('file.csv')",
"timestamp": "2026-04-01",
"usage_count": 1
}产品设计建议:
- 在 UI 上提供"历史代码片段"功能,让用户快速查找
- 当用户问类似问题时,自动推荐历史代码
五个核心设计问题
在产品设计阶段,需要回答这五个问题。
1. 什么时候存储?
不是所有对话内容都值得记忆,触发存储的条件:
| 触发条件 | 示例 | 存储内容 |
|---|---|---|
| 用户明确提到偏好 | "我喜欢简洁风格" | {偏好: "简洁风格"} |
| 用户确认了重要决策 | "就用这个方案" | {决策: "方案A", 时间: "2026-04-24"} |
| 任务完成时的关键状态 | "已完成代码重构" | {任务: "重构", 状态: "完成"} |
| 用户纠错时 | "不对,我要的是B" | {纠正: "A→B", 负反馈: true} |
常见误区
不要把所有对话都存入记忆。闲聊、重复问题、无关信息会污染记忆系统,降低检索质量。
2. 用什么格式存储?
| 格式 | 适用场景 | 优点 | 缺点 | 示例 |
|---|---|---|---|---|
| 原始文本 | 对话内容保真回放 | 完整保留上下文 | 占用空间大 | 完整对话记录 |
| 结构化摘要 | 快速检索用户属性 | 查询效率高 | 丢失细节 | {name: "张三", 偏好: ["简洁", "中文"]} |
| 向量 Embedding | 语义相似度检索 | 支持模糊匹配 | 不可读 | 768 维向量 |
| 知识图谱 | 实体关系密集的场景 | 关系推理能力强 | 构建成本高 | 用户-偏好-场景三元组 |
PM 建议:大多数场景用"结构化摘要 + 向量 Embedding"的组合方案。
3. 如何检索?
| 检索方式 | 原理 | 适用场景 | 优缺点 |
|---|---|---|---|
| 关键词检索 | 精确匹配 | 查找特定实体(用户名、订单号) | 快但不灵活 |
| 向量相似度检索 | 语义匹配 | "找相关记忆" | 灵活但可能不精确 |
| 混合检索 | 两者结合 | 大多数场景 | 兼顾准确性和语义理解 |
实战建议:先用关键词过滤,再用向量相似度排序。
4. 如何遗忘?
记忆系统不能无限增长,常见的遗忘策略:
| 策略 | 原理 | 适用场景 | 实现难度 |
|---|---|---|---|
| 时间衰减 | 越旧的记忆权重越低 | 通用场景 | 简单 |
| 频率优先 | 经常被访问的记忆优先保留 | 个人助手 | 中等 |
| 显式删除 | 用户主动请求删除 | GDPR 合规必须支持 | 简单 |
| 容量限制 | 超过阈值时删除最旧/最少访问的记忆 | 成本控制 | 简单 |
合规要求
GDPR 和《个人信息保护法》要求用户有"被遗忘权"。产品必须支持用户删除特定记忆或全部记忆。
5. 如何处理矛盾信息?
用户今天说"喜欢中文",明天说"喜欢英文",两条记忆冲突怎么办?
| 策略 | 原理 | 适用场景 | 用户体验 |
|---|---|---|---|
| 时间优先 | 新信息覆盖旧信息 | 大多数场景(最常用) | 简单直接 |
| 置信度加权 | 多次确认的信息权重更高 | 关键偏好设置 | 更稳定 |
| 用户确认 | 当矛盾时主动询问用户 | 高风险决策 | 最安全但打断流程 |
PM 建议:默认用"时间优先",关键信息用"用户确认"。
互动练习:处理矛盾记忆
场景:你的 AI 助手记住了用户偏好"每天 9 点提醒开会",但今天用户说"今天不要提醒"。
应该如何处理这个矛盾?
查看答案
分析:这是"长期偏好"和"临时例外"的冲突。
推荐方案:
- 不覆盖长期记忆:保留"每天 9 点提醒"的偏好
- 添加临时例外:记录"2026-04-24 不提醒"
- 明天恢复:第二天继续按原偏好提醒
存储结构建议:
{
"preference": {
"reminder_time": "09:00",
"enabled": true
},
"exceptions": [
{"date": "2026-04-24", "action": "skip"}
]
}产品设计建议:
- 在 UI 上区分"永久设置"和"临时调整"
- 当用户说"今天不要"时,自动识别为临时例外
三种主流实现方案
方案 1:Mem0(最简单,推荐入门)
适合场景:对话 Agent、个性化推荐、快速原型
核心优势:
- ✅ 自动实体提取(不需要手动写提取逻辑)
- ✅ 自动去重(同一信息不会存两次)
- ✅ 支持多种向量数据库后端(Pinecone / Qdrant / Chroma)
- ✅ 10 行代码就能集成,工程门槛很低
需要注意:
- ⚠️ 信息提取依赖 LLM 调用,有额外 Token 成本
- ⚠️ 生产环境需要更多测试
PM 评估维度:
- 开发成本:⭐⭐⭐⭐⭐(最低)
- 灵活性:⭐⭐⭐(中等)
- 成本:⭐⭐⭐(中等,依赖 LLM 调用)
方案 2:MemGPT(虚拟内存机制)
适合场景:长期对话、复杂任务、上下文窗口受限的场景
核心思路:模仿操作系统的虚拟内存——工作中的信息放"内存"(上下文),不用的信息放"磁盘"(外部存储),需要时换入。
核心优势:
- ✅ 解决"上下文窗口有限但对话很长"的根本矛盾
- ✅ 对用户透明——用户感觉 Agent 一直"记得",但实际上在动态换页
- ✅ 适合超长对话场景(100+ 轮)
需要注意:
- ⚠️ 延迟比 Mem0 高(需要额外的内存管理操作)
- ⚠️ 实现复杂度较高
PM 评估维度:
- 开发成本:⭐⭐⭐(中等)
- 灵活性:⭐⭐⭐⭐(高)
- 成本:⭐⭐⭐⭐(较低,减少上下文 Token)
方案 3:自定义实现(LangChain / LlamaIndex)
适合场景:有特殊需求、需要精细控制记忆策略的团队
核心优势:
- ✅ 最灵活,可以完全定制记忆策略
- ✅ 适合把记忆系统作为核心竞争力的产品(如个人 AI 助手)
- ✅ 可以深度优化成本和性能
需要注意:
- ⚠️ 工程成本最高
- ⚠️ 需要工程团队深度参与设计
- ⚠️ 维护成本高
PM 评估维度:
- 开发成本:⭐(最高)
- 灵活性:⭐⭐⭐⭐⭐(最高)
- 成本:⭐⭐⭐⭐⭐(可深度优化)
方案选择决策树
是否有特殊记忆策略需求?
├─ 否 → 用 Mem0(快速上线)
└─ 是 → 是否需要超长对话支持?
├─ 是 → 用 MemGPT
└─ 否 → 是否有工程资源深度定制?
├─ 是 → 自定义实现
└─ 否 → 用 Mem0 + 后续迭代记忆系统的产品设计要点
1. 透明度设计
用户应该能够:
| 功能 | 为什么重要 | 实现建议 |
|---|---|---|
| 查看 | 用户需要知道 AI 记住了什么 | 提供"记忆管理"页面,列出所有记忆 |
| 编辑 | 修正不准确的记忆 | 每条记忆旁边有"编辑"按钮 |
| 删除 | 清除特定记忆或全部记忆 | 支持单条删除和批量清空 |
| 关闭 | 选择不使用记忆功能 | 提供"隐私模式"或"不保存记忆"选项 |
合规要求
这既是产品体验的要求,也是 GDPR / 《个人信息保护法》的合规要求。不支持用户管理记忆的产品,在欧盟和中国可能面临法律风险。
2. 隐私边界
| 风险点 | 应对策略 |
|---|---|
| 敏感信息(医疗、财务、密码) | 不要放入长期记忆,或加密存储 |
| 多用户场景下记忆串用 | 记忆隔离是基本要求,按 user_id 严格隔离 |
| 记忆数据泄露 | 记忆数据需要和普通对话数据一样受到保护 |
| 第三方访问 | 明确告知用户记忆数据是否会被第三方访问 |
3. 成本控制
记忆系统会带来额外的 Token 消耗:
| 成本来源 | 估算 | 优化方法 |
|---|---|---|
| 检索相关记忆 | 每次对话 +100-500 Token | 限制检索数量(Top-3) |
| 自动提取和存储 | 每次存储 +200-1000 Token | 只在关键时刻触发存储 |
| 压缩摘要 | 每次压缩 +500-2000 Token | 定期批量压缩,而非实时 |
PM 建议:在产品设计时,把记忆功能的 Token 成本单独列出来,纳入产品成本模型。
互动练习:成本估算
假设你的 AI 助手产品有 10,000 DAU,每个用户每天对话 10 轮,每轮检索记忆消耗 200 Token。
使用 GPT-4o($2.5 / 1M Token),记忆检索的月成本是多少?
查看答案
计算过程:
- 每天总对话轮次:10,000 用户 × 10 轮 = 100,000 轮
- 每天记忆检索 Token:100,000 轮 × 200 Token = 20,000,000 Token = 20M Token
- 每天成本:20M Token × $2.5 / 1M Token = $50
- 每月成本:$50 × 30 天 = $1,500
优化建议:
- 限制检索数量:从 Top-5 减少到 Top-3,成本降低 40%
- 缓存热门记忆:对高频访问的记忆做缓存,减少重复检索
- 使用更便宜的模型:用 GPT-4o-mini($0.15 / 1M Token)做记忆检索,成本降低 94%
检查点
在继续之前,确保你能回答:
- [ ] 能说出三层记忆架构的区别和适用场景
- [ ] 能回答记忆系统的 5 个核心设计问题
- [ ] 能根据产品需求选择合适的实现方案(Mem0 / MemGPT / 自定义)
- [ ] 能设计记忆系统的透明度功能(查看/编辑/删除)
- [ ] 能估算记忆系统的 Token 成本