一个客服 Agent 聊了 10 轮后,突然问用户:「请问您叫什么名字?」
用户很生气:「我第 3 轮就告诉你了。」
这不是 Agent 的错,是记忆管理没做好。
大多数 AI Agent 只有两层记忆:短期(上下文窗口)和长期(数据库)。
但真正的智能 Agent 需要三层记忆架构。
第一层:工作记忆(Working Memory)
作用:当前对话的临时信息
生命周期:一次对话
存储内容:
- 用户当前的问题
- 正在执行的任务
- 临时的变量和状态
典型场景:
用户:「帮我订一张去北京的机票,时间是明天下午」
Agent 需要记住:
- 目的地:北京
- 时间:明天下午
- 任务:订机票
实现方式:
用上下文窗口存储,但要定期总结压缩。
第1轮:用户想订机票
第5轮:总结用户需求(目的地、时间、预算)
第10轮:再次总结,添加新信息
压缩技巧:
Anthropic 的做法:每 5 轮对话,用模型生成一个总结,替换之前的对话历史。
结果:上下文占用减少了 70%,信息保留率提升了 20%。
第二层:情节记忆(Episodic Memory)
作用:历史对话的记录和检索
生命周期:长期存储
存储内容:
- 过去的对话历史
- 用户的偏好设置
- 任务执行记录
典型场景:
用户:「我上次订的是哪家航空公司?」
Agent 从情节记忆中检索:
- 上次订票时间
- 选择的航空公司
- 票价和座位偏好
实现方式:
用向量数据库存储对话历史。
对话1 → 向量化 → 存储
对话2 → 向量化 → 存储
...
用户提问 → 向量化 → 相似度搜索 → 返回相关对话
检索技巧:
不要只存储对话,要存储「对话摘要 + 关键信息」。
Rechat 的做法:每次对话后生成 3 个摘要
- 用户意图摘要
- 关键信息提取
- 后续行动建议
结果:检索准确率提升了 40%。
第三层:语义记忆(Semantic Memory)
作用:通用知识和规则
生命周期:永久存储
存储内容:
- 领域知识
- 业务规则
- 常见问题和答案
典型场景:
用户:「你们的退款政策是什么?」
Agent 从语义记忆中检索:
- 退款政策文档
- 常见退款问题
- 退款流程
实现方式:
用知识图谱或文档库。
知识库 → 分块 → 向量化 → 存储
用户提问 → 向量化 → 检索 → 生成答案
优化技巧:
不是所有知识都一样重要。
Stripe 的做法:给知识分优先级。
- 高优先级:政策、流程、常见问题
- 中优先级:产品功能、技术细节
- 低优先级:历史文档、旧版本信息
结果:答案相关性提升了 35%。
三层记忆的协同工作
真正的智能不是只靠一层记忆。
例子:用户问「帮我订一张和上次一样的机票」
工作记忆:当前任务(订机票)
情节记忆:检索上次的订票记录
- 航空公司:CA1234
- 时间:14:00
- 座位:靠窗
语义记忆:验证规则
- 这个航班是否还在运营
- 价格是否有变化
- 政策是否有更新
综合决策:
- 检查可用性
- 对比价格
- 提供建议
一个成功的架构
Character.AI 的记忆系统:
第一层:当前对话的上下文(工作记忆)
- 保留最近 10 轮对话
- 每 3 轮总结一次
第二层:用户的历史对话(情节记忆)
- 存储所有历史对话
- 用向量检索相关记录
第三层:角色的知识库(语义记忆)
- 角色设定、背景故事
- 专业知识和技能
结果:
- 用户可以连续对话数周
- Agent 记住了每个细节
- 用户留存率提升了 50%
记忆管理的三个原则
原则一:分层管理,不要混在一起
- 工作记忆:快进快出
- 情节记忆:持久存储,智能检索
- 语义记忆:通用知识,全局共享
原则二:定期清理,不要无限增长
- 工作记忆:定期压缩
- 情节记忆:设置过期时间
- 语义记忆:版本控制
原则三:主动更新,不要被动等待
- 用户信息变化时,立即更新
- 对话结束时,保存摘要
- 定期归档旧数据
最后的建议
AI Agent 的记忆不是「越大越好」,是「越智能越好」。
如果你的 Agent 记忆有问题,问自己三个问题:
- 我是否区分了短期、中期、长期记忆?
- 我的检索机制是「存储」还是「理解」?
- 我的记忆会自动清理和更新吗?
如果任何一个答案是「否」,重新设计你的记忆架构。
记忆是 Agent 智能的基础,没有记忆,就没有真正的智能。
—— https://www.80aj.com