我的代理一直在记住不真实的事情——4次空跑之后,这是将错误记忆归零的门控

Reddit r/AI_Agents 工具

摘要

一位代理构建者描述了一种记忆层,通过要求逐字源引用并追踪事实何时成为真,来防止虚假事实,尽管存在提取失败,但在压力测试中实现了零错误记忆。

引发这个问题的漏洞:一个代理自信地使用了一个过时的账户余额($12.69),而该余额早在几天前就被更正为$30。没有任何幻觉——数字是真实的,只是不再正确。这是代理记忆中最可怕的失败类别,因为每个检索系统都会乐此不疲地提供它:几乎所有系统都认为“最近写入的”就是“最真实的”。因此,我围绕两条规则构建了我的代理记忆层:每个事实都追踪**它何时成为真**,与它最后被提及的时间分开。一个关于旧真相的新句子不能覆盖当前值。一个确定性的门控决定什么被存储。一个事实必须携带其源文档的逐字引用,否则被拒绝;任何无日期或存在争议的事实将被保留供人工审查,而不是被断言。LLM只负责提取——纯代码进行所有判断。下游的代理只能陈述通过门控的事实。今天,我对提取端进行了压力测试,使用了50个密集的自身操作日志块(故意使用小型本地模型,因此提取器是瓶颈)。它失败了四次,每次运行一种方式:首先模型为事实发明了自己的名称,然后它将我的关键定义复制回作为“值”,接着它复制了我给出的提示词,升级到更大模型后,它开始转述引用——正确的值,重新构建的措辞,而精确子串检查拒绝了这一点。今晚运行的当前修复方案:模型只返回值加上一个简短的位置短语,确定性的代码找到精确跨度并自己获取逐字引用。停止信任模型去复制粘贴;让代码处理逐字部分。让所有四次失败感觉像胜利的部分是:毒化数据全天保持为零。没有一条虚假事实进入任何一次运行的记忆。每种失败模式都以“拒绝”结束,从未“存储了错误的东西”。对于依靠记忆行动的代理——发送东西、预订东西、回答客户——我每次都会选择提取不足,而不是自信的谎言。今晚它回放约640块真实日志,整夜运行,并针对66个手工冻结的金标准事实自我评分。很乐意分享结果(包括如果失败)以及门控设计的更多细节,如果大家感兴趣的话。给代理构建者的问题:你们如何处理旧值重新浮现在新文档中的问题?基于新鲜度权重的检索会使情况**更糟**,而且我很少看到在存储/检索选择之外讨论这个问题。
查看原文

相似文章