01预注册
假设、度量、λ 扫描与反驳条件在任何运行之前提交于 PREREGISTRATION.md。打分与结果映射先写好并通过单元测试 —— 无法靠事后挑选度量来制造有利结果。
度量的问题
对称的分数会奖励对一切都作答的记忆 —— 包括其 store 根本无法支撑的问题。VeriBench 按部署实际付出的代价来打分:NET(λ) = (正确 − λ·错误) / n,其中 λ 是一次错误回答相对一次沉默的申明成本。法律和医疗在高 λ 下运行;头脑风暴在低 λ 下。一个数字,在 λ ∈ {1, 2, 5, 10} 上扫描 —— 在任何运行之前就已固定。
✓ 没有 LLM 裁判、不联网、没有排行榜作秀 —— 一条命令,原始 JSON 提交在仓库里。
记忆基准衡量返回了多少。没有一个为返回错误的部分定价。
在语料可回答的一半上,带准入门的记忆与裸向量库的检索几乎一致 —— recall@k 看不出差别。差别出现在 store 无法回答的问题上:没有弃答阈值的记忆仍会满怀信心地返回最近邻。在生产中那是编造的答案;在对称基准里它是隐形的。
NET(λ) 从构造上让它可见:答对得 +1,答错扣 λ,沉默不计分。盈亏平衡准确率是 λ/(1+λ) —— 正是 Verimem SLA 旋钮为 store 调校的那个阈值。基准测量 store 的数字,恰是运营者用来调校它的数字。
假设、度量、λ 扫描与反驳条件在任何运行之前提交于 PREREGISTRATION.md。打分与结果映射先写好并通过单元测试 —— 无法靠事后挑选度量来制造有利结果。
不是我们写的真实数据集:HaluEval QA 与 SQuAD v2(可回答 + 不可回答切分,互不相交)。正确性由 id 可判定的检索决定 —— 整个环路中没有任何 LLM 裁判。
打乱的 store 必须深度转负(确实如此:NET(1) = −0.94),同一检索关掉阈值必须在不可回答上编造(确实如此:100 个错误回答)。若对照通过,基准就是坏的 —— 设置对照正为此。
正面对决在两个引擎上使用完全相同的 embedder(multilingual-e5-base),离线,mem0 为 raw-store 模式(其 LLM 从未被调用 —— 该维度按申明排除在范围外,而非被忽略)。
| 系统 | ✓ | ✗ | ∅ | coverage | NET(1) | NET(2) | NET(5) | NET(10) | 自 λ 起转负 |
|---|---|---|---|---|---|---|---|---|---|
| Verimem · 阈值 τ=0.8(产品默认) | 182 | 4 | 114 | 0.62 | +0.593 | +0.580 | +0.540 | +0.473 | 45.5 |
| mem0 2.0.11 · 出厂状态(无阈值) | 200 | 100 | 0 | 1.00 | +0.333 | 0.000 | −1.000 | −2.667 | 2.0 |
| mem0 + 外挂阈值 0.75(在评测集上调出) | 166 | 0 | 134 | 0.55 | +0.553 | +0.553 | +0.553 | +0.553 | 永不 |
| 同一 store,阈值 OFF(τ=0 对照) | 192 | 100 | 8 | 0.97 | +0.307 | −0.027 | −1.027 | −2.693 | 1.9 |
| 打乱对照(sanity:必须失败) | 5 | 287 | 8 | 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。
| 系统 | ✓ | ✗ | ∅ | coverage | NET(1) | NET(2) | NET(5) | NET(10) | 自 λ 起转负 |
|---|---|---|---|---|---|---|---|---|---|
| Verimem · 阈值 τ=0.8(产品默认) | 163 | 49 | 88 | 0.71 | +0.380 | +0.217 | −0.273 | −1.090 | 3.3 |
| Verimem · 最佳阈值 0.85(在评测集上调出) | 98 | 7 | 195 | 0.35 | +0.303 | +0.280 | +0.210 | +0.093 | 14.0 |
| mem0 2.0.11 · 出厂状态(无阈值) | 200 | 100 | 0 | 1.00 | +0.333 | 0.000 | −1.000 | −2.667 | 2.0 |
| mem0 + 外挂阈值 0.80(在评测集上调出) | 44 | 0 | 256 | 0.15 | +0.147 | +0.147 | +0.147 | +0.147 | 永不 |
SQuAD 的干扰段落压缩了分数带,效果可见:产品默认下 crossover 降到 λ≈3.3,把 NET 在 λ=10 保持为正要付出 coverage 0.35 的代价。弃答是一个旋钮,不是魔法 —— 语料决定诚实的价格。错误的做法是把这张表藏起来。
上面的表格:外部数据、可回答 + 不可回答、阈值开 vs 关 vs 竞品、打乱对照。编造在这个维度上成为被定价的事件。
忠实佐证了伪相关的 store 会自信地答错 do(X) 问题 —— 且即使在 λ=1 也净得负分。来源不是因果;无法区分二者的基准将奖励这种混淆。
合谋(N 个身份、同一来源)加上受信 sleeper。只有双通道信任策略 —— 独立佐证加结果反馈 —— 保持净正;任一单通道都恰好败于两种攻击之一。这正是 Verimem 双通道 source-trust 背后的维度。
所有维度,确定性,零 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,我们在同等条件下运行。