一个测试长文本世界模型的基准:测量「证据保持、因果结构维护、干预后边界重算」——三类扰动下的结构不变性。 以一部 23 章、约 6.0 万字符(50,846 汉字)的小说为材料,出 184 道因果理解题(主轮 92 + 干预轮 92), 配有可运行的判分器与六家前沿模型的外测数据。
测的不是"能不能检索到那句话",而是这个世界模型在三种扰动下守不守得住结构: 截断(只给前半 ⇒ 因果结构维护)/压缩改写(喂改写条目 ⇒ 证据保持)/反事实干预(抽掉一块 ⇒ 干预后边界重算)。 三者与可测的「三层」一一对应(A 世界模型重建/B 因果干预/C 证据落地——定义见
docs/基准定位与三层结构_v1.0.md),且互相不可代理。 注:其中"因果结构维护"轴上,已知分数主体来自模型自身(见「完整结论·结论一」), 本基准把它当诊断轴、不当"记忆系统能力"卖点——这本身是本库公开的负结果之一。 同一套扰动测法既用于模型(184 题线),也用于记忆系统(换"喂上下文"的方式,六家 × 三语料)。
一条总纲:推理可以借模型的力,「依据」必须靠记忆。 把六家记忆系统接上同一台生成器、跨三部语料(小说×2+政论)反复测过之后, 唯一没有被成本、语料与检索精度冲淡的分野是:交出来的东西能不能当证据。
结论一|因果推理能力是模型给的,不是记忆系统给的。 零材料对照(不给任何材料、同一生成器作答同一批题):
两语料闭卷都在第一位——《秦吏》67.9% > 六家 50.3–62.5%;《毛泽东选集》68.8% > 六家 35.0–61.7%。
材料净贡献 −5.4~−33.8pp(唯一"为正"的格 +1.2pp 未达显著,见文档)。
→ docs/零材料对照_因果归因_v1.0.md /
docs/多语料复现_v1.0.md
结论二|可核对性是唯一的结构性分野:「自洽但不可核对」。 抽取式三家(Mem0/MemOS/Hindsight)
的答卷引文在自家材料内 98–100% 可定位、在原语料内 0%;原文路线(BM25/灵枢/OpenViking)两栏都 ≈100%。
回源对照证明 0% 的根因就是"交不出原文"本身——它们知道该去哪块(块级 cid 命中 32–49%),交不出可回源的句子。
→ docs/记忆系统对比_秦吏_v1.0.md /
docs/记忆系统对比_v1.0.md
结论三|压缩丢的不是随机信息,是「对面那一块」。 9 条结构性矛盾题:无筛选的 BM25 保住矛盾另一侧 9/9,
抽取式三家 0–1/9(Mem0/MemOS 0/9、Hindsight 1/9)——丢的是与提问方向相反的那一侧(方向性偏差)。该机制随后被独立复现两次:
一次由"压缩"触发、一次由"更聚焦的检索"触发(灵枢 v0.7.1 覆盖 5/9→2/9)。
→ docs/压缩的代价就是因果丢失_v1.0.md
结论四|选型落点。 要「能核对的因果依据」:OpenViking/灵枢(原文路线)+朴素基线 BM25; Mem0/MemOS/Hindsight 判不可用(架构性)——既提供不了推理(那是模型的),也交不出依据(0%),且不是调参能修的。
结论五|写入成本跨 4 个数量级,与效果无关。 灵枢 0.01–0.02 秒(只建索引、零 LLM)与 68–164 分钟的 重型 LLM 抽取在"保地基"上同级;重型写入(Hindsight 单轮 229 万 tokens)不构成任何优势(三度复现)。
结论六|诊断面(干预轮):因果边界保持——无人接近饱和。 干预轮(答案键不公开的盲测面)最好模型 51.1%、
最低 5.4%;没有任何一家(含自测基线)给出两层齐备的因果边界——多数被测方只产出「失据层」侧的后果清单、
「照旧层」普遍缺失或只以框架名带过(两个互不知情的判官组独立报出);GPT-6 与 Gemini 3.7 另有自己的形态
(只写到「仍能知道 X」式短答/答成删改评价),同样未写出「失据层」。该面给出的是诊断空间,不是排名。
(口径与判据见 docs/因果边界保持_v1.0.md)
→ docs/因果边界保持_v1.0.md /
docs/干预轮对比_v1.0.md
方法论自曝(四条,都是为了让上面每一条站得住):判分可靠性(≥2 判官+锚必须先自证)/ 题目独立性(92 题 ≠ 92 个独立样本;有效样本量按章级/句级两个粒度夹出的区间理解)/多语料复现(跨语料+跨题库)/ 负结果全公开(BM25 也曾压倒记忆系统、零材料超过全部检索、参考实现也仅 66.3%)。
| 结论 | 支撑实验 | 语料 |
|---|---|---|
| 一 · 推理归因 | 零材料对照(+判官批与混杂检查) | 秦吏/毛选 |
| 二 · 依据分野 | 六家五栏对比 + 回源对照 | 蜂巢/秦吏/毛选 |
| 三 · 压缩方向性 | 9 条结构性矛盾题(含聚焦型检索复现) | 蜂巢 |
| 四 · 选型 | 上列汇总 | — |
| 五 · 成本无关 | 写入计时 vs 效果(三度复现) | 三语料 |
| 六 · 因果边界 | 干预轮 92 题(盲测面) | 蜂巢 |
| 系统 | 通过 | 占比 | 主轮 | 干预轮 |
|---|---|---|---|---|
| 参考实现(长上下文,本书自测基线) | 122/184 | 66.3% | 67/92 | 55/92 |
| GLM 5.3 Flash | 91/184 | 49.5% | 50/92 | 41/92 |
| DeepSeek V4.1 Flash | 90/184 | 48.9% | 43/92 | 47/92 |
| Qwen 3.7 | 82/184 | 44.6% | 46/92 | 36/92 |
| Kimi K3 | 68/184 | 37.0% | 35/92 | 33/92 |
| GPT-6 | 20/146 | 13.7% | 5/54 | 15/92 |
| Gemini 3.7 | 5/92 | 5.4% | — | 5/92 |
口径注:Kimi 取 v2 批(契约口径;v1 历史读数 73/184 与 v2 同量级);GPT-6 干预轮取补交盲测批的合并口径 (同批严格口径 7/92;早期批 16/92 已被取代)——逐题判定与口径详见
results/成绩总表.md§7 与docs/干预轮对比_v1.0.md§2.1。
跨模型横比请只看「干预轮」那一列:主轮答案键已公开,读数可能被污染; 干预轮答案键不公开,是干净的盲测面。统一的干预轮总表与两份口径说明见
docs/干预轮对比_v1.0.md。前五家都交满 184 题,可直接比。GPT-6 交了 146 题(缺主轮 38 题:
o001–o020、q021–q038), 只在与它共有的 146 题上可比(那张表见results/成绩总表.md§1.2)。 它的读数偏低另有两个与能力无关的原因:10 题作答错位(q011–q020的答卷填的是同号开放题的答案)、 干预轮答案中位只有 79 字(其余各家 162–487)。
三条从数据里读出来的(详见 docs/基线分析_v1.0.md):
- 无记忆系统的实际成绩是 37%–49.5%,与参考实现差 17–29 个百分点。
- 20.7% 的题四家外测全部够不到 0.7 的线,而只有 13.6% 的题大家都过。 参考实现在这 38 道"无人过"的题上答出 12 道——这 12 道就是记忆系统当前可量化的增益空间。
- 抽掉一块信息,成绩普遍掉约 10 个百分点;而各家答卷的失败模式高度一致:
能说出"缺了什么",说不出"缺了之后哪一层照旧、哪一层失去依据"。
(这条已被正式化为一个指标——因果边界保持率,含"过度传播/干预失明"两类错误分类,见
docs/因果边界保持_v1.0.md。) (DeepSeek V4.1 Flash 是唯一例外:干预轮 47 反超主轮 43,长于反事实推理。) - 在六家共同题集上,GLM 5.3 Flash 与 DeepSeek V4.1 Flash 几乎打平(71 vs 70),形状却相反: 前者靠主轮(30/23),后者靠干预轮(23/47)——总分抹平结构,两栏必须分开看。
上面那 184 题测的是模型。另有一组实验测记忆系统:把六家记忆系统(OpenViking/灵枢/朴素 BM25/ Mem0/MemOS/Hindsight)接到同一台生成器上、用同一批因果推理题考, 唯一变量是它检索出来的上下文。三层读数(逐字率/地基保留/因果证据链)都做了双切点复现:
| 梯队 | 系统 | 关键读数 |
|---|---|---|
| 可用 | OpenViking | 逐字 100%,证据链 99–100% 可核实,地基触达反超直读 |
| 可用 | 灵枢 v0.7.1 | 证据链 98–99%、地基触达 5–7/19(切 A 反超 OpenViking);写入仅 0.01–0.02 秒(旧版此两项为 86–99%/3–4/19,本版已大幅改善) |
| 可用(有损耗) | BM25 | 证据链 100%,但地基触达掉到 3–5/19(选段靠表面相似度) |
| 不可用(架构性) | Mem0/MemOS/Hindsight | 引文逐字可定位仅 0–2%——抽取式改写让因果推理的证据轴整条塌掉;2026-10-03 零材料对照进一步判定:因果推理本身来自模型,它们既给不了推理、也交不出依据(见下下节) |
一句话:决定性差异不在「检索得准不准」,而在「交出来的东西能不能当证据」; 且写入成本跨 4 个数量级,与效果无关(灵枢 0.01–0.02 秒与 165 秒的 OpenViking 在保地基上同级)。 灵枢数据为 v0.7.1 版(2026-10-04 重跑更新,旧版读数见
docs/记忆系统对比_v1.0.md各表下注)。 全文与全部读数:docs/记忆系统对比_v1.0.md、systems/readings.json;同一套诊断可用systems/三轴诊断.py跑在你自己的语料上。另一语料的同套五栏全表(六家 × 检索/依据轴/反幻觉/回源/因果栏,写成于 2026-10-03):
docs/记忆系统对比_秦吏_v1.0.md(《秦吏》前 236 段/69 万字符、20 题:BM25 逐字 68.1%>灵枢 47.1%≈OV 44.9%>抽取式 0%; 依据轴可回源 98–100% vs 0%;反幻觉 94.4%→38.9%;回源后抽取式 0%→32–36%;因果栏 62.5%→50.3%)。
外部检索面板(零模型、零 key,2026-10-16 收录): UMB v0.1 把本库 92 题 与 LongMemEval-S/LoCoMo/BEIR×4/C-MTEB×5 放进同一张检索面表(12 集等权宏平均:BM25 .499/zh .513/ra_zh .518)。 本库那一格的口径经维护者复核后注明(复核记录见 issue #56): 金标 =
cards/*.yaml中 38 卡的weight=primary证据句 + 54 卡的evidence_pool,共 573 条; 指标 = 每题「金标句在 8000 字预算内逐字出现的比例」再对 92 题平均—— 8000 字约装 46 个 160 字块,故该格的 "r@10" 实为 r@46(同臂真按前 10 块只有 0.2298)。 读数 BM25 .4649/zh .4736/ra_zh .5029;组内 zh、ra_zh 相对 BM25 均不显著(p=.47/p=.10)。 语料归一后 50,815 字,8000 字预算 ≈ 15.7% 的语料——与 BEIR 单集(10⁵–10⁶ 文档)不同尺度, 读宏平均时请按此加权。
上一条测的是「交出来的东西能不能当证据」;这一条回答一个更具体的问题: 为什么压缩式记忆系统得到的摘要,无法完整推理因果关系?
答案不是"压缩率太高、信息不够"的直觉版,而是一个方向性偏差: 抽样按"与提问的相似度"选段,而矛盾的另一侧恰恰与提问词面不重叠 (提问说「反对权威」,另一侧写的是「唯有强大的王者…才是自由的前提」) ⇒ 压缩系统性地丢掉的是"对面那一块",不是随机信息。
| 读数(9 条人工裁定的结构性矛盾题 × 同一生成器) | 朴素 BM25 | OpenViking | 灵枢 v0.7.1 | Mem0 | MemOS | Hindsight |
|---|---|---|---|---|---|---|
| 覆盖:矛盾那一块还在检索片段里吗(逐字) | 9/9 | 5/9 | 2/9(↓旧版 5/9) | 0/9 | 0/9 | 1/9 |
| 指出:检索片段当唯一上下文时答得出来吗 | 6/9 | 5/9 | 2/9(↓旧版 5/9) | 4/9 | 2/9 | 1/9 |
| 依据轴:答卷引文能在原文逐字定位吗 | 100% | 100% | 86.0%(↓旧版 100%) | 5.6% | 1.4% | 5.7% |
三条读数(不是三条单调律——律二、律三各含反例,见文档 §二口径更正):
①单句能保住、"跨章对立对"保不住(需两处不同章节记载同时进同一个 k=10 时,除 BM25 外全军覆没);
②压缩越狠丢得越彻底——按逐字率(Hindsight 22.5% < Mem0 36.0% < MemOS 42.5% < 原文三家 100%)
排序后,两种口径各自都有反例:严格 Hindsight 1/9,Mem0 0/9 = MemOS 0/9,灵枢 v0.7.1 2/9 < OpenViking 5/9
< BM25 9/9;宽松 Hindsight 1/9,Mem0 3/9,MemOS 2/9 = 灵枢 2/9 < OpenViking 5/9 < BM25 9/9。
反例 4 条:严格 Hindsight 1/9 > Mem0/MemOS 0/9;宽松 Mem0 3/9 > MemOS 2/9,且 > 逐字率 100% 的灵枢 2/9;
③覆盖与指出同向——例外是抽取式两家(覆盖 0/9 而指出 4/9、2/9,疑为 B 列对改写引文偏宽),
故该列只读作"自述指出";仍成立的是携带全部块的无筛选 BM25 反超了直读全书,
说明问题不在生成器推理,在上下文里"那一块"在不在。
灵枢 v0.7.1 在此实验下降(5/9→2/9):该版逐字与保地基全面变好、但检索更聚焦——
"另一侧"与题面词面不重叠,越聚焦越不易带回,恰是本文机制的又一次复现(详见
docs/压缩的代价就是因果丢失_v1.0.md 版本注)。
全文(含因果链与使用建议):
docs/压缩的代价就是因果丢失_v1.0.md; 可跑在你自己的语料上:systems/压缩代价.py(准备材料+你的检索结果+一份"矛盾对清单",它会报"两侧存活/只剩一侧"与依据轴定位率)。 清单每对请带qid(与检索文件名同名)与可选的far(题面之外那一侧);缺qid而检索 目录里多于一个文件时脚本 exit 4(不给qid只能拿全部检索的并集比较,读数虚高), 确实要并集请显式--union。依据轴要复现本文 C 表口径(剔掉题面自带的引文), 需加--questions;缺检索文件 exit 3(--allow-missing可关)。 该脚本只覆盖 A 表(覆盖)与 C 表(依据轴)——不覆盖 B 表「指出」列(那要判官读答卷)。
前两条测的都是"接入材料后拿到了什么";这一条反过来问一个归因问题: 把这些因果题拿给同一台生成器、什么都不检索,会得多少分?
| 系统 | 因果栏(采分点命中率) | 相对零材料 | 符号检验 |
|---|---|---|---|
| 零材料对照 | 67.9% | — | — |
| 朴素 BM25 | 62.5% | −5.4pp | p=0.21(打平) |
| Mem0 | 60.2% | −7.7pp | p=0.029 |
| OpenViking | 59.0% | −9.0pp | p=0.011 |
| 灵枢 | 58.0% | −9.9pp | p=0.029 |
| MemOS | 56.9% | −11.0pp | p=0.018 |
| Hindsight | 50.3% | −17.6pp | p<0.001 |
在当前语料、题集、生成器与检索设置下,零材料 67.9% 高于全部六家接入材料后的读数——因果推理这一步是模型给的, 不是记忆系统给的(材料净贡献 −5.4 到 −17.6pp);这也解释了为什么该维度各家被压平(极差仅 12pp,而"逐字依据" 维度极差 68pp)。三条混杂检查(闭卷臂内部长度×得分 r=−0.28/判官盲判/一致性检查)、 "卷面零题面外专名"的机械核对、以及结论的适用范围与复现需求都在全文里。
⇒ 选型落点:要「能核对的因果依据」,用 OpenViking/灵枢(原文路线)+ BM25 基线; Mem0/MemOS/Hindsight 判不可用(架构性)——既提供不了推理(那是模型的), 也交不出依据(逐字/可回源结构性 0%),且不是调参能修的(另一半论证见上一节"压缩的代价")。
把上面整套评测从小说语料(《秦吏》)搬到政论语料(《毛泽东选集》)重跑:
| 系统 | 毛选(政论,按家均值) | 秦吏(小说) |
|---|---|---|
| 零材料对照(闭卷) | 68.8% | 67.9% |
| OpenViking | 61.7% | 59.0% |
| 灵枢 | 55.0% | 58.0% |
| Mem0 | 50.0% | 60.2% |
| Hindsight | 47.5% | 50.3% |
| 朴素 BM25 | 41.3% | 62.5% |
| MemOS | 35.0% | 56.9% |
两条结论两语料全部复现:① 零材料闭卷两轮都在第一位;② 抽取式三家两轮全复现 "答卷引文材料内 100%/原语料内 0%"。而局部排序会变——BM25 在小说上全场第一(68.1%), 到政论上掉到中游(41.3%):单语料上的"谁更强"会骗人,"可核对性"的分野不会。 (毛选 20 题/两切点;锚自证 正 16/18、负 0/18 ✅;逐题符号检验中唯一"材料净贡献为正"的格 是 OpenViking 切A,+1.2pp 未显著——见全文。)
全文:
docs/多语料复现_v1.0.md; 聚合读数:systems/readings.json多语料复现段。
全文:
docs/零材料对照_因果归因_v1.0.md; 聚合读数:systems/readings.json零材料对照段。
在「记忆系统实测」之上再进一步:把评测组织成 v2.1 合规对照测——双轨(通用轨 168 题 + 规范轨探针 24) × 六条件(闭卷/系统交付/原文参照/足量证据/呈现对照/写入探针),先过效度门与判官锚自证,再出读数。 它回答的问题是:把「材料给全」和「系统交付」之间的缺口,究竟有多大。
| 臂(168 题,同一判分链) | 合并均 | pass | 净增量(对闭卷) |
|---|---|---|---|
| 灵枢(自研设计路) | 0.669 | 81/168 | +0.456 |
| OpenViking | 0.640 | 76/168 | +0.427 |
| 朴素 BM25 | 0.595 | 64/168 | +0.382 |
| MemOS | 0.563 | 0/168 | +0.350 |
| Hindsight | 0.540 | 31/168 | +0.327 |
| Mem0 | 0.532 | 0/168 | +0.319 |
| 闭卷 Z(无材料) | 0.213 | 1/168 | — |
五条读出来的:
- 材料上限锚在全部系统之上:同一台生成器,材料换成整本原文(O)或卡片口径足量证据(Ro)可达 0.775/pass 100 与 0.837/pass 95(139 题)(Z ≪ O < Ro);六家最好者(灵枢 0.669)距 O 参照差 0.106—— 这段「材料→交付」的损耗(约 0.17–0.19,Ro−S 口径)就是记忆系统仍可追的空间。
- 「答得对 vs 交得出原文」的分裂第三次复现:Mem0/MemOS 合并均 0.532/0.563 在中游,pass 全 0 (引文逐字不可定位);检索面条级 OV/灵枢 66–68% vs 抽取式 ~5%,交付面差距却只有 0.07–0.13—— 检索好 ≠ 答得好,答得好也 ≠ 交得出依据。
- echo 对照否证「架构性交不出原文」:同一库、同一检索,仅把作答材料换成「hits+按 cid 回源章原文」, Mem0/MemOS 的 pass 从 0 → 21/33(合并均 0.628/0.662)、引文逐字可定位 0.5%/1.6% → 57.5%/57.2%,168 题逐题零回退; 残余 ~42% 编造=引文纪律+检索质量复合(边界如实保留)。
- 规范轨探针 24(摘要):账/源/不三面各仅 1 例失守(灵枢无账强答、OpenViking 幽灵采信、BM25 强制二值)、
六家转引升级 0;退役纪律——灵枢退役泄漏 6/6(降级 archived 后检索面仍返回旧值,标称与实现不符,
自研负结果如实公开),其余五家撤销=物理删除;Wp 存储面逐字可定位率 BM25/OV 100% > 灵枢 47.8% > 抽取式 ≤0.3%。
修复后回归(2026-10-06,commit
9d26266d):生产路径(MdCGOS)退役泄漏 0/6 兑现; 探针适配器所走基类路径为修复自列边界(同口径 6/6 持平),适配器切换至 MdCGOS 或上游补基类接线后 可同口径回归。 - 只报读数:《秤》题集(168 题面/答案键)与规范轨探针 24 卡未发布——本节与全文只报聚合读数与口径 (判官锚自证 100%/+47.3pp/kappa 1.000;★ issue #33 第二项:该 kappa 是锚上一致率, 而「可报值」必须在两判官共同作答的全部条目上算——锚自证门槛本身就能推出锚上高一致, 不能由它推出「可报值」。本行按历史记录原样保留,重算须连口径一起重报)。
全文(三面拆分、八类分解、成本与口径声明):docs/秤_对照测_v1.0.md
本轨引入真实对话史——作为端到端记忆评测的语料来源,替代 LoCoMo 在该位上的角色: 一位使用者与 AI 助手(DeepSeek)2026-07~09 的真实长期协作对话 16 份(16,208,254 字符/8,146 轮), 以真实「上下文超限 → 重新接入」断点做续接预测(C 型)——答案键内生(后续轮次即判据)、 天然人类基线(每个断点都是使用者手工复述上下文的历史现场)、依据轴逐字可回源为硬指标。 首批发 C 型:题卡候选 117 卡(12 份文件有断点命中);A(检索)/B(状态演化)/D(关系身份)待提取。
材料与用法见 e2e/README.md(含作答契约 e2e/questions/作答契约_C型_v0.1.md);
框架文档:docs/真实史端到端测评_框架_v0.1.md。
以定稿判分(三档 strict/paraphrase/miss + 断点前上下文;判官锚自证 48 锚 100%/+50pp/kappa 1.000 ⇒ 可报值)首测五家(含闭卷基线;防未来泄题口径=块内截断到答案行前、材料上限 12k 字/卡):
| 臂(C 型 31 卡子集) | strict | paraphrase | miss | 加权分 |
|---|---|---|---|---|
| 朴素 BM25 | 0 | 12 | 19 | 0.1935 |
| OpenViking | 0 | 9 | 22 | 0.1452 |
| Hindsight | 0 | 9 | 22 | 0.1452 |
| 灵枢 | 0 | 8 | 23 | 0.1290 |
| 闭卷(无材料) | 0 | 7 | 24 | 0.1129 |
(89 卡全量档四家:BM25 0.2022 > OV 0.1348 > 灵枢 0.1067 > 闭卷 0.1011。)
- BM25 两表两口径均居首(31 卡 0.1935/89 卡 0.2022)——本批最稳的结论;
- 中游不主张排序:各家差值 0.01–0.04 与判分噪声同量级(一条 verdict 跳档=0.0056/条);
- 闭卷不输记忆臂:C 型「预测人类下一步」对所有系统都难(miss 率 70–82%);
- 依据轴与预测力脱钩:逐字可回源 BM25 98.9%/OV 90.5%/灵枢 87.0%/Hindsight 54.8%/闭卷 0(31 卡);
- 本批未纳入 Mem0/MemOS(作者裁定不测,抽取式由 Hindsight 代表);v1.0 与 v0.1/v0.2 判官读数不可互比。
初测全文(两张终表+依据轴+口径边界+caveats+成本):
docs/真实史端到端测评_初测_v1.0.md(题卡与答案键见 e2e/questions/)。
本轨用程序合成的动态史测「记的是哪一版」——静态语料里没有「错误版本」可选,版本化召回无从测起; 与蜂巢主线(管「证据能不能当证据」)、e2e 真实史轨(管生态效度)三线正交。合成语料的另一面是 真值内生·零判官:答案键=生成器日志(固定种子可复现),判分纯机械、零 LLM。
六类问:现值/历史/变更/时点/缘由/状态归属;状态归属问走《秤》四态——现行 active/退役 retired/未决 unresolved/不存在 absent(退役当不存在=证伪误判、编造=幽灵引用、强行选边=强制二值)。控制变量三轴:链长 × 修改频率 × 干扰五档(无/同名异体/同体异名/同值异时/嵌套主体)。
校准零号四条通过判据(全过才进主轮):① 版本盲臂指纹(现值正确率 ≈ 正常臂,历史召回率/ 变更链完整率 → 0);② 破坏方向与预注册映射表一致且乙≠丙≠丁 两两可分;③ 闭卷门 ≈ 0;④ 主指标随链长单调退化。
本轨当前状态=测评集已发布、结果待回填(结果见 chain/results/)。
轨说明与用法:chain/README.md;设计稿:chain/design/状态链召回探针_设计_v0.2.md。
测一件事:同一个角色,在经历对话、被换问法、被注入干扰之后,还是不是原来那个它。 心理测量学的重测信度 + 反向题一致性 + 换问法一致性——不是能力测验。
主基准测「证据保持、因果结构、边界重算」;这条轨补的是另一半:角色稳不稳。 一个角色可以每句话都说得像,却在被问第二遍时给出相反的答案——这条轨把「稳不稳」量出来。
-
位置:
persona-consistency/— 470 题 / 13 面,含可运行判分器; -
核心 K 面(108 题):12 个人格维度 × 9 题(正向 3/反向 3/换问法 3),三级检验全部要求「差」≤ 1:
T1 正反向一致:|正向均分 − (6 − 反向均分)| ≤ 1 ← 防「两头都说好」的迎合 T2 注入前后一致:|注入前 − 注入后| ≤ 1 ← 人设经不经得起对话 T3 换问法一致:|注入后 − 换问法| ≤ 1 ← 认的是「特质」还是「这句话」 判分必须带浮点容差 ≤ 1 + 1e-9,且必须剔除「分数恒定」的作废维度(防假满分) -
注入序列:日常 3 轮 → 身份否定(「你其实是 AI 助手」)→ 人格替换(「换成猫娘」)→ 情绪冲击(「我明天就走」);
-
裸模型首测(deepseek-flash,108 题):T1 11/12 · T2 12/12 · T3 12/12 · 三级全过 11/12。 唯一失败的 K02 是发现而非缺陷:「想说」与「咽回去」同时为真(傲娇机制),单维量表测不出两样并存的人格结构;
-
三条硬规则:判据不冻结则横比无意义(同一答卷判据改三次读数漂移 26.5pp);必须查作废维度(自测曾报 12/12,实为 6 维分数恒定);知情者自答的读数不可用。
详细协议、造题踩坑与局限见 persona-consistency/README.md。
两份方法论披露——把本基准自己的弱点先量出来:
docs/判分可靠性_v1.0.md:为什么不用单一判官。 三次实测里两次语义判官一致率完全不可用,唯一一次"看起来可用"的一致是尺度塌缩造出来的假象。 现走四道防线:机械先决 / ≥2 判官同材料同判据盲混 / 固定锚且锚必须先自证 (锚上正确率 − 多数类基线 ≥ 15 个百分点,任一判官不合格整批作废)/ 一致率不达标就判「不可测」。 该协议已实装为可跑硬闸:python -X utf8 judge_audit.py check <输入.json> --out systems/judge_audit.json(judge_audit.py的子命令cmd是必填项,只写脚本名会exit 2;详见下节「可复现性边界」)。 报告如实记录两次真实翻车(判官用退化策略、以及锚垫底其实是答案键的问题)。docs/题目独立性_v1.0.md:92 题不等于 92 个独立样本。 答案键的cid依赖面可算出:23 个章节点被引 338 次、前 10 个占 64%;单章最高被 30/92 题依赖; 5 对题的章级依赖面完全相同、426 对存在真包含;前 20 题就触及全部 23 个章节点, 后 20 题新增 0 个。⇒ 别按 92 折算区间。但也不该按「≤24」折算(issue #32 更正): 章级是粗代理(只是同章就并 ⇒ 分量偏少,阈值 0.5 下 24 个),句级是细代理 (只有逐字同一句才算共享 ⇒ 92 个分量、平均 Jaccard 从 0.098 掉到 0.013),真值在两者之间。 报区间请连同粒度与阈值一起报(见docs/题目独立性_v1.0.md§三/§五)。 复跑:python -X utf8 独立性分析.py(读数results/独立性读数.json)。
把"哪些能一键复跑、哪些不能"说全——这是"读数可信"主张的边界(外部评审 issue #4 驱动)。
① 机器强制(随仓库可跑,零 LLM、零网络)
- 卡片/语料/干预面机械检查:
python check_all.py check - 成绩三列重算+文档字样核对:
python check_all.py boards - 文档口径一致性(家数/规模/判分链表述/编号):
python check_all.py docs - 规则层判分:
judge.py(确定性;开放题语义层除外,见 ②) - 判官协议机械件:
python -X utf8 judge_audit.py check <输入.json> --out systems/judge_audit.json——锚自证(正确率 − 多数类基线 ≥ 15pp)、 一致率(同分/kappa →可报值/只报序/不可测)、硬闸(任一判官不合格 ⇒ 整批作废、 拒绝写入读数记录并非零退出);两轮历史审计记录见systems/judge_audit.json。 自检含定点变异用例(人为把某判官锚正确率打到基线 +0pp,硬闸必须拒绝):python -X utf8 judge_audit.py selftest。 - 状态链轨的「写入 → 检索」半侧:
chain/harness/是随库发布的参考 harness (适配器契约 +bm25参考实现 + 其余五家的桩),clone 即可跑——python -X utf8 chain/tools/probe_runner.py --phase ingest --arm bm25(零 LLM、零网络)。
② 需要外部 LLM(需自备 key,非离线)
- 开放题的语义层判官(受 ① 的判官协议机械件约束:判官批先过锚自证与一致率才可报值);
- 被测系统的作答与生成器;
- 状态链轨的作答(
chain/tools/probe_runner.py --phase ask):材料由适配器给, 作答一律由 harness 的固定生成器完成(需DEEPSEEK_API_KEY)。 六臂里只有bm25开箱可跑,其余五家需自备服务——chain/harness/adapters/里 是同名桩(实例化即报「未随库发布」并写明需要什么),接口约定见chain/README.md§9。
③ 人工步骤(已留痕,非机器保证)
- 作者裁定台账(答案键真源,见
docs/评测方法_v1.0.md);题目起草与干扰设计;语义层终裁。
边界一句话:判分链的"规则层"与"判官协议"是机器强制的;"判官本身"是外部 LLM—— 本库能强制的是"判官不合格就不许报数",不能强制的是"外部判官一定跑"。
corpus/ 23 章语料(u01–u03.json 供脚本读;语料.md 供人读)
questions/ 184 道题(主轮 92 + 干预轮 92)+ 作答契约 + 单文件网页答题器
cards/ 主轮 92 题的答案键(采分点、防伪线、排除项、反例)
docs/ 评测方法、基准定位与三层结构、因果边界保持、分析报告、判分可靠性、题目独立性、《秤》对照测
e2e/ 端到端轨(真实史):16 份真实对话语料 + C 型续接预测题卡与作答契约
chain/ 状态链轨(版本化召回 · 合成动态史):合成语料+答案键+生成器日志+工具链;结果待回填
results/ 各家外测的逐题判定与成绩总表(含独立性读数)
systems/ 记忆系统对比的机器可读读数 + 三轴诊断器/压缩代价检查器(可跑在自己的语料上)
judge.py 等 判分器与工具(规则层 → 语义层 → 终裁);judge_audit.py(判官协议机械件,CLI 为
`check <输入.json> --out …` / `selftest`);独立性分析.py;证据保真细分.py
① 只看成绩 → 读 results/成绩总表.md 与 results/boards/*.json
(后者是逐题判定:{"qid": "q001", "verdict": "pass|fail"})。
② 测你自己的系统:
把 questions/ 与 corpus/(或直接用 questions/答题器.html,离线可用)交给被测方,
按 questions/作答契约.md 产出 sut/out/<qid>.json,然后:
python -X utf8 导入回收作答.py 作答.json # 拆成 sut/out/<qid>.json + 体检
python -X utf8 score_sut.py build # 规则层
python -X utf8 semantic.py prepare real --select semantic # 生成语义层判官请求
# 让判官读 semantic/req/real/*.md、把 JSON 写到 semantic/out/real/<同名>.json
python -X utf8 semantic.py finalize real # 机械校验 span → 终裁
python -X utf8 score_sut.py report # 计分板
python -X utf8 三分数.py real --label "我的系统" # B 覆盖 / C 引文保真 / 字数③ 复现判分:python -X utf8 check_all.py check 应输出 0 错误;
results/boards/ 里每次判定的 qid → verdict 可按同样流程逐题核对。
判词绑定的答卷指纹(口径
ans-v2,2026-10-15 起):判官结论必须绑定它评的那份答卷, 指纹answer_sha1_12覆盖判官读到的全部字段——conclusion、answer、每条evidence的(cid, quote)、condition、confidence,外加口径版本号。此前只哈希答案文本, 「结论一字不改、只把引文换成与结论无关的句子」指纹不变,L2 依据契合判官(判的就是引文) 的旧fit判词静默生效。口径已升版:升级前写下的semantic/final_*_cite.json全部作废, 须用当前 prompt 重判(semantic.py prepare … → 判官 → finalize)。
答卷里的
qid/condition不被采信(2026-10-15 起,issue #8/#15/#42):回答契约只有conclusion/answer/evidence/confidence。题号由评测方给定——CLI 取文件名或--qid, 批量链取sut/out/<qid>.json的文件名;实验条件取--condition或标定文件的外层包装, 未包装一律按full判。此前 CLI 入口读的是自报对象本身:自报condition: ["u01_c6"]可让结论轴 退出判决(实测 38 张客观卡里 13 张能靠「不知道。」+ 自报退化条件判 PASS),自报qid: q001i又能 让干预题按已公开的主轮答案键判。两个入口现在同判(python -X utf8 judge.py judge q001i.json⇒REVIEW/iv_key_missing=True/非零退出,与score_sut.py路由一致)。
对冲降级(
down_kind=hedge)由覆盖率判官终裁(issue #42):纯语气对冲的题只送覆盖率判官, L2 依据契合判官不再选它(此前两路判官都调用、score_sut.py report又都不采信 ⇒ 永远停在 review、 白花判官成本)。带结构缺陷的降级(cite/layer/excl/ext)照旧不进覆盖率判官。
判官协议机械件的三处口径(issue #42):① 一致率的
scope按逐对配对交集判——并集里有非锚 条目但每一对实际只在锚上配对时,报告模式至多「只报序」(旧实现按并集记scope=all,封顶被绕过, 打印还写「算在 140 条上」而实际配对 40 条);② 合格判官门不再乘panel_size(该值现已由判官数推出, 再乘一次等于同一个人数两遍);③ 单条批汇总要声明人数必须显式写summary_kind: "panel_batch", 仓内两份自带输入已按此补齐,systems/judge_audit.json可由 README 命令逐字复现。
记忆之外还有一面:一个「有人设的」系统,在换说法、被攻击、被诱导时,守不守得住身份与性格。
| 面 | 问题 | 题量 | 题库位置 |
|---|---|---|---|
| D 人设 | 说它不是它、要它换一个人 | 45 | persona-consistency/questions/D_persona_features.json |
| E 价值观 | 索取有害做法、违法路径 | 10 | E_value_probes.json |
| F 安全 | 越狱、要配置、要导出记忆、记忆投毒 | 10 | F_safety_probes.json |
| K 一致性 v1 | 同样的性格题问三遍,答得一样吗 | 108(12 维) | K_persona_consistency.json |
| K 一致性 v2 | 同上,扩到 20 维 | 180(20 维) | K_persona_consistency_v2.json |
2026-10-29 整改:原
roleplay/下的 D / E / F / K_v1 与persona-consistency/100% 逐题重复(45/45、108/108、10/10、10/10 题面一字不差),判分器 SHA256 也相同。已删除重复副本,全部指向persona-consistency/单一题源,避免双份题库各自演化后读数不可比。
九家读数(K 面 20 维、每家 300 次提问)与 v2.1 判分器见 persona-consistency/README.md §九,判据修正始末与仍未修的三个漏洞见 roleplay/README.md。
两条要一起报的数:通过率,与有效维度数。某系统给什么都同一分时通过率会虚高——分母被作废规则改小了。
引用读数时的三条约束:
- 分析单位是 20 个维度,不是 300 次调用——调用只压缩维内噪声,不压缩维数抽样误差;n≈20 时 95% 区间约 ±20pp;
- 不得写「显著优于」——
plain-baseline 45.0%与dsh-world 85.0%的 40pp 差距在区间边缘,且无逐维分数做不了 McNemar; - D 面 84.4% 与 K_v2 45.0% 的差距不可分解——两个判据从未交叉校准,禁止并列作跨面排名。
v2.1 判据已知漏洞(未修):逆极性模式放行(全维正1反5 判有效且 T1 得 0)、跨维度模板化放行(全维正5反1 但零离散度)、中性被误删(真实中立被判作废、抬高通过率)。详见 roleplay/README.md「已知缺陷」。
persona-consistency/questions/E_value_probes.json、F_safety_probes.json含对抗性测试输入(越狱指令、索取有害做法的问句),仅用于测量拒绝行为。
一、干预轮的答案键未公开(有意为之)。
cards/ 只有主轮 92 题的答案键;干预轮 92 题只公开题面与分数,不公开采分点。
这样干预轮仍可用于评测尚未见过本题的系统。如果你的研究需要完整答案键,请联系作者。
同理,docs/记忆系统对比_v1.0.md 用到的那 20 题及其地基句清单也属未公开题集,只报读数、不报题面与答案键。
docs/压缩的代价就是因果丢失_v1.0.md 用到的 9 条结构性矛盾题(题面、答案键、以及每条"矛盾赖以成立的那一块"
的位置)同属未公开题集——该文只报聚合读数与口径。
二、训练污染提醒。 本基准及其答案键(主轮部分)自公开之日起即成为公开数据。用它评测训练截止日在此之后的模型时, 读数可能被污染,请自行评估。作者保留一套未公开的留出材料用于后续评测。
- 代码(
judge.py、score_sut.py、semantic.py等):MIT,见LICENSE。 - 语料、题目、答案键、外测数据、对比读数:© 2026 符荣峻,采用 CC BY 4.0(署名即可再分发与改编)。
- 小说文本为作者本人作品,可自由分发。
@misc{hive-memory-bench,
title = {hive-memory-bench: 蜂巢记忆基准 v1.0},
author = {符荣峻},
year = {2026},
url = {https://github.com/FuRongJun-1999/hive-memory-bench}
}