898 字
4 分钟
Agent 工程(十二):记忆应统一接口,而不是统一存储

Agent Memory 不是一个可以统一写入向量库的概念。工作、情景、语义和程序记忆解决不同问题,读写频率、生命周期与进入上下文的位置也不同。真正应该统一的是上层访问接口,而不是底层存储。

四类记忆对应四种职责#

类型主要内容生命周期
工作记忆当前会话的消息、计划和临时状态随任务推进并持续变化
情景记忆某次任务发生了什么跨会话保留,可用于追溯
语义记忆从多次经历中提炼的事实和偏好跨会话保留,需要修正与遗忘
程序记忆做事方法、规则和 Skill相对稳定,通常进入系统提示或工具

“短期记忆”通常对应工作记忆,“长期记忆”则是后三类的总称。这个二分只能说明是否跨会话,无法指导具体存储与召回。

不同记忆需要不同读写模式#

工作记忆要求顺序、一致性和恢复能力,适合与 Checkpoint 状态一起管理。情景记忆数量大、细节多,通常按任务标识或时间查询。语义记忆需要按相关性召回,还必须保存来源、作用域和更正关系。程序记忆则应版本化发布,并保持稳定前缀。

如果把它们全部放入一个相似度索引,会产生几个问题:

  • 大量情景细节可能挤出精炼的语义结论;
  • 程序规则被当作普通检索结果,无法保证每次命中;
  • 语义事实缺少来源和更正机制,旧结论持续被召回;
  • 工作状态失去顺序和事务约束,无法可靠恢复。

存储统一降低了早期实现成本,却把差异转移到查询过滤和冲突处理上。

记忆形成一条提炼链#

长期记忆之间不是互相独立的数据堆:

任务过程
→ 情景记录
→ 多次情景中提炼语义
→ 稳定做法沉淀为程序记忆

每一次提升都应保留依据。语义事实需要知道来自哪些情景,程序规则需要知道为什么形成、何时更新。没有来源,系统就无法判断冲突信息中哪一条更新,也无法在用户要求删除时定位派生内容。

这条链也不是全自动的。模型可以提出提炼候选,但写入长期语义或程序记忆前,应进行作用域、重复、冲突和敏感信息检查。

我的选择:统一门面,分别治理#

上层只调用一个记忆接口,请求中明确任务身份、记忆类型、作用域和数量限制;门面内部再路由到会话存储、情景记录、语义索引或版本化 Skill。

召回结果也不会全部放在同一位置:

  • 程序记忆作为稳定规则或工具常驻;
  • 语义记忆按任务相关性注入;
  • 情景记忆默认不进入上下文,只在需要追溯时读取;
  • 工作记忆由当前会话与 Checkpoint 直接提供。

代价是需要维护多种后端和跨层来源关系。若应用只有短会话且不需要跨任务个性化,保留工作记忆即可;只有当系统确实需要长期学习、追溯或复用方法时,才值得建设后三层。