30 秒判断 :不检索,反而更准。 这是《LLM-Wiki 到底好在哪?》的补篇一:上一篇把 30 道题当成一个整体,量出"编译成页面只赢 0.006";这一篇只加两步------先量一条闭卷基线 (同模型、不给知识库直接问),再按"模型闭卷能不能答出"把题分成两档。在"模型本来就答得出"的那 12 题上,闭卷 0.917 > 三条 agent 路线 0.69~0.76 > 经典 0.534(F1 掉 0.15~0.38),三轮 × 三条路线共 9 场对比闭卷全胜;而 token 反而多花 3~34 倍------闭卷每题 1,015,wiki 34,347。
适合谁读:已经在用 RAG、但效果不如预期的人;正在纠结"要不要上检索"的人;想知道"检索什么时候帮倒忙"的人;以及读过本系列前三篇的人。
结构速览:§1 怎么测的(含闭卷基线与分档判据);§2 主结果;§3 现场------四类"把对的换成错的";§4 为什么"不迭代"的那条最伤;§5 那另外 18 题呢(下一篇的引子);§6 结论与怎么用。附录 A 是逐题全表。
证据标记 :✅ 实测 (本机五条路线各 3 轮 × 30 题 + 闭卷基线 2 个模型 × 3 轮)· 📄 源码 (
Tencent/WeKnorav0.8.2)· 📎 原文 (题目与论文原话)· 🤔 推断(会明确标出)。
先交代两个名词:
- 闭卷基线 :同一个回答模型、同一批题,不给知识库、不给任何工具 ,直接问。(论文里管这一行叫
None (Closed-book)。) - 记忆可解 / 记忆不可解 :以闭卷 flash 的成绩划线------3 轮里 ≥2 轮 F1 ≥ 0.5 算"模型本来就答得出"。30 道题这样划出 12 / 18 两档。
系列位置 :上一篇(检索篇)报了三件事------wiki 对同代 agentic 块检索只赢 0.006、对经典单次检索赢 0.26、论文那 6~7 分对不上。本篇是它的补篇一 :只加一步(闭卷基线)+一次分档,就发现第一件事必须分两半说------一半成立,一半反了。另一半(记忆不可解的 18 题)留给补篇二。
0. 结论先行
不检索,反而更准------但这句话只在一半的题上成立。 把"模型本来就会的题"和"模型不会的题"混在一起算平均分,会得到一个谁都不像的结论;分档之后,两档的方向是相反的,这一篇只讲前一半:
| 结论 | |
|---|---|
| ① 记忆可解档:加检索是负作用(✅ 实测) | 闭卷 0.917 > hybrid 0.762 ≈ smart 0.764 > wiki 0.694 > 经典 0.534 ;三轮 × 三条 agent 路线共 9 场对比,闭卷全胜------没有一次例外 |
| ② "不迭代"的那条最伤(✅ 实测) | 经典(一次 top-k + 一次生成)比闭卷掉 0.38;有迭代的三条路线能挤回一部分(0.69~0.76),但都没回到"不检索"的水平 |
| ③ 代价也是反的(✅ 实测) | 这 12 题上,闭卷每题 1,015 token,经典 2,866,smart 14,506,hybrid 20,035,wiki 34,347 (34 倍)------最准的方案同时最省 |
一句话 :在模型已经会的问题上,检索不是"锦上添花",而是"把对的答案换掉"。
三条边界(先说清)
- 一份语料、一个切片 :MuSiQue 可答子集里的 30 道题(2/3/4 跳各 10 道)中的这 12 题。而且它不是随机抽样------是按闭卷成绩划出来的,天然偏向模型熟悉的领域。
- 单模型族 :所有对照都在 DeepSeek 家族内(
flash⇄v4-pro),跨家族没测。 - 判据是近似的 :单题用"F1 ≥ 0.5"判对错,短答案会因为共享词被误判(§1.3 有实例);分档是事后做的,不是独立标注。
1. 怎么测的
1.1 底盘:沿用上一篇,不重复
同一条链路、同一份语料、同一批题:WeKnora (v0.8.2,本地锁定)+ MuSiQue 的可答子集(572 个段落文件 ,2/3/4 跳各 10 题)+ 五条路线 (A quick 经典无重排/B quick+rerank 经典加重排/C smart agent+块检索/D wiki agent+页检索/E hybrid wiki 导航+块引用)+每条 3 轮 +主指标词级 F1。细节和口径都在上一篇,这篇不重列。
这一篇只加两步:一条闭卷基线 ,和一次分档。
1.2 第一步:加一条闭卷基线
做法 :同一批 30 题、同一个回答模型,不给知识库、不给任何工具 ,直接问(experiments/weknora/closedbook_direct.py,直连模型 API;无系统提示,只带一句作答格式约定,与五条路线同一套)。同样 3 轮 × 2 个模型。
它回答的是一个很朴素的问题:这份分数里,有多少是模型本来就记得的?
全 30 题口径(✅ 实测,3 轮 × 2 个模型):
| 口径 | F1 | EM | 空答 |
|---|---|---|---|
| 闭卷 flash | 0.431 | 0.389 | 7% |
| 闭卷 pro | 0.508 | 0.444 | 11% |
一条旁证(📎 原文) :论文自己的主表里就有这一行------MuSiQue 上 None (Closed-book) = 0.456 F1/0.372 EM 。也就是说,"记忆底分不低"不是我们这份切片的特例:它那边 Dense 相对闭卷只多 +0.155 ,LLM-Wiki 相对闭卷多 +0.283。(顺便,这也解释了为什么它选的那份"前 500 条"切片上,稠密检索是正贡献。)
两个必须交代的口径坑:
- "空答"要和"答错"分开记。 该模型先产出内部推理,预算给少了正文会被饿死(实测
max_tokens=4096时难题直接空答,给到 16,384 才正常收尾);这批闭卷里 pro 的整体空答率 11%,flash 7%。把"没答完"混进"答错"会低估它。 - 用 WeKnora 的 agent 跑"闭卷"是无效的 :即使不给它挂工具,harness 仍然会注入系统提示与知识库语境,模型会吐
Let me search the knowledge base、还编出<kb doc=...>引用,分数只有 0.207。这条基线只认直连模型 API 的版本。
1.3 第二步:怎么分"记忆可解 / 记忆不可解"
判据一句话:以闭卷 flash 为准,3 轮里 ≥2 轮 F1 ≥ 0.5,就算"模型本来就答得出" ------30 题里划出 12 题可解 / 18 题不可解 。(判分用的是全文同一个脚本、同一个 best_match:小写、去标点,对金标准与别名取最高分。)
这个判据是近似的,两种误差方向我都验过:
- 共享词造成的假阳性 :#1 金标准是
Miller County,闭卷三轮答的是Los Angeles County/Los Angeles County/Douglas County------第三轮拿到 0.50,只是因为共享了 "County" 这个词,它其实答错了。所以我把阈值收紧到"≥2 轮",正是为了挡掉这种偶发命中。 - 偶发答对造成的漏报 :#15(
Casa Loma)、#21(Green Bay)都是"三轮里对过一次",按严格口径算进了不可解档------它们更准确的说法是"模型知道,但不稳定"。 - 换模型做交叉检验 :拿闭卷 pro 当分类器,只有 2 道题(#21、#29)换边;换成宽松口径(≥1 轮)则 16 / 14 分档。两套口径下,本篇的结论方向不变(§2 有逐轮数据)。
顺带一个画像:这 12 题里 2 跳 6 道、3 跳 4 道、4 跳 2 道------偏简单档,符合"模型记忆更容易兜住短链题"的直觉。(全 30 题口径的闭卷是 0.431/0.508,两档一分开,差异就出来了:12 题那一档是 0.917。)
2. 主结果:这一档上的分数、稳定性与成本
| 路线 | F1(三轮均值) | 逐轮 | 抖动 | token/题(均值) |
|---|---|---|---|---|
| 闭卷 flash | 0.917 | .917/.833/1.000 | 0.167 | 1,015 |
| 闭卷 pro | 0.972 | .917/1.000/1.000 | 0.083 | --- |
| 经典(B 加重排) | 0.534 | .548/.548/.506 | 0.042 | 2,866 |
| wiki(agent+页) | 0.694 | .833/.667/.583 | 0.250 | 34,347 |
| smart(agent+块) | 0.764 | .875/.625/.792 | 0.250 | 14,506 |
| hybrid | 0.762 | .632/.736/.917 | 0.285 | 20,035 |
抖动 =三轮 F1 的最大值与最小值之差。token/题=该题所有 LLM 调用的 prompt + completion(重排与向量检索的算力不计入)。
三条读数:
- 闭卷逐轮全胜。 三轮各比一次,闭卷(0.917/0.833/1.000)每一轮都高于每一条检索路线 ------9 场对比,没有一次例外。而且检索路线自己的抖动(0.25~0.29)是闭卷(0.17)的 1.5 倍:加了检索不但更低,还更不稳。
- 经典路线是最差的一条,而且差得最"稳"。 0.534,三轮 0.548/0.548/0.506,抖动只有 0.042------它稳定地错。这和它"一次 top-k + 一次生成"的形态有关(§4)。
- 三条 agent 路线之间仍然不可分辨。 0.694/0.764/0.762,看起来分三档,但名次每一轮都在变 (第 1 轮 smart > wiki > hybrid、第 2 轮 hybrid > wiki > smart、第 3 轮 hybrid > smart > wiki)。所以这一档上只能说"有迭代比没迭代好 ",不能说"页面层比块层好"。
3. 现场:模型本来答对,检索把它换成了什么
分数只说明"低了",看不出"怎么低的"。12 题 × 4 条检索路线 × 3 轮,一条条看下来,替换的方式其实就四类;§3.5 再补一个反例。
3.1 换成同一个域里的另一个实体
#3 (2 跳)📎 "Who did the screenwriter for Good Will Hunting play in Dazed and Confused?" ------《心灵捕手》的编剧,在《年少轻狂》里演了谁?
| 路线 | 三轮作答 |
|---|---|
| 闭卷 | Fred O'Bannion ×3(全对) |
| 经典 | David Wooderson ×3 ------ 同一部电影里的另一个角色 |
| smart | Fred O'Bannion/Ben Affleck/Fred O'Bannion |
#14 (3 跳)问"总部在纽约的那个足球组织,哪支球队所在的城市,是那张 No Wave 专辑的诞生地"。金标准 New York City FC,闭卷三轮全对;经典三轮全答 New England Revolution(同联盟的另一支球队) ,smart 有两轮答 New York Red Bulls。
⇒ 检索把同域里"长得更像答案"的那个实体 捞了上来,模型照抄。这类题在语料里都是短段落、一实体一段(上一篇 §4.1 量过),检索单元和知识单元已经是同一个东西 ,于是"再检索一遍"没有带来新信息,只带来了换错的机会。
3.2 换成同一个实体的另一种表述
#11 (3 跳)问"灰狗巴士在阿娜·塞尔兹尼克雇主总部所在城市从哪里发车"。金标准 Toronto Coach Terminal(车站名):
| 路线 | 三轮作答 |
|---|---|
| 闭卷 | Toronto Coach Terminal ×3(全对) |
| 经典 | 610 Bay Street, Toronto ×3 ------ 同一栋楼的地址 |
| wiki/smart | 各有一轮答 610 Bay Street / **610 Bay Street** |
#9 (2 跳)问"阿什肯纳兹犹太人祖先定居地那些部族,哪一年年末入侵罗马帝国"。金标准 406:闭卷三轮全 406;经典三轮全 433 ;wiki 对了一轮,之后两轮跟着答 453。
⇒ 这两条最能说明问题:正确答案和模型的记忆完全一致,检索拿回来的却是同一实体的另一个侧面(名字 ↔ 地址、正确年份 ↔ 邻近数字)。模型没有判断"哪个才是被问的那个",直接采信了上下文。
3.3 停在链条的中间
#23 (4 跳)问"那位想改革如今美国最大教派的德国神父,去世前讲圣母布道是在德国哪个州"。金标准 Saxony-Anhalt:
| 路线 | 三轮作答 |
|---|---|
| 闭卷 flash/pro | Saxony-Anhalt ×6(6 轮全对) |
| 经典 | Wittenberg/Saxony/Saxony |
| wiki | Wittenberg/Fribourg/Saxony |
| smart | Wittenberg/Saxony/Saxony |
| hybrid | Wittenberg/Wittenberg/Saxony |
⇒ 开卷 9 轮全错、闭卷 6 轮全对。断点不在知识,在链路:检索停在链条中间那个实体(维滕贝格、萨克森州)就不再往下走了。这条题在我们内部的逐题复盘里被完整拆过一遍------库里的答案齐全,缺的是"维滕贝格 → 州"这条跨页关系。
3.4 平均值看不见的偶发替换
有些题平均值几乎没掉,但同一件事在单轮里发生了:
- #6 :wiki 前两轮
Claudia Wells,第三轮Elisabeth Shue(换成同一系列续作里换了演员的那位)。 - #10 :经典前两轮
Jennifer Connelly,第三轮Jennifer Aniston------而且这个错答拿到 0.5 分 ,因为两个名字共享 "Jennifer"。这就是"F1 ≥ 0.5"只能当近似判据的原因。
⇒ 这类替换在均值上被稀释掉了,但它才是"检索让本来对的答案变得随机"的真实形态:不是稳定地错,而是时对时错。
3.5 反过来也要说:检索偶尔真的能纠回来
不能只挑对结论有利的样本。这 12 题里,闭卷没答稳的有 3 道,其中每一道都被检索补回来过:
| 题号 | 金标准 | 闭卷 | 检索表现 |
|---|---|---|---|
| #18 | 1941 |
0 /1 /1(2/3) | 经典三轮全答 1902;smart/hybrid 三轮全对 |
| #27 | 1905 |
1 /0 /1(2/3) | 经典三轮全对 ;hybrid 有一轮写成 Answer: 1905(0.67) |
| #12 | Medieval Latin |
1 /0 /1(2/3) | 经典三轮全对 ;wiki 2/3(有一轮答 Old Norse);smart 两轮答 Old High German/Old Latin |
所以把两边合起来数:闭卷答稳 的 9 道里,7 道被至少一条检索路线拉低 ;闭卷没答稳 的 3 道里,3 道被检索补回来 。⇒ 准确的结论不是"检索没用",而是------检索把力气花在了模型已经会的地方,代价是把其中大部分换成了错的。
顺带一个口径提醒 :有几轮答案其实是对的 ,分却低得离谱,那是指标对输出格式敏感------#9 有一轮把
<kb doc=...>引用和整段解释一起吐出来(F1 0.06)、#12 有一轮先写推理链再给答案(0.12)、#27 有一轮写成Answer: 1905(0.67)。这类分差不是知识差。
4. 为什么"不迭代"的那条最伤
同一档题上,经典路线(0.534)比三条 agent 路线(0.69~0.76)低 0.16~0.23 ,而经典和它们的差别只有一个:经典只有一次机会。
一次 top-k 就把 10 个块钉进上下文,模型必须在这批块里选一个答案------里面混着 David Wooderson、610 Bay Street、433、New England Revolution 这些"同域长得像答案"的内容 ,没有第二轮去把它们挤掉。agent 路线可以把一次查询拆成多轮、用新查到的证据覆盖旧的看法,所以能挤回一部分(0.16~0.23),但仍然回不到"不检索"(0.917)。
同一份语料上有一条很直接的旁证(🤔 推断的机制,✅ 实测的数据,口径是全 30 题 ):把经典的 top-k 从 10 提到 20,命中金标段落的题数从 14/30 涨到 18/30(+29%) ,可 F1 反而从 0.318 掉到 0.293 (加重排那条同样:0.316 → 0.286)。证据量上去了,分数下来了------多塞进来的那 8~10 条块,大半是干扰。
把成本也摆上来,这一档的账是完整的:
| 路线 | F1 | token/题 |
|---|---|---|
| 闭卷 | 0.917 | 1,015 |
| 经典 | 0.534 | 2,866 |
| smart | 0.764 | 14,506 |
| hybrid | 0.762 | 20,035 |
| wiki | 0.694 | 34,347 |
质量最高的那一栏,成本也是最低的。 这是本文唯一一处"免费午餐":在这类问题上,不上检索同时赢得质量和成本。
5. 那另外 18 题呢
这一篇讲的是"记忆可解"那一半。另一半的结论正好相反,先把几个数放在这里,细节留给补篇二:
| 路线 | 记忆不可解档(18 题)F1 |
|---|---|
| 闭卷 | 0.108 |
| 经典 | 0.195 |
| smart | 0.372 |
| wiki | 0.409 |
| hybrid | 0.425 |
⇒ 在记忆兜不住的题上,多轮检索是真有用的 (相对经典 +0.21、相对闭卷 +0.30);但页面层与块层在这一档仍然没分开(wiki − smart 只有 +0.037,换口径/换轮次符号还会翻)------上一篇那个"编译成页面只赢 0.006"的结论,在这一档继续成立。
两档合起来才是完整的话 :检索的价值不在"更好的检索",而在"补上模型不知道的";一旦题目落在模型已经会的地方,多出来的检索只会增加换错的概率。
6. 结论与怎么用
- 先量"记忆底分",再谈检索增益。 做法很便宜:拿你自己的题集,不给知识库直接问一遍(同模型、3 轮)。如果底分已经高,说明你的题大量落在模型的记忆里------这时上检索要先做好"分数可能下降"的心理准备。
- 把"检索到的文本"和"模型的答案"分开对待。 本文量到的失败形态不是"检索不到",而是"检索到的东西覆盖了本来对的答案 "(§3.1~§3.4)。所以在工程上,检索更适合做引用与校验,而不是无条件重写答案------🤔 这是推断,但从这 12 题的现场看方向是明确的。
- 迭代 >> 更强的单次检索。 同一档里,"一次 top-k+一次生成"稳定垫底(0.534,三轮几乎不变),而带迭代的三条都在 0.69 以上。想只靠"加重排/把 top-k 调大"解决,本文的数据是相反的(§4)。
- 别忘了这一档的绝对上限。 0.917 不是"知识库能力",是"这批题模型本来就会"------它的用处是当参照线,不是当成绩。
边界重申 :这 12 题是按闭卷成绩挑出来的,偏向模型熟悉的领域(美国流行文化、历史年份这类)。换一份语料,这个比例会变,但机制不会------只要题目落在模型已有的记忆里,检索就在做"有可能把对的换掉"这件事。
附录
A. 记忆可解档 12 题逐题全表(✅ 实测,三轮均值 F1)
| 题号 | 跳数 | 金标准 | 闭卷 flash | 经典 | wiki | smart | hybrid |
|---|---|---|---|---|---|---|---|
| #2 | 2 | John D. Loudermilk |
1.00 | 1.00 | 1.00 | 1.00 | 1.00 |
| #3 | 2 | Fred O'Bannion |
1.00 | 0.00 | 1.00 | 0.67 | 0.67 |
| #6 | 2 | Claudia Wells |
1.00 | 1.00 | 0.67 | 1.00 | 1.00 |
| #7 | 2 | Karen Fairchild |
1.00 | 1.00 | 1.00 | 1.00 | 0.89 |
| #9 | 2 | 406 |
1.00 | 0.00 | 0.33 | 1.00 | 0.69 |
| #10 | 2 | Jennifer Connelly |
1.00 | 0.83 | 1.00 | 1.00 | 1.00 |
| #11 | 3 | Toronto Coach Terminal |
1.00 | 0.29 | 0.33 | 0.33 | 0.47 |
| #12 | 3 | Medieval Latin |
0.67 | 1.00 | 0.67 | 0.50 | 0.71 |
| #14 | 3 | New York City FC |
1.00 | 0.29 | 0.67 | 0.67 | 0.83 |
| #18 | 3 | 1941 |
0.67 | 0.00 | 0.67 | 1.00 | 1.00 |
| #23 | 4 | Saxony-Anhalt |
1.00 | 0.00 | 0.00 | 0.00 | 0.00 |
| #27 | 4 | 1905 |
0.67 | 1.00 | 1.00 | 1.00 | 0.89 |
加粗=该行最优(并列同加)。题面较长,只把正文里引用到的那几道(#3、#9、#10、#11、#12、#14、#18、#23、#27)译了出来。
B. 材料、口径与复现
被测对象 :Tencent/WeKnora(标准版 Docker Compose),对话模型 deepseek-flash(对照 deepseek-v4-pro),向量模型 qwen3.7-text-embedding,重排 qwen3-rerank。
语料与题集 :MuSiQue 可答子集,2/3/4 跳各 10 题(共 30 题);语料=这 30 题涉及段落的并集,572 个段落文件。
闭卷基线口径 :同模型直连 API,不给知识库也不给工具(无系统提示,只带一句作答格式约定),temperature=0.7、max_tokens=16384、内部推理默认开启;空答率单独记,不与答错合并。2 个模型 × 3 轮 × 30 题。
分档判据 :以闭卷 flash 为准,3 轮里 ≥2 轮 F1 ≥ 0.5 记"记忆可解"⇒ 12 题;其余 18 题记"记忆不可解"。稳健性做过两组:宽松口径(≥1 轮)为 16/14,换闭卷 pro 当分类器只有 #21、#29 换边。
token :该题所有 LLM 调用的 prompt + completion(按 (时间戳, purpose, prompt, completion, session) 去重后按题聚合);重排与向量检索的算力不计入 。闭卷侧取自直连 API 返回的 usage。
抖动=三轮 F1 的最大值与最小值之差(不是标准差)。
复现路径 (脚本在本仓库 experiments/weknora/):weknora_musique.py(建库/投喂/编译)→ weknora_qa_eval.py(agents/ask/score/tokens/mkarm)、closedbook_direct.py(闭卷基线)。数据产物在 data/tmp/weknora-musique/。