为什么衰退不是代理记忆事实的正确模型(以及写入时替代的实际样子)
摘要
文章批评了将事实过时性视为代理记忆中相关性衰减的做法,主张在写入时按类型拆分记忆,并对事实使用写入时矛盾检查而非衰减,引用了 Mem0 的实现。文章警告说,衰减适用于情景数据但不适用于事实,这可能导致代理自信地陈述矛盾的信息。
.:: 本周我一直在思考代理记忆中的一个特定失败模式:将事实过时性视为相关性衰减。我见过的大多数记忆栈(包括我们早期的版本)都以相同的方式嵌入所有内容,并用一条衰减曲线对它们进行老化。这对于情景数据(例如 Slack 消息、一次性事件)来说效果很好,三周后没有人关心确切的措辞。但对于事实和偏好来说,这就不适用了,因为它们不会逐渐消退。客户的账户层级在更改六周后不是60%的真实性。它要么仍然正确,要么就是错误的,没有中间状态。在不同实现中反复出现的修复方法是:在写入时按类型拆分记忆(情景/语义/程序性是一个合理的起始拆分),并对语义事实运行写入时矛盾检查,而不是使用衰减函数。Mem0 几个月前发布了这个方案的一个具体版本。每个新事实都会经过四种操作之一(ADD/UPDATE/DELETE/NOOP),与现有的相似记忆进行比较,这样矛盾在进入时就被捕获,而不是一直存在于索引中,直到检索时同时浮现两个版本,模型随机选择一个。容易被低估的一点是:大多数关于记忆的文章都集中在检索上(重排序器、混合搜索、分块)。而写入路径才是实际在生产中出问题的地方。第一周你不会注意到缺少替代检查;但在第三到第六个月,当代理在同一个对话中自信地对同一个客户说出两种不同的事情时,你就会发现了。我的看法是:衰退和替代不是竞争策略,它们适用于不同的数据。TTL/衰减用于情景噪声,写入时矛盾检查用于事实。将一种视为另一种的替代品,正是导致“对一个一周前已更改的计划层级有70%的自信”这类 bug 的根源。好奇其他人是怎么处理这个问题的。你们是进行写入时矛盾检查,还是依赖时效性/衰减并希望它足够好?如果你们被“堆叠矛盾”的失败所困扰,是什么 bug 报告促使你们修复它的?
相似文章
当检索不够用时:智能体记忆中的过时事实
本文表明,仅检索到正确事实对记忆智能体来说是不够的,因为一条过时的竞争性陈述对准确率的损害程度超过了同等规模的无关证据。该结论基于 MemoryAgentBench 的 FactConsolidation 任务,并使用 Qwen2.5 和 Qwen3 模型进行了评估。
无评估可捕捉的智能体失败模式:使用缓存的过时事实
讨论AI智能体可靠性中的一个盲点:缓存在获取时是真实的事实,但在使用时已经过时,导致一致但不正确的行为。提出将一致性(与源匹配)与时效性(源目前仍然真实)分开,并询问社区如何处理这个问题。
测试了小模型在对话中能记住一个事实多长时间。记忆失败模式对智能体来说是一个真正的问题,而且这并非我所预料的。
一位开发者测试了小型边缘模型(LFM2.5、Gemma 变体)在多个对话轮次中保持一个事实的能力,发现模型常常自信地否认知道仍在上下文中的信息,这给智能体架构带来了信任问题,并暗示了记忆与格式规范之间的权衡。
每个智能体记忆系统都用召回率做基准,却几乎没人检查记忆是否仍然真实
本文认为,智能体记忆系统的评估只看召回率,而不看召回的事实是否仍然为真;并提出一个“过时正确性”(correctness under staleness)基准,结果显示向量存储在 68% 的情况下会返回过时事实。
开始思考“代理记忆”是错误的首要框架
作者认为“代理记忆”是错误的首要框架,因为它混淆了工作状态和持久记忆,导致调试问题。作者主张将混乱的工作状态(应过期)与具有来源和权威的严格持久记忆分开。