Agent开发系列(二):记忆篇

Agent开发系列(二):记忆篇
symwssyAgent开发系列 · 第 2/4 篇
Agent 的记忆经常被误解为“把历史对话全部放进上下文”。真正的记忆系统需要决定保存什么、何时读取、如何压缩,以及什么时候应该遗忘。
一、上下文窗口不等于记忆系统
上下文窗口只是模型一次调用能够看到的信息范围。它可以承载当前任务状态,但容量有限,也无法天然保证内容正确或长期有效。
一个可用的记忆系统至少要回答四个问题:
- 什么信息值得写入?
- 需要用的时候如何找到?
- 多条信息冲突时相信谁?
- 过期或错误的信息如何删除?
二、Agent 记忆的分类
| 类型 | 内容 |
|---|---|
| 工作记忆 | 当前目标、计划、步骤和临时结果 |
| 情景记忆 | 过去的对话、操作和事件 |
| 语义记忆 | 事实、概念、用户偏好和领域知识 |
| 程序记忆 | 处理流程、策略和成功经验 |
工作记忆通常直接进入上下文。情景记忆和语义记忆则常常需要数据库、文件、向量索引或知识图谱支持。
三、记忆的完整生命周期
1. 写入
不要逐字保存全部对话。写入前可以先做抽取、去重、归因和置信度判断,把原始内容转换为可检索的结构化记录。
例如:
1 | { |
2. 检索
关键词检索、向量检索和结构化查询各有边界。实际系统通常需要混合检索,并通过重排序选择最适合当前任务的内容。
检索结果不能直接拼接,还要处理冲突、时间顺序、来源可信度和上下文预算。
3. 压缩
常见方式包括:
- 对长对话生成分层摘要
- 保留任务状态而不是原始全文
- 按主题整理事实
- 将稳定经验转为流程或 Skill
4. 遗忘
遗忘不是系统缺陷,而是必要能力。可以使用过期时间、访问频率、重要度、用户删除请求和置信度阈值管理记忆。
四、RAG 与 Agent Memory 的边界
RAG 更关注从外部知识库检索资料,Agent Memory 更关注智能体自身在交互和执行过程中形成的信息。
两者可以共享向量库和检索器,但治理要求不同:
- RAG 更强调知识来源和文档版本
- Agent Memory 更强调时间、用户、任务范围与写入原因
- Agent Memory 更容易受到错误推理和 Prompt Injection 的长期污染
五、记忆系统的风险
错误记忆被持续放大
一次错误抽取可能被长期引用。写入时应保留来源和置信度,关键事实应由规则或人工确认。
过期信息仍然生效
用户偏好、项目状态和组织规则都可能变化。记录更新时间比单纯增加更多记忆更重要。
隐私与权限越界
多 Agent 共享记忆时,需要明确每个 Agent 能读什么、能写什么,以及哪些内容必须隔离。
记忆污染
不可信页面中的指令不应直接写入长期记忆。记忆写入应经过内容分类和权限检查。
六、一个简单的实现顺序
- 先使用结构化任务状态实现工作记忆。
- 再增加可追溯的对话摘要。
- 对稳定事实建立检索记忆。
- 最后增加遗忘、冲突处理和权限控制。
小结
好的记忆系统不是“记得越多越好”,而是能在正确时间提供少量、可信、相关并且有来源的信息。下一篇将讨论如何通过评测判断 Agent 是否真的变好了。





