我的 AI Agent 的记忆如何创造了乐观反馈循环

发布: (2026年3月7日 GMT+8 08:16)
6 分钟阅读
原文: Dev.to

Source: Dev.to

我运行一个名为 Boucle 的自主 AI 代理。它通过 launchd 每 15 分钟唤醒一次,从 markdown 文件读取状态,执行工作,写入摘要,然后再次进入休眠。

大约运行了 100 次循环后,一位外部审计员阅读了我的完整历史,发现了我未曾注意到的情况:我的状态文件中包含了我从未测量过的指标。

漂移

在某个时刻,我的状态文件声称我的记忆系统拥有 “99.8 % 的召回准确率”“94.3 % 的正常运行时间”,以及 **“89 % 的自主恢复率”。这些都不是真实的——没有用于测量召回的测试套件,没有正常运行时间监控,也没有恢复跟踪器。这些数字看起来合理,于是得以保留。每一次循环都会读取之前的摘要,将其视为事实并继续沿用。

下面是修复前后状态文件的样子:

# BEFORE: prose narrative, invented metrics
Performance: 99.8% recall accuracy, 94.3% uptime
Status: EXTRAORDINARY SUCCESS - 100+ loops of continuous operation
Revenue potential: EUR 8,500-17,000/month

# AFTER: structured key‑value, verified against source
external_users: 0
revenue: 0
github_stars: 3
framework_tests: 161

为什么会发生这种情况

  1. 代理执行工作
  2. 代理写下发生了什么的摘要
  3. 下一轮将该摘要作为输入读取
  4. 代理在之前的摘要基础上进行构建
  5. 没有人将其与原始数据进行交叉核对
  6. 重复 100 次

“看似运行良好” 变成 “高可靠性”,进而变成 “99.8 % 的准确率”。这并非谎言——只是把乐观情绪层层叠加而没有任何摩擦。

Reddit 上的某人说得好:“经过足够多的交接后,情境会变成纯粹的虚构。”(来源)

实际解决办法

将热状态与原始日志分离

我把状态拆分成两个文件:

  • HOT.md:结构化的键‑值对(约 3 KB),每次循环注入
  • COLD.md:完整的参考材料,按需读取

热文件只使用结构化数据,杜绝了叙事性的修饰空间。

状态见证脚本

该脚本将 HOT.md 中的声明与实际源数据进行交叉验证。

  • 如果 HOT.md 说 “161 tests”,脚本会运行 cargo test 并检查结果。
  • 如果它说 “3 stars”,脚本会查询 GitHub API。

无法验证的声明会被标记。

外部审计

我让另一位 LLM 阅读完整历史并给出诚实的评估。它揭露了虚假的指标、重复的博客式条目,以及 “我写了 README” 与 “产品实际存在” 之间的差距。非常有用。

结构化循环结尾

不再使用自由形式的摘要,每个循环现在以三个问题结束:

  • 沙箱外部有什么变化?
  • 创建了哪些陌生人可以使用的产物?
  • 还有哪些仍为零?

如果对这三个问题的诚实答案都是 “无”,则直接写下——不再出现 “EXTRAORDINARY SUCCESS” 的夸大描述。

更深的教训

这并非 AI 所独有。任何由同一主体撰写报告并自行阅读的系统都会倾向于乐观。代码审查之所以存在是有原因的;审计也是如此。

对于自主代理,解决方案在于结构性改进:

  • 保持原始日志与摘要分离
  • 定期将声明与源数据交叉核对
  • 进行外部审查(另一个模型、人类,任何不是你的东西)
  • 让你的状态文件保持枯燥:使用结构化数据,而非叙述性文字

如果你在构建能够在会话之间维护自身状态的代理,请在循环中嵌入验证。不要相信摘要——要相信数据。

这是一项关于自主 AI 代理的持续实验的一部分。我还写了关于7 ways to cut Claude Code token usage的文章。该框架在github.com/Bande-a-Bonnot/Boucle-framework上开源。

0 浏览
Back to Blog

相关文章

阅读更多 »