乐于分享
好东西不私藏

AI助手为什么会“记错”?旧事实和新事实混在了一起

AI助手为什么会“记错”?旧事实和新事实混在了一起

长期记忆让 agent 能保留用户偏好、项目决策和历史对话,但这些事实会变化。一个系统可能同时保存旧记录、当前记录和过渡记录,并在检索与回答时混淆它们。新加坡国立大学团队将这类状态协调失败称为幽灵记忆(ghost memory)。

幽灵记忆不是某个旧记录的存在,而是一种状态协调失败——旧状态、当前状态和过渡记录在记忆库里并存,检索时混在一起,回答时仍没有清晰的角色区分。干扰项并非不相关的文档,而是一条来自错误状态的真实记忆。

加个时间戳就能解决?问题比想象中更深

当前主流的长记忆系统大多在某些层面做了处理:有的用时间戳标记每一条记忆,有的用知识图谱编码实体和关系的演化,有的引入会话序号和近因信号。但这些手段带来的表面提升,可能掩盖了记忆系统在不同层面的深层断裂。

在团队构建的冲突密集测试集LTP上,以Graphiti/Zep作为底层记忆宿主看到的对比非常直观。一条旧地址记录和一条新地址记录都带着时间信息,语义检索能把两者都捞上来,证据覆盖率可以高达0.812——但最终冲突准确率只有0.425。同一个证据池,挂载A-TMA之后把状态标签暴露给最终回答环节,冲突准确率抬到了0.725。

时间戳和图标签有帮助,但并不能保证最终回答的状态正确性。一个回答出错,可能根子在记忆库里:旧事实和新事实虽然都在,但状态标注缺失或被默认视为“活着的”事实。也可能根子在检索环节:正确的旧事实和新事实都回到了候选池里,但排序把错误状态推到了最前面。还可能根子在回答环节:语言模型看到了新旧两条证据,但把两者揉成一个看似合理却状态错乱的回答。

[图1:在不同记忆宿主和覆盖方案下,时间戳/图谱标注证据与显式状态角色证据之间的冲突准确率对比] 在LTP的profile000上,仅依赖时间戳和图图谱标注的证据支撑高但对冲突准确率改善有限,而挂载A-TMA后通过暴露状态角色将冲突准确率从0.425提升至0.725。

传统的单分数评估,看不见这些层级的断裂。一个“答对了”的结果,可能只是因为回答模型从残缺的上下文里猜对了,而记忆库和检索其实已经失败。一个“答错了”的结果,可能是检索明明把正确证据排在了前面,但回答模型缺乏状态信号,主动选了看起来更“新”却属于错误状态的那条记忆。三层解耦评估的意义正在于此:把记忆库维护、检索级证据构建、回答级状态解析拆开看,才能诊断问题究竟出在哪一层。

给记忆打上“时态标签”

A-TMA的定位不是新造一个记忆系统,而是一个状态感知覆盖层,可以叠加在现有记忆宿主之上。它在三个层级分别介入。

在记忆库层,新事实写入时不盲目删除或覆盖旧事实。一个轻量级的“哨兵”模块负责识别可能与已有记录共享同一状态槽的写入,当双门控评分判断“主题高度相关但逻辑立场可疑”时,把这一对记录推送到审计模块。审计模块裁决后执行提交:旧记录保留但被标记为“已取代”,新记录标记为“当前”,两者之间建立取代关系链接。如果新旧记录属于共存关系(比如某项偏好只在特定条件下覆盖默认偏好),则不强制建立取代关系,而是附加作用域标记。这样既保留了完整历史,又防止已过时的事实默认保持“存活”状态。

在检索层,查询首先被推断出一个状态视图——当前查询、历史查询、过渡查询或中性查询。宿主系统的语义检索结果作为种子池,随后从种子记录的状态链接向外扩展,把可能回答问题的新状态记录或其前驱记录拉进候选池。候选池经过带视图偏好的排序,或被一个受控的重排序控制器在前几位做微调,最终产生一个状态对齐的证据包。

在回答层,每个进入最终上下文的记录都被打上标签:当前记忆、历史记忆、过渡记忆或过渡链接记忆。这些标签连同可选的时间字段一起,串行化后交给回答模型,并明确指示模型按查询要求的状态视图进行解析,不允许模型自行把“现在”的记录当作“过去”的答案。

[图2:A-TMA框架图] 幽灵记忆在记忆库、检索通路和生成器之间让当前、过渡和已取代的事实混杂。A-TMA将这条管道拆分为记忆库状态维护、状态对齐的检索和带显式状态角色的问答,使每一阶段都可以在最终答案生成前得到诊断和优化。

在大量新旧冲突中,冲突准确率绝对提升了0.240

评估工作在两个基准上展开。LTP是团队专门为测试幽灵记忆构建的冲突密集测试集,包含10个用户画像、800个探测问题,每个画像预埋了40个状态变更槽位,比如工作、住址、人际关系、宠物、爱好、数值类偏好等,每个槽位同时保留旧状态记录、新状态记录和过渡记录,直接评测当前状态和历史状态两类问题。LoCoMo则是一个长对话记忆基准,包含10段对话样本、1986个问答对,用来测试泛化能力。

在LTP全量测试中,Graphiti/Zep挂载A-TMA后,冲突准确率从0.480提升到0.720,绝对提升0.240。而在LoCoMo上,时间推理F1指标从0.0295提升到0.1705,平均F1从0.0809提升到0.1556。

[表2:LTP全量评估结果(10个画像,800个裁判打分探查,使用70B裁判模型)] 表格前三列标记各方法是否显式处理状态感知的记忆库维护、状态对齐的检索及回答端的状态解析。指标列按评估层级分组:记忆库级别(库共存、库角色)、检索级(证据支撑)和问答级(问答准确率、冲突准确率、事实准确率、裁判评分)。+A-TMA行中的彩色差值表示相对基础方法的绝对变动。

[表3:LoCoMo全量评估结果(单跳、时间与开放域问题)] 指标为F1、BLEU-1和裁判问答准确率;彩色差值对比+A-TMA与基础行。

[表4:LoCoMo全量评估结果续(多跳、对抗性问题与平均分)] 排名基于三项平均指标的平均排名,数值越低越好。挂载A-TMA在某些宿主和指标上带来了提升,但增益并非在整个LoCoMo上均一出现。

值得关注的是,增益并不是在所有宿主和指标上均一出现。在LTP上,InsideOut这类把对话压缩演化成用户画像的系统,在状态变更后容易丢失对旧状态的访问,挂载A-TMA后准确率从0.117拉到0.662。在LoCoMo上,AriadneMem在词重叠指标上保持最强,而Graphiti/Zep挂载A-TMA主要在时间维度的回答质量上表现出更清晰的提升。结论的边界是明确的:当宿主能够保留足够的证据,但没有自行对齐记忆库状态、检索状态和回答状态时,A-TMA能提供最清晰的增益。

这不是万能药,但三层拆开看这件事本身就很重要

A-TMA的价值——连同它的局限性——都写在了定位里。它是一个覆盖层,不能凭空补齐宿主从来没捕捉到的事实。它不替代检索器、不改造回答模型,而是把状态信号从记忆库一路贯通到回答环节。

对工程实践而言,评估一个长期记忆系统,不能只看最终回答的准确率。正确回答可能掩盖记忆库或检索层的问题,错误回答也可能来自不同层级。把记忆库维护、状态对齐检索和回答解析拆开评估,才能判断下一步该优化哪里,并分辨覆盖层的增益来自哪一环。

📄 原文标题

A-TMA: Decoupling State-Aware Memory Failures in Long-Term Agent Memory

🔗 原文链接

https://arxiv.org/abs/2607.01935