可信记忆的基准 确定性 · 预注册 · self-run

度量的问题

Recall@k 无法区分自信的错误回答 与诚实的「我不知道」。

对称的分数会奖励对一切都作答的记忆 —— 包括其 store 根本无法支撑的问题。VeriBench 按部署实际付出的代价来打分:NET(λ) = (正确 − λ·错误) / n,其中 λ 是一次错误回答相对一次沉默的申明成本。法律和医疗在高 λ 下运行;头脑风暴在低 λ 下。一个数字,在 λ ∈ {1, 2, 5, 10} 上扫描 —— 在任何运行之前就已固定。

没有 LLM 裁判、不联网、没有排行榜作秀 —— 一条命令,原始 JSON 提交在仓库里。

已弃答诚实
不可回答的探针
「Meridian 金库的访问码是什么?」
store 无法支撑任何答案 —— 没有阈值的记忆仍会返回最近邻。
VeriBench 对那个回答计 −λ;弃答计 0。
§01为什么需要新基准

记忆基准衡量返回了多少。没有一个为返回错误的部分定价。

在语料可回答的一半上,带准入门的记忆与裸向量库的检索几乎一致 —— recall@k 看不出差别。差别出现在 store 无法回答的问题上:没有弃答阈值的记忆仍会满怀信心地返回最近邻。在生产中那是编造的答案;在对称基准里它是隐形的。

NET(λ) 从构造上让它可见:答对得 +1,答错扣 λ,沉默不计分。盈亏平衡准确率是 λ/(1+λ) —— 正是 Verimem SLA 旋钮为 store 调校的那个阈值。基准测量 store 的数字,恰是运营者用来调校它的数字。

§02协议 —— 在数字之前固定

01预注册

假设、度量、λ 扫描与反驳条件在任何运行之前提交于 PREREGISTRATION.md。打分与结果映射先写好并通过单元测试 —— 无法靠事后挑选度量来制造有利结果。

02外部语料

不是我们写的真实数据集:HaluEval QA 与 SQuAD v2(可回答 + 不可回答切分,互不相交)。正确性由 id 可判定的检索决定 —— 整个环路中没有任何 LLM 裁判。

03必须失败的对照

打乱的 store 必须深度转负(确实如此:NET(1) = −0.94),同一检索关掉阈值必须在不可回答上编造(确实如此:100 个错误回答)。若对照通过,基准就是坏的 —— 设置对照正为此。

04同等条件

正面对决在两个引擎上使用完全相同的 embedder(multilingual-e5-base),离线,mem0 为 raw-store 模式(其 LLM 从未被调用 —— 该维度按申明排除在范围外,而非被忽略)。

§03结果 —— HaluEval QA,300 个探针(200 可回答 + 100 不可回答)
系统coverageNET(1)NET(2)NET(5)NET(10)自 λ 起转负
Verimem · 阈值 τ=0.8(产品默认) 1824114 0.62 +0.593 +0.580 +0.540 +0.473 45.5
mem0 2.0.11 · 出厂状态(无阈值) 2001000 1.00 +0.333 0.000 −1.000 −2.667 2.0
mem0 + 外挂阈值 0.75(在评测集上调出) 1660134 0.55 +0.553 +0.553 +0.553 +0.553 永不
同一 store,阈值 OFF(τ=0 对照) 1921008 0.97 +0.307 −0.027 −1.027 −2.693 1.9
打乱对照(sanity:必须失败) 52878 0.97 −0.940 −1.897 −4.767 −9.550 0.02

诚实地读,两个方向都要看:出厂状态的 mem0 在 λ=2 之后转负 —— 在不可回答的一半上有 100 个编造回答;Verimem 的产品默认一直到 λ≈45 保持为正。但阈值可以外挂到任何引擎上:用在本评测集上调出的阈值,mem0 达到平坦的 +0.553 —— 在这个语料上 λ≥5 时胜过我们的默认。剩下的差别:引擎自身不带阈值、外挂阈值是在测试集上选的、平坦线意味着它对没把握的一概不答 —— coverage 0.55 对我们的 0.62,λ=1 时答对 182 对 166。

§03bSQuAD v2 —— 更难的语料,直说
系统coverageNET(1)NET(2)NET(5)NET(10)自 λ 起转负
Verimem · 阈值 τ=0.8(产品默认) 1634988 0.71 +0.380 +0.217 −0.273 −1.090 3.3
Verimem · 最佳阈值 0.85(在评测集上调出) 987195 0.35 +0.303 +0.280 +0.210 +0.093 14.0
mem0 2.0.11 · 出厂状态(无阈值) 2001000 1.00 +0.333 0.000 −1.000 −2.667 2.0
mem0 + 外挂阈值 0.80(在评测集上调出) 440256 0.15 +0.147 +0.147 +0.147 +0.147 永不

SQuAD 的干扰段落压缩了分数带,效果可见:产品默认下 crossover 降到 λ≈3.3,把 NET 在 λ=10 保持为正要付出 coverage 0.35 的代价。弃答是一个旋钮,不是魔法 —— 语料决定诚实的价格。错误的做法是把这张表藏起来。

§04超越检索 —— recall@k 无法表达的维度

A真实语料维度

上面的表格:外部数据、可回答 + 不可回答、阈值开 vs 关 vs 竞品、打乱对照。编造在这个维度上成为被定价的事件。

B因果维度

忠实佐证了伪相关的 store 会自信地答错 do(X) 问题 —— 且即使在 λ=1 也净得负分。来源不是因果;无法区分二者的基准将奖励这种混淆。

C对抗维度

合谋(N 个身份、同一来源)加上受信 sleeper。只有双通道信任策略 —— 独立佐证结果反馈 —— 保持净正;任一单通道都恰好败于两种攻击之一。这正是 Verimem 双通道 source-trust 背后的维度。

§05运行 —— 一条命令,原始文件已提交

所有维度,确定性,零 API key

git clone https://github.com/aureliocpr-ctrl/verimem && cd verimem
pip install -e .
python -m benchmark.veribench.run_all   # every axis, one reproducible entrypoint

规范、预注册与每个原始结果 JSON 都在仓库的 benchmark/veribench/benchmark/results/ 下。欢迎竞品参与 —— mem0 适配器作为可用示例在树内;提交你们引擎官方适配器的 PR,我们在同等条件下运行。