不检索比检索更准:模型已经会的题,上RAG后F1 掉 0.15~0.38,token 多花 3~34 倍——彻底搞懂LLMWiki第三篇补一

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/WeKnora v0.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 倍)------最准的方案同时最省

一句话 :在模型已经会的问题上,检索不是"锦上添花",而是"把对的答案换掉"。

三条边界(先说清)

  1. 一份语料、一个切片 :MuSiQue 可答子集里的 30 道题(2/3/4 跳各 10 道)中的这 12 题。而且它不是随机抽样------是按闭卷成绩划出来的,天然偏向模型熟悉的领域。
  2. 单模型族 :所有对照都在 DeepSeek 家族内(flash ⇄ v4-pro),跨家族没测。
  3. 判据是近似的 :单题用"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(重排与向量检索的算力不计入)。

三条读数:

  1. 闭卷逐轮全胜。 三轮各比一次,闭卷(0.917/0.833/1.000)每一轮都高于每一条检索路线 ------9 场对比,没有一次例外。而且检索路线自己的抖动(0.25~0.29)是闭卷(0.17)的 1.5 倍:加了检索不但更低,还更不稳。
  2. 经典路线是最差的一条,而且差得最"稳"。 0.534,三轮 0.548/0.548/0.506,抖动只有 0.042------它稳定地错。这和它"一次 top-k + 一次生成"的形态有关(§4)。
  3. 三条 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. 结论与怎么用

  1. 先量"记忆底分",再谈检索增益。 做法很便宜:拿你自己的题集,不给知识库直接问一遍(同模型、3 轮)。如果底分已经高,说明你的题大量落在模型的记忆里------这时上检索要先做好"分数可能下降"的心理准备。
  2. 把"检索到的文本"和"模型的答案"分开对待。 本文量到的失败形态不是"检索不到",而是"检索到的东西覆盖了本来对的答案 "(§3.1~§3.4)。所以在工程上,检索更适合做引用与校验,而不是无条件重写答案------🤔 这是推断,但从这 12 题的现场看方向是明确的。
  3. 迭代 >> 更强的单次检索。 同一档里,"一次 top-k+一次生成"稳定垫底(0.534,三轮几乎不变),而带迭代的三条都在 0.69 以上。想只靠"加重排/把 top-k 调大"解决,本文的数据是相反的(§4)。
  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/。

同系列 :总论 · 编译篇 · 检索篇(本篇的上一篇)------本篇是它的补篇一。

相关推荐
墨心@1 小时前
Bash 工具讲解
agent·harness
熊猫钓鱼>_>1 小时前
告别手工贴发票:增值税发票识别+核验,搭一条报销自动化流水线
人工智能·ai·职场和发展·自动化·大模型·llm·agent
RuoyiOffice1 小时前
SpringBoot3+Vue3 企业 AI 工作流:Tinyflow 画布、LLM 节点与在线试跑怎么落地
spring boot·大模型·vue3·agent·ai工作流·ruoyi office·tinyflow
武子康2 小时前
PUBACK 已到,灯还没亮:Agent 设备指令何时算完成?
人工智能·后端·agent
浮生望2 小时前
用 PostgreSQL + pgvector 保存 Agent 长期记忆:从三表模型到语义检索
agent
枫叶丹42 小时前
AGENTS.md 越写越长之后:如何管理 AI 的上下文
人工智能·chatgpt·开源·agent·codex
墨心@2 小时前
CreateWorkflow 工具
agent·coding agent·harness·zcode
武子康2 小时前
ESP32 唤醒词标称 98%,为什么还要自己做验收?
人工智能·后端·agent
墨心@4 小时前
AmendWorkflow 工具
人工智能·agent·harness