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

Agent开发系列 · 第 2/4 篇

框架篇 · 记忆篇 · 评测篇 · Skill篇

Agent 的记忆经常被误解为“把历史对话全部放进上下文”。真正的记忆系统需要决定保存什么、何时读取、如何压缩,以及什么时候应该遗忘。

一、上下文窗口不等于记忆系统

上下文窗口只是模型一次调用能够看到的信息范围。它可以承载当前任务状态,但容量有限,也无法天然保证内容正确或长期有效。

一个可用的记忆系统至少要回答四个问题:

  1. 什么信息值得写入?
  2. 需要用的时候如何找到?
  3. 多条信息冲突时相信谁?
  4. 过期或错误的信息如何删除?

二、Agent 记忆的分类

类型 内容
工作记忆 当前目标、计划、步骤和临时结果
情景记忆 过去的对话、操作和事件
语义记忆 事实、概念、用户偏好和领域知识
程序记忆 处理流程、策略和成功经验

工作记忆通常直接进入上下文。情景记忆和语义记忆则常常需要数据库、文件、向量索引或知识图谱支持。

三、记忆的完整生命周期

1. 写入

不要逐字保存全部对话。写入前可以先做抽取、去重、归因和置信度判断,把原始内容转换为可检索的结构化记录。

例如:

1
2
3
4
5
6
7
{
"type": "user_preference",
"content": "用户偏好先给结论,再给详细解释",
"source": "conversation-2026-11-02",
"confidence": 0.9,
"updated_at": "2026-11-02T16:37:10+08:00"
}

2. 检索

关键词检索、向量检索和结构化查询各有边界。实际系统通常需要混合检索,并通过重排序选择最适合当前任务的内容。

检索结果不能直接拼接,还要处理冲突、时间顺序、来源可信度和上下文预算。

3. 压缩

常见方式包括:

  • 对长对话生成分层摘要
  • 保留任务状态而不是原始全文
  • 按主题整理事实
  • 将稳定经验转为流程或 Skill

4. 遗忘

遗忘不是系统缺陷,而是必要能力。可以使用过期时间、访问频率、重要度、用户删除请求和置信度阈值管理记忆。

四、RAG 与 Agent Memory 的边界

RAG 更关注从外部知识库检索资料,Agent Memory 更关注智能体自身在交互和执行过程中形成的信息。

两者可以共享向量库和检索器,但治理要求不同:

  • RAG 更强调知识来源和文档版本
  • Agent Memory 更强调时间、用户、任务范围与写入原因
  • Agent Memory 更容易受到错误推理和 Prompt Injection 的长期污染

五、记忆系统的风险

错误记忆被持续放大

一次错误抽取可能被长期引用。写入时应保留来源和置信度,关键事实应由规则或人工确认。

过期信息仍然生效

用户偏好、项目状态和组织规则都可能变化。记录更新时间比单纯增加更多记忆更重要。

隐私与权限越界

多 Agent 共享记忆时,需要明确每个 Agent 能读什么、能写什么,以及哪些内容必须隔离。

记忆污染

不可信页面中的指令不应直接写入长期记忆。记忆写入应经过内容分类和权限检查。

六、一个简单的实现顺序

  1. 先使用结构化任务状态实现工作记忆。
  2. 再增加可追溯的对话摘要。
  3. 对稳定事实建立检索记忆。
  4. 最后增加遗忘、冲突处理和权限控制。

小结

好的记忆系统不是“记得越多越好”,而是能在正确时间提供少量、可信、相关并且有来源的信息。下一篇将讨论如何通过评测判断 Agent 是否真的变好了。