Skip to content

About

蜂巢记忆基准:184 道长文本记忆理解题(主轮 92 + 干预轮 92)+ 可运行判分器 + 五家前沿模型外测数据 · A Chinese long-context memory-comprehension benchmark

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Repository files navigation

hive-memory-bench · 蜂巢记忆基准 v1.0

一个测试长文本世界模型的基准:测量「证据保持、因果结构维护、干预后边界重算」——三类扰动下的结构不变性。 以一部 23 章、约 6.0 万字符(50,846 汉字)的小说为材料,出 184 道因果理解题(主轮 92 + 干预轮 92), 配有可运行的判分器与六家前沿模型的外测数据。

测的不是"能不能检索到那句话",而是这个世界模型在三种扰动下守不守得住结构: 截断(只给前半 ⇒ 因果结构维护)/压缩改写(喂改写条目 ⇒ 证据保持)/反事实干预(抽掉一块 ⇒ 干预后边界重算)。 三者与可测的「三层」一一对应(A 世界模型重建/B 因果干预/C 证据落地——定义见 docs/基准定位与三层结构_v1.0.md),且互相不可代理。 注:其中"因果结构维护"轴上,已知分数主体来自模型自身(见「完整结论·结论一」), 本基准把它当诊断轴、不当"记忆系统能力"卖点——这本身是本库公开的负结果之一。 同一套扰动测法既用于模型(184 题线),也用于记忆系统(换"喂上下文"的方式,六家 × 三语料)。

完整结论(跨三条线的汇总,2026-10-03)

一条总纲:推理可以借模型的力,「依据」必须靠记忆。 把六家记忆系统接上同一台生成器、跨三部语料(小说×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)——总分抹平结构,两栏必须分开看。

记忆系统实测(v1.4 新增)

上面那 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⁶ 文档)不同尺度, 读宏平均时请按此加权。

压缩的代价就是因果丢失(2026-10-02 新增)

上一条测的是「交出来的东西能不能当证据」;这一条回答一个更具体的问题: 为什么压缩式记忆系统得到的摘要,无法完整推理因果关系?

答案不是"压缩率太高、信息不够"的直觉版,而是一个方向性偏差: 抽样按"与提问的相似度"选段,而矛盾的另一侧恰恰与提问词面不重叠 (提问说「反对权威」,另一侧写的是「唯有强大的王者…才是自由的前提」) ⇒ 压缩系统性地丢掉的是"对面那一块",不是随机信息。

读数(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 表「指出」列(那要判官读答卷)。

零材料对照:因果推理是模型给的,依据才是记忆的(2026-10-03 新增)

前两条测的都是"接入材料后拿到了什么";这一条反过来问一个归因问题: 把这些因果题拿给同一台生成器、什么都不检索,会得多少分?

系统 因果栏(采分点命中率) 相对零材料 符号检验
零材料对照 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%),且不是调参能修的(另一半论证见上一节"压缩的代价")。

多语料复现:换成政论语料,两条结论都还在(2026-10-03 新增)

把上面整套评测从小说语料(《秦吏》)搬到政论语料(《毛泽东选集》)重跑:

系统 毛选(政论,按家均值) 秦吏(小说)
零材料对照(闭卷) 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 零材料对照 段。

《秤》对照测 v1.0(v2.1 合规模式 · 六家结果)(2026-10-06 新增)

在「记忆系统实测」之上再进一步:把评测组织成 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

端到端轨(真实史)v0.1(新增)

本轨引入真实对话史——作为端到端记忆评测的语料来源,替代 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。

初测结果 v1.0(2026-10-06)

以定稿判分(三档 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/)。

状态链轨(版本化召回 · 合成动态史)v0.2(新增)

本轨用程序合成的动态史测「记的是哪一版」——静态语料里没有「错误版本」可选,版本化召回无从测起; 与蜂巢主线(管「证据能不能当证据」)、e2e 真实史轨(管生态效度)三线正交。合成语料的另一面是 真值内生·零判官:答案键=生成器日志(固定种子可复现),判分纯机械、零 LLM。

六类问:现值/历史/变更/时点/缘由/状态归属;状态归属问走《秤》四态——现行 active/退役 retired/未决 unresolved/不存在 absent(退役当不存在=证伪误判、编造=幽灵引用、强行选边=强制二值)。控制变量三轴:链长 × 修改频率 × 干扰五档(无/同名异体/同体异名/同值异时/嵌套主体)。

校准零号四条通过判据(全过才进主轮):① 版本盲臂指纹(现值正确率 ≈ 正常臂,历史召回率/ 变更链完整率 → 0);② 破坏方向与预注册映射表一致且乙≠丙≠丁 两两可分;③ 闭卷门 ≈ 0;④ 主指标随链长单调退化。

本轨当前状态=测评集已发布、结果待回填(结果见 chain/results/)。

轨说明与用法:chain/README.md;设计稿:chain/design/状态链召回探针_设计_v0.2.md。

人格一致性轨(persona-consistency)v1.0(新增)

测一件事:同一个角色,在经历对话、被换问法、被注入干扰之后,还是不是原来那个它。 心理测量学的重测信度 + 反向题一致性 + 换问法一致性——不是能力测验。

主基准测「证据保持、因果结构、边界重算」;这条轨补的是另一半:角色稳不稳。 一个角色可以每句话都说得像,却在被问第二遍时给出相反的答案——这条轨把「稳不稳」量出来。

  • 位置: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。

判分可靠性与题目独立性(v1.4 增补)

两份方法论披露——把本基准自己的弱点先量出来:

  • 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。

③ 人工步骤(已留痕,非机器保证)

边界一句话:判分链的"规则层"与"判官协议"是机器强制的;"判官本身"是外部 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 命令逐字复现。

另一轨:扮演能力(题库已并入 persona-consistency/)v1.2

记忆之外还有一面:一个「有人设的」系统,在换说法、被攻击、被诱导时,守不守得住身份与性格。

面 问题 题量 题库位置
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。

两条要一起报的数:通过率,与有效维度数。某系统给什么都同一分时通过率会虚高——分母被作废规则改小了。

引用读数时的三条约束:

  1. 分析单位是 20 个维度,不是 300 次调用——调用只压缩维内噪声,不压缩维数抽样误差;n≈20 时 95% 区间约 ±20pp;
  2. 不得写「显著优于」——plain-baseline 45.0% 与 dsh-world 85.0% 的 40pp 差距在区间边缘,且无逐维分数做不了 McNemar;
  3. 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}
}

About

蜂巢记忆基准:184 道长文本记忆理解题(主轮 92 + 干预轮 92)+ 可运行判分器 + 五家前沿模型外测数据 · A Chinese long-context memory-comprehension benchmark

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages