不要再把 Agent 记忆一股脑塞进 Prompt 了

大多数开发者构建 Agent 循环的方式是把所有内容都追加到下一个 Prompt 中。

你添加先前的观察结果、工具调用和推理轨迹。你不断添加数据,直到 Prompt 变成一个“垃圾抽屉”。模型看到的内容变多了,但你却失去了控制。你不再清楚哪一段记忆导致了某个特定的决策。

一篇名为 AgenticSTS 的新论文提出了一条不同的路径。它将记忆视为一种接口,而不是对最大上下文窗口的争夺。

该论文使用游戏 Slay the Spire 2 作为测试平台。这个环境需要进行数百次战略决策,它不是一个简单的聊天机器人。

核心思想是:记忆是一份关于未来决策被允许看到什么的契约。

作者不再使用原始转录文本,而是通过五个特定层级来构建全新的 Prompt:

  • 固定协议指令
  • 当前状态与动作模式 (schemas)
  • 检索到的游戏规则
  • 过往运行的摘要
  • 触发式策略技能

这种结构改变了一切。你可以检查、冻结或禁用每一个层级。你将记忆从一堆数据转变为经过筛选的证据。

许多生产环境中的 Agent 失败并非模型本身的失败,而是上下文的失效。Agent 会将旧状态与新状态混淆,或者带着过时的反思继续运行。如果你的唯一策略就是追加更多文本,那么调试起来就像在做考古工作。

一个类型化的记忆接口能为你提供可供对比的依据。

对于长期运行的 Agent 来说,巨大的上下文窗口是一个陷阱。它会变成事实、过时事实和失败尝试的混合物。窗口越大,就越容易把沉积物误认为是记忆。

要构建更好的 Agent,请遵循以下模式:

  • 将稳定的指令与当前状态分离
  • 将规则保留在检索层中
  • 将经验存储为显式记录,而非聊天残留
  • 将重复的修复转化为触发式技能
  • 确保每个记忆层在测试时都是可移除的

如果你无法关闭某个记忆层,你就无法知道它是否真的有帮助。你只知道这一整堆东西有时能奏效。

不要再把 Agent 记忆当作一个“凭感觉”的层。要转向一个你确切知道下一项决策输入了什么、这些输入来自何处以及如何禁用它们的系统。

如果你的 Agent 无法解释它被允许记住什么,那它就不具备记忆。它只是一个带地下室的 Prompt。

Source: https://dev.to/komo/stop-dumping-agent-memory-into-the-prompt-58ka

Optional learning community: https://t.me/GyaanSetuAi