Agent Basic / 06

Memory 设计模式

“Memory” 是 Agent 领域里最容易被神化的词之一。

很多介绍会直接说:

  • Agent 需要记忆
  • 给它加个 memory 就更智能了

但如果不先拆清楚,最后很容易把几种完全不同的东西混在一起:

  • 当前任务状态
  • 会话上下文
  • 长期偏好
  • 外部知识库

它们都和“记住信息”有关,但并不是同一层东西。

先分清三类东西

1. State

这是当前任务执行过程中的结构化状态。

例如:

  • 当前分析到哪一步
  • 已经查过哪些数据
  • 中间结果是什么
  • 是否满足结束条件

这更像执行现场,而不是“记忆人格”。

2. Short-term Memory

这是当前会话中保留下来的上下文。

例如:

  • 前几轮对话内容
  • 当前用户刚才补充的约束
  • 本轮任务中暂时需要保留的信息

它主要服务于当前任务连续性。

3. Long-term Memory

这是跨会话、跨任务仍然有价值的信息。

例如:

  • 用户偏好
  • 历史决策习惯
  • 某类任务的长期背景资料

它更接近“长期沉淀的信息”。

为什么很多系统其实不需要长期记忆

这是一个很现实的问题。

很多 Agent 场景只需要:

  • 当前任务状态
  • 当前会话上下文

就已经足够了。

如果你一上来就做长期记忆,很容易遇到这些问题:

  • 召回了不相关信息
  • 旧信息污染当前任务
  • 记忆更新逻辑混乱
  • 很难知道该忘什么

所以不要因为“Memory 听起来高级”就盲目上长期记忆。

一个更实用的设计顺序

建议优先级通常是:

  1. 先设计好 State
  2. 再处理会话内上下文
  3. 最后再考虑是否真的需要长期记忆

也就是说,很多所谓 memory 问题,本质上其实是 state 没设计好。

常见的 Memory 设计模式

模式 1:对话窗口保留

最简单的方式就是保留最近几轮消息。

优点:

  • 简单
  • 上手快

问题:

  • 长任务容易撑爆上下文
  • 历史信息结构化程度低

模式 2:摘要式记忆

把前面内容压缩成摘要,只保留关键结论。

优点:

  • 节省上下文
  • 适合长会话

问题:

  • 摘要本身可能失真
  • 被压掉的信息可能后面又重要

模式 3:结构化状态存储

把任务进度和中间结果保存在明确字段里。

优点:

  • 可调试
  • 可恢复
  • 适合工作流和 Agent 系统

问题:

  • 设计成本高一点

模式 4:检索式长期记忆

把长期信息存到数据库或向量库,需要时再召回。

优点:

  • 不必一直塞进上下文
  • 适合长期积累信息

问题:

  • 召回相关性很难永远稳定
  • 容易把“知识库检索”误当成“记忆”

Memory 和 RAG 不是一回事

这是一个高频误区。

RAG 解决的是:

  • 如何从外部知识中取回相关内容

Memory 更关注的是:

  • 系统应该记住哪些和当前主体相关的信息

两者可以结合,但不能混成一件事。

例如:

  • 用户偏好更像长期记忆
  • 某篇市场研究报告更像外部知识

设计 Memory 时最应该问的问题

  1. 这条信息是当前任务状态,还是长期信息
  2. 它需要跨会话保留吗
  3. 它如果过期了,会不会误导系统
  4. 它应该完整保留、摘要保留,还是只在需要时检索

如果这些问题不问清楚,memory 只会让系统更乱。

小结

Memory 不是一个魔法模块,而是一套信息保留策略。

在大多数 Agent 系统里,先把状态设计清楚,比急着做长期记忆更重要。

真正要做 memory 时,也要先区分:

  • 当前状态
  • 会话连续性
  • 长期信息沉淀

下一篇建议继续看: