← 首页|学术|Temporal Validity on Real Software Histories: Eliminating Stale-Fact Errors in Code-Assistant Memory over GitHub Fixes
cs.SE · cs.AI · cs.CL · cs.LG · 2608.20685 · 2026-08-21

Temporal Validity on Real Software Histories: Eliminating Stale-Fact Errors in Code-Assistant Memory over GitHub Fixes

Neeraj Yadav
💬 标准 RAG 没有"时间"这个概念:一个函数被重命名、一个接口地址迁移、一个依赖被升级后,旧值和新值在向量空间里几乎等距,RAG 分不清谁是当前有效的。这篇论文把此前在合成基准上验证过的确定性 (subject, relation, object) 覆盖式记忆 MemStrata,搬到 707 个真实 GitHub issue 修复上做端到端验证:130 个"干净原子状态迁移"样本上,MemStrata 准确率 0.91 对 RAG 的 0.57-0.59,且把 RAG 36-38% 的"说出过期值"错误率压到接近 0,同时保持和 RAG 相近的检索延迟。

🎯 问题

RAG 没有时间模型 — 陈旧事实被当作现行事实检索
在一次编码会话中,某个事实会随着修复而变化:函数改名、接口端点迁移、依赖版本升级。标准 RAG 用向量相似度检索,旧值和新值往往语义上几乎相同(论文特意构造"marker-free"陈述,新旧句子仅在具体值上不同,没有任何显式的时间标记词),因此检索器无法判断哪一个是当前有效值,经常把已被替代(superseded)的旧值当作答案served 给下游。这是纯粹的检索层失效,不是模型推理能力不足。
与 ghost memory 的关联:这个失效模式和用户此前读过的 A-TMA(三层状态感知记忆架构)中提出的"ghost memory"问题高度同构——两者都指向同一个核心命题:agent 记忆系统的关键缺陷不是"记住了什么",而是"能否判断哪条记忆已经过时"。A-TMA 走的是在检索前/中/后三层注入状态验证的架构路线;本文走的是一条更朴素但更可验证的路线——把事实压缩成结构化三元组,用确定性规则做覆盖(supersession)而非依赖相似度排序,某种意义上是对同一问题的"轻量对照组"式解法。

🔬 方法

MemStrata — 确定性 (subject, relation, object) 覆盖式记忆
此前的 Paper 1 在合成单值基准上验证了这套机制:把事实抽取成结构化三元组,新写入的三元组按 (subject, relation) 键值确定性地覆盖旧值,而不是让新旧事实在同一个相似度空间里竞争检索排名。本文(Paper 2)是端到端真实数据验证:从 SWE-bench Lite + Verified 的 707 个真实 GitHub issue 中,抽取出 130 个"干净原子状态迁移"——即一次修复恰好改变一个可识别的值,从修复前状态迁移到修复后状态,且陈述语句刻意不带时间标记词,逼迫系统只能靠"知道哪个是当前值"而非"读到某个提示词"来作答。
▶ 技术细节
对照组是标准 RAG(相似度检索)以及"RAG + LLM reranker"(用 LLM 对候选结果重排序,试图靠语义理解选出正确的当前值)。评测指标是被迫作答时给出正确当前值的比例(answer accuracy)与给出过期值的比例(stale-serving rate),同时记录端到端延迟。作者明确说明抽取覆盖率的局限:707 个真实修复里只有约 18% 满足"干净原子迁移"这个严格条件,其余修复(涉及多值联动变更、非原子改动等)的抽取方法留给后续工作。

📊 结果

MemStrata 准确率
0.91
标准 RAG 准确率
0.57–0.59
干净原子迁移覆盖率
~18%
RAG 陈旧值发生率
36–38%
MemStrata → ~0,LLM reranker 无改善
检索延迟
~2.1s
vs reranker ~18s
结构性结论比准确率数字本身更值得注意:加一个 LLM reranker 试图靠语义理解纠正陈旧值问题,结果对陈旧值发生率没有改善,说明问题不在"排序不够聪明",而在于相似度检索这个范式本身缺乏"谁是当前值"这个确定性信号——靠更强的语义模型去弥补一个结构性缺失是无效的。MemStrata 用确定性覆盖规则绕开了这个陷阱,同时把延迟压到接近普通 RAG 水平(远快于加 reranker 的 18 秒),说明这不是一个"准确率换延迟"的权衡,而是同时在两个维度上都占优。
研究过程中还发现并修复了一个真实的产品 bug(比较逻辑对大小写/标点敏感度的边界问题),修复后核心准确率结论保持稳定。

与研究方向的关联

这篇论文属于 Tier 2 关注点中的多模态/结构化记忆卫生(memory hygiene)方向,和 duplex agent 核心方向不直接相关,但提供了一个可迁移的诊断范式:任何长期运行的 agent 记忆系统(无论是代码助手还是全双工语音 agent)都会面临"事实随时间失效"的问题。本文用真实软件历史(而非合成基准)验证了确定性三元组覆盖优于相似度检索+reranker 的组合,且强调了方法论上的诚实——只声称覆盖了 18% 的"干净"情形,其余留作未来工作,这种严谨的 scope 界定值得作为同类工作的参考基准。
对 duplex agent 场景的启发:如果未来在全双工交互中引入长期记忆模块,同样会遇到"用户中途改口/更新偏好"导致的陈旧事实被检索问题——本文的确定性覆盖思路可能比依赖相似度排序的方案更适合实时场景(延迟可控,且失效模式可预测)。

原文摘要 Abstract

Retrieval-augmented generation (RAG) has no model of time: when a fact changes across a coding session - a function is renamed, an endpoint moves, a dependency is bumped - RAG retrieves both the old and new value with near-identical similarity and cannot tell which is current, so it serves the superseded value. Paper 1 showed, on synthetic single-value benchmarks, that a deterministic (subject, relation, object) supersession memory eliminates this failure. Here we validate it end-to-end on real software history. From 707 real GitHub issues (SWE-bench Lite + Verified) we extract 130 clean atomic state transitions, a fix that changes one identifiable value from a pre-fix to a post-fix form, and render each marker-free (the stale and current statements differ only in the value). On this set, MemStrata reaches 0.91 answer accuracy versus RAG's 0.57-0.59; and, the structural result, when forced to answer RAG serves the superseded value 36-38% of the time (an LLM reranker does not help) while MemStrata drives this to ~0, at RAG retrieval latency (~2.1s vs ~18s for the reranker). We are explicit about scope: only ~18% of real fixes are clean atomic transitions; extraction coverage of the remaining fixes is deferred to follow-on work. A real product bug surfaced and was fixed during the study.
Agent Memory RAG Temporal Validity Code Assistant cs.SE
ArXiv 2026-08-25 日报精读 · 返回简报