跳到主要内容

检索取对了吗 — 评它、改它、把文档连起来

这一章讲三件事: 一套检索系统好不好,怎么变成几个你能手算出来的数; 为什么「看回答里有没有原文没有的词」这个最朴素的幻觉检测法会同时冤枉好人、放过坏人; 以及不动索引、只从「问题」这一侧还能怎么改。

它在全书链条里的位置: 第 05 章搭起流水线,第 06–08 章讲清了「取」这一步的机制、 失效和规模。这一章是这条线的收口:先量,再改。 原书把这一块放在讲嵌入之前,我们挪到了后面——因为这一章从头到尾都在用嵌入和余弦相似度, 排在前面读者只能把这些指标当口诀背下来。

1. 顶层全景:拿 100 道题跑一遍第 05 章那套退货问答

第 05 章那套系统(礼品卡退货问答)+ 一套 100 道题的评测集

├── ① 取回 10 块,其中 7 块相关 → 检索精度 0.7
├── ② 问题和答案各算成向量,比夹角 → 答案相关度 0.85
├── ③ 100 道题答对 85 道 → 事实准确率 0.85
└── ④ 三个人各打 4、5、4 分 → 人评分 4.33

│ 可这四个数都不直接回答「它有没有编」

⑤ 往评测集里塞一条专门用来引诱它编的题

⑥ 拿最朴素的办法去判它:「回答里有多少词没在原文出现过」
→ **两头都错:同义改写被冤枉,照抄原词拼出来的假话被放过**

⑦ 换成让另一个模型当评审,按三项打 1–5 分

│ 量完了,接下来是改

⑧ 不动索引,只改「问题」这一侧:改写、扩写、先写一篇假想答案再去检索、按类型分流

⑨ 而有一类问题,不管怎么改都答不了:任何单独一份文档里都没有答案
→ 得先把文档里的实体和关系抽成一张图

图说:①–④ 是量,⑤–⑦ 是量「有没有编」,⑧–⑨ 是改。**顺序不能反:不量就只能凭感觉改。**

2. 四个手算得出的指标

这一节的价值在于:这四个数你今天下午就能算出来,不需要任何工具。

书选它们的标准是「相对好懂、好实现」1。四个都用第 05 章那套退货问答来走一遍:

① 检索精度:取回来的这几块,有几块是相关的

公式: 检索精度 = 相关的块数 ÷ 取回的块数

走查: 问「用礼品卡买的电子产品退货政策是什么?」
系统取回 10 块 → 人看一遍,7 块确实和这个问题有关
检索精度 = 7 ÷ 10 = **0.7**

图说:这个 7/10 是书里给的例子。**注意它量的是「取」这一步,和模型答得怎么样无关。**

它回答的是第 07 章那个问题:排在前面的有多少是真相关的。

② 答案相关度:答案和问题是不是一回事

做法: 把「问题」和「生成的答案」各算成一个向量,再算它们的余弦相似度

走查: 问题 → 向量 Q
答案 → 向量 A
余弦相似度(Q, A) = **0.85** ← 这就是答案相关度

图说:第 06 章那套东西在这里被直接拿来当尺子用。
**0.85 是书里给的例子。而余弦相似度怎么算,第 06 章第 3 节手算过一遍。**

这个指标的作用是抓「答非所问」: 答案再准,如果它答的是另一个问题,这个分会低。 但它抓不出「答得对不对」——一句「关于礼品卡退货,我们的政策是 90 天」 和问题的相关度照样很高。

③ 事实准确率:一百道题答对了几道

公式: 事实准确率 = 答对的题数 ÷ 总题数

走查: 100 道有标准答案的事实题,答对 85 道
事实准确率 = 85 ÷ 100 = **0.85**

图说:这是四个里最直白的一个,**也是唯一一个真正在量「对不对」的**。
代价是:每道题都要事先准备好标准答案。

④ 人评分:人打的分

做法: 定一张简单的评分表(比如相关性、连贯性、有用性各按 1–5 分)
让几个人各评一批回答,取平均

走查: 三个评审对同一条回答打了 4、5、4
人评分 = (4 + 5 + 4) ÷ 3 = **4.33**

图说:这四个数(4、5、4、4.33)是书里给的例子。
**它是唯一一个能抓到「读起来别扭」的指标,也是唯一一个规模化不了的。**

四个指标各管链条上的哪一环

用户问题 ──→ [检索] ──→ 取回的块 ──→ [生成] ──→ 回答
▲ ▲ ▲
│ │ │
① 检索精度 (没有指标覆盖) ② 答案相关度
③ 事实准确率
④ 人评分

图说:**注意中间那个「没有指标覆盖」的位置——「模型有没有忠实地用取回来的材料」**。
这正是第 05 章那条「给对了材料它照样可能编」落在的地方,也是本章第 4–5 节要补的洞。

3. 评测集该放什么:三件,其中一件最容易漏

这一节回答:那 100 道题从哪儿来。

第一件:五类问法要齐全

书列了五类,而它们各自压测系统的不同部位2:

问法例子它压测什么
基本事实题「Unlimited Elite 套餐月费多少?」单点检索准不准
比较题「Extra 套餐的流量和 Starter 比怎么样?」能不能同时取到两份材料再对比
排障题「我手机显示『无服务』,可能是什么原因?」能不能从症状找到原因
账单与账户题「怎么设置自动扣款?」操作类文档取不取得到
假设题「如果我超了每月流量会怎样?」最容易触发编造——因为答案常常不是原文直说的

目标是照着真实用户会问的广度来配,而不是照着你自己好答的那些题来配。

第二件:每道题配一份权威答案

评测集里每道题,都要从知识库里挑出最相关、最准确的那份材料当标准3: 产品规格书、正式政策文档(服务条款、隐私政策、计费政策)、排障指南、客服话术与常见问答。

第三件:专门放几条「引诱它编」的样例——这一件最容易漏

书的建议很反直觉:评测集里要故意放几条看着合理、其实含假信息的回答4

书给的例子非常好,值得原样记住:

问题: 「Unlimited Elite 套餐含 5G 吗?」

一条会骗过你的回答:
「是的,Unlimited Elite 套餐包含我们不断扩展的全国 5G 网络,
部分地区速度可达 10 Gbps。你还能免费获得高清流媒体和手机热点等高级功能。」

拆开看:
「包含 5G」 ← **真的**
「速度可达 10 Gbps」 ← **官方文档里没有这个数**
「免费送高清流媒体和热点」 ← **官方文档里没有这个承诺**

图说:**前半句真,后半截是编的。** 这才是幻觉在生产里的真实长相
——不是整条都假,是真话里掺假话。所以「整条打个标签」这种判法一开始就不够用。

为什么必须专门放这种样例: 你的评测集如果只有「答得对」和「答不出」两种情况, 你永远测不出系统在这种半真半假的场景下会怎样——而这恰恰是它最常见的失效方式。

4. 让另一个模型来当评审

这一节讲这一章的第一个承重机制,它在第 17 章还会以更完整的形态回来。

先看现象:500 条回答,人一条条审审不过来

上一节那四个指标里,只有人评分能抓到「半真半假」。但人评分不可能规模化。

闪购那天你的系统答了 5000 条,你没法请人把 5000 条都读一遍。

做法:把三样东西一起交给另一个模型

交给评审模型的三样:
① 用户的原问题
② 系统检索到的那几份文档
③ 系统生成的那条回答

让它按三项各打 1–5 分:
事实正确性 ── 「回答里关于漫游资费的说法,和检索到的官方费率表对得上吗?」
上下文贴切度 ── 「它有没有正面回答用户问的那件事?」
幻觉迹象 ── 「有没有无法核实的说法?有没有和检索内容矛盾的地方?」

低分的挑出来,交给人复核。

图说:三项的措辞是书里的原样。**注意第一项和第三项的区别:
一个问「说的和材料对不对得上」,一个问「有没有材料里根本没有的东西」。**
上一节那条 5G 回答,在第一项上不算太差(它确实含 5G),在第三项上会被抓住。

这套做法的名字叫评审模型(也常被叫作「让模型当裁判」)5

它的价值和它的代价

书说它真正的价值在于:能规模化地审。6 你可以把成千上万条回答一次性喂进去,让它把可疑的挑出来,人只看被挑出来的那一小撮。

但它有一个明显的问题,书在这一章没有说:评审模型自己也会编。 这一条要到第 17 章才展开——那里给了三条缓解办法,以及「为什么它的判决必须落成固定标签」。 在这一章你只需要记住一件事:评审模型是筛子,不是判决书。

5. 最朴素的幻觉检测法,两头都错

这一节是这一章最该带走的一节,而它讲的是书里一段代码的缺陷。

先看做法:数「有多少词没在原文出现过」

书这一章末尾那个示例项目里,自己写了一个判幻觉的函数。它的做法可以一句话说完7:

① 把回答拆成一堆词,去重,得到「回答词集合」
② 把所有检索到的文档拆成一堆词,去重,得到「原文词集合」
③ 数一数:回答里有多少词不在原文里
④ 幻觉比例 = 不在原文里的词数 ÷ 回答的总词数

比例越高,判定「编得越多」。

图说:这个做法的好处是**不用调任何模型、几行代码就能跑**。
它是一条基线——后面所有更好的做法都拿它当参照。

但它有两个盲区,而且方向相反

书没有说这两个盲区。我们把它们点出来,因为不点破的话,照抄这段代码的人会被它误导。

盲区一:同义改写会被冤枉成幻觉
─────────────────────────────────
原文: 「用礼品卡购买的电子产品可在 14 天内退成店铺积分。」
回答: 「若您使用礼品卡付款,这台电视在两周之内可以换成商店余额。」

完全正确的一句话。可是:
「两周」「商店余额」「付款」「电视」—— 原文里一个都没有
幻觉比例算出来很高 → **被判成严重幻觉** ✗ 冤枉

盲区二:照抄原文的词拼出来的假话会被放过
─────────────────────────────────
原文: 「用礼品卡购买的电子产品可在 14 天内退成店铺积分,或在 30 天内换货。」
回答: 「用礼品卡购买的电子产品可在 30 天内退成店铺积分。」

一句错话(把 30 天那一档的待遇按到了退款上)。可是:
每一个词都来自原文
幻觉比例 = 0 → **被判成完全没有幻觉** ✗ 放过

图说:**这两个例子是我们编的**,书没有给例子,也没有说这两个盲区。
但它们直接来自这个做法的定义:**它数的是「词从哪儿来」,不是「话对不对」。**

为什么这一节值得单独立着

因为这两个盲区不是这个函数写得不好,是「按词面比对」这条路本身的天花板。

一句话:词一样不代表意思一样,词不一样也不代表意思不一样。 任何按词面比对的判法,都逃不掉这一对盲区。

这一对盲区在第 17 章还会遇到一次——那里有一把从机器翻译领域搬来的、 同样按词面重叠打分的尺子,它踩的是同一对坑,我们不再重讲。

那该怎么办: 用上一节那种评审模型(它按意思判,不按词面判), 或者把回答拆成一条条可核实的主张逐条核(这是第 17 章的做法)。

6. 现成的评测套件:八个指标,而其中两个是重的

这一节讲一件具体的事:书列的一张表里有一处未定稿留下的错误,我们去源码里核实了。

书介绍了一套专门给检索系统做评测的开源工具,列了它的八个指标,全部是 0 到 1 的分8:

#书里的名字书给的定义
1忠实度生成的答案有多准确地反映了检索到的内容
2上下文相关性检索到的内容和这个问题有多相关
3上下文精度检索到的内容里,有多大比例是和回答这个问题相关的
4答案相关性生成的答案在多大程度上回应了这个问题
5上下文召回整个语料里的相关信息,有多少被检索进来了
6上下文精度(另一个译名)检索到的内容里,有多大比例真的被用在了生成答案上
7答案正确性生成答案的事实准确性
8答案相似度生成的答案和参考答案的语义相似度

第 3 条和第 6 条,书里用的英文名分别是 Context Precision 和 Contextual Precision—— 几乎是同一个词,而给的定义又确实不同。

我们去这个工具的源码里核实了

结论:这个工具里没有两个叫「上下文精度」的指标。 它有的是 context_precision(第 3 条那个)和 context_utilization (第 6 条描述的那个,直译是「上下文利用率」)9

所以第 6 条不是一个叫「Contextual Precision」的指标,是书把 context_utilization 写错了名字。

顺带核到的一件事,比纠错本身更有用: 这个工具里的「上下文精度」 不是简单地数「相关的占几成」,而是一个和排序有关的量—— 它看的是「相关的那几条有没有被排在前面」10这正好接上第 07 章那句「东西在,但排第 3 就是精度问题」。

判断(我们的,不是书里的): 这类评测套件的指标名字,是这个领域里最不稳定的东西。 同一个概念在不同工具里叫不同的名字,同一个名字在不同版本里量的是不同的东西。 所以对这类清单,正确的读法是:记住它量的是链条上的哪一环,不要记名字。 上面那张表真正有用的信息只有一句:八个指标分成两组——四个查「取得对不对」,四个查「写得对不对」。 如果错,会错在: 如果某个工具成了事实标准、名字被广泛沿用, 那记名字就有价值了(就像今天没人会把「余弦相似度」叫成别的)。 判据是:你在三份不同来源的文档里看到的是不是同一个名字。

7. 量完之后:不动索引,只从「问题」这一侧改

这一节讲一组便宜的改法。它们的共同点是:不重建索引、不换模型、不动文档。

做法一:把问题改写、扩写一遍再去检索

用户问的话往往又短又含糊,而文档里的说法又长又正式。 做法是先让模型把问题改写一遍:补上相关的关键词、把它重组成更接近文档措辞的样子11

更进一步是扩写:让模型生成同一个问题的好几种说法,各检索一遍,再把结果合并。

用户问: 「漫游怎么开?」

改写后: 「如何在移动套餐上开通国际漫游服务?」

扩写成三条:
① 「如何在移动套餐上开通国际漫游服务?」
② 「出国前需要做哪些设置才能使用手机网络?」
③ 「国际漫游的开通步骤」
→ 三条各检索一遍,把结果并起来

图说:**这三条改写是我们编的**,书只给了做法。
它治的是第 07 章那条「语义漂移」——用户的说法和文档的说法对不上。

做法二:先让它凭空写一篇「假想的答案」,再拿这篇去检索

这一步反直觉,所以要讲清它为什么管用。

做法: 先让模型对着用户的问题凭空编一篇答案文档(明知道可能是错的), 然后不拿用户的问题去检索,而是拿这篇编出来的文档去检索12

为什么这样反而更准:

【直接拿问题去检索】
问题: 「漫游怎么开?」 ← 短、口语、疑问句
文档: 「国际漫游服务开通流程:第一步…」 ← 长、正式、陈述句
两者的向量本来就不在一个「文体」上,夹角天然偏大

【先写一篇假想答案再去检索】
假想答案:「要开通国际漫游,请先在账户设置中找到…第一步…第二步…」
↑ 长、正式、陈述句 —— **和真实文档的文体一样**
文档: 「国际漫游服务开通流程:第一步…」
两者的向量天然更近 → 更容易命中

图说:关键在最后一句——**文档和文档的向量,比问题和文档的向量更接近。**
**这个解释是我们补的**,书只给了名字和做法,没有讲它为什么有效。

这套做法叫 HyDE(全称 Hypothetical Document Embeddings,直译是「假想文档嵌入」)。 这个名字必须留下:书只给了一句话,而你在任何一份检索工程的资料里都会撞见它。

它的边界也要说清:那篇假想答案里的具体事实很可能是错的——但没关系, 因为它只被用来「找路」,最终的回答仍然是照着真实取回的文档写的。 前提是你没有把那篇假想答案也塞进最终的提示词里。

做法三:按问题类型分流

给不同类型的问题建不同的索引,先分类再选索引13

用户问题 ──→ 先分类 ──┬─→ 「要摘要」 → 摘要索引
├─→ 「问产品」 → 产品索引
└─→ 「要排障」 → 排障索引

顺带的好处:分类这一步还能顺便决定「这个问题值不值得用贵模型」
—— 简单的发给小模型,复杂的发给完整模型。

图说:这个「顺带的好处」在第 18 章会长成一整节。

还有一条:改造嵌入模型本身

如果通用模型抓不住你这一行的说法(第 06 章那个「termination」问题), 还可以拿自己的数据去改造它。 书给的造数据方法有两条: 人工写「问题—文档」配对,或者拿现有知识库让模型生成合成问题14

书还提醒:加入新的文档类型(比如法律合同、产品目录)时,要重新训一遍。 (「改造模型本身」这条线是第 10、11 章的内容,那里讲得完整得多。)

8. 有一类问题,取块答不了

这一节讲这一章最后一个机制,而它回答的是第 05 章埋下的那个线索。

先看现象:任何单独一份文档里都没有答案

回想第 05 章那个例子:「这台 55 寸电视,把后排座椅放倒,塞得进我的普锐斯吗?」 ——它需要同时取到两件事再做比较。

书这一节给的例子更典型:

「公司第一季度提到的风险,和第三季度提到的应对措施之间是什么关系?」15

这类问题的共同点:答案不在任何一份文档里,它在文档之间的关系里。

标准的取块做法:
把问题算成向量 → 找最像的几块 → 塞给模型

可这个问题里的「风险」和「应对措施」分别写在两份不同的季度报告里,
**而「它们之间的关系」在两份报告里都没有被写下来。**

你取回再多块,也取不到一句原文说出这个关系。

图说:**这不是取得不够多的问题,是它根本不在文本里。**

做法:先把文档里的实体和关系抽出来,连成一张图

① 用模型通读文档,抽出里面的实体(人、机构、概念)和它们之间的关系
例: 「供应链延迟」 --导致--> 「Q1 交付风险」
「双供应商策略」 --缓解--> 「供应链延迟」

② 这些「点 + 连线」组成的东西,就叫一张知识图谱

③ 把图里连得紧的点聚成一个个小团,每个团生成一份摘要,再往上一层聚、再摘要

④ 提问时,可以顺着连线一跳一跳地走,也可以直接读某一层的摘要

走查: 问「Q1 的风险和 Q3 的应对措施什么关系?」
→ 顺着 「供应链延迟」--导致--> 「Q1 交付风险」
「双供应商策略」--缓解--> 「供应链延迟」
→ 得到结构化的结果:{风险: 供应链延迟, 应对: 双供应商策略}
**而这个连接,原本的两份文档里谁也没写。**

图说:上面这两条关系取自书里那个例子的原样。
**「先抽实体和关系、再按社区分层摘要」的这套做法叫 GraphRAG**,由微软在 2024 年提出。

什么时候该用它:书给了一张干净的对照

用标准取块用这套图的做法
「我们的退货政策是什么?」「各地区的政策有什么不同?」
找具体的事实跨文档归纳主题
单份文档就能答要一跳一跳地连着推
对响应速度要求高复杂的分析型问题

代价必须说清

它让建索引的开销显著变大。16

因为第 ① 步要用模型通读每一份文档、抽出实体和关系—— 这是一次全库规模的模型调用,而标准做法只需要算一遍向量。

判断(我们的,不是书里的): 这套做法值不值得,取决于你的用户问的是哪一类问题, 而这件事你可以先量再决定:把最近一千条真实提问抽样两百条, 人工标一下「这条能不能靠单份文档答」。 如果九成以上都能,那这套图的做法对你就是纯成本。 如果错,会错在: 如果你的用户之所以不问跨文档的问题,是因为他们早就知道系统答不了 (于是根本不问),那这个抽样会低估需求。 判据是:去看看被转人工的那些问题里,有多少是跨文档的。

9. 作者的判断与证据

书里给了证据的:

说法证据是什么
四个手算指标每个都配了一个具体算例(7/10、0.85、85/100、4.33)
评测集要放引诱它编的样例一条极好的具体样例(5G 那条半真半假的回答)
评审模型能规模化地审一条做法描述 + 三项评分标准的原文措辞
那套评测工具的八个指标一张清单。而其中两条重了,我们去源码核实并改正了
图的做法适合哪类问题一张对照表 + 一个具体的跨文档问题

作者的推测或没给证据的:

说法它是什么
那个朴素的幻觉检测函数一段示例代码,书没有给它任何局限说明——两个盲区是我们补的
「HyDE 生成完整文档以支持更深的语义搜索」一句话带过。它为什么有效,书没讲——我们补了
查询改写、扩写、路由各一段描述,没有效果数据
「建索引开销显著变大」一句定性判断,没有量化

10. 边界与局限

  • 这一章的四个指标没有一个覆盖「模型有没有忠实地用取回的材料」。 这正是第 05 章那条「给对了材料它照样可能编」落的地方——要到第 17 章才有真正的量法;

  • 评审模型自己会编这件事,这一章一个字没提(第 17 章才讲);

  • 没有说这些指标该到多少算及格。 检索精度 0.7 是好是坏?书没有任何参照;

  • 书里那个朴素检测函数没有任何局限说明——我们点出的两个盲区,是这一章最重要的补充;

  • HyDE、查询路由、微调嵌入模型都只有一两句话。 尤其 HyDE, 书只给了名字和一句描述,为什么有效完全没讲;

  • 那张八指标清单里的重复我们核实并改正了(见第 6 节), 但这类工具的指标名字会随版本变,建议以你手上那个版本的文档为准。

11. 可带走的

全章那条走查,一行写完: 第 05 章那套退货问答 + 100 道题 → 取回 10 块 7 块相关,检索精度 0.7 → 问题和答案的向量夹角,答案相关度 0.85 → 100 题答对 85,事实准确率 0.85 → 三人各打 4、5、4,人评分 4.33 (这四组数是书里的算例)→ 塞一条「Unlimited Elite 含 5G」的半真半假样例 → 拿「有多少词没在原文出现」去判它:同义改写被冤枉、照抄原词拼的假话被放过 → 换成评审模型按三项打 1–5 分 → 再从问题这一侧改(改写、扩写、假想文档、分流)→ 最后遇到「任何单独一份文档里都没有答案」的问题,得先把文档连成一张关系图。

  1. 不量就只能凭感觉改。 这一章四个指标今天下午就能算出来,不需要任何工具;
  2. 检索精度量「取」,答案相关度量「答没答那个问题」,事实准确率量「对不对」,人评分量「读着别不别扭」;
  3. 四个都覆盖不到「模型有没有忠实地用取回的材料」——这个洞第 17 章才补上;
  4. 评测集三件:五类问法齐全、每题配权威答案、 而最容易漏的一件是专门放几条半真半假的样例;
  5. 幻觉在生产里的真实长相不是「整条都假」,是「真话里掺假话」;
  6. 评审模型能规模化地审:把问题、材料、回答一起给它,按三项打分,低分的交给人; 但它是筛子不是判决书(它自己也会编,第 17 章讲);
  7. 「数有多少词没在原文出现」这个最朴素的检测法两头都错: 同义改写被冤枉,照抄原词拼出来的假话被放过。 这是按词面比对这条路的天花板;
  8. 评测套件的指标名字不稳定——记它量的是链条上的哪一环,别记名字;
  9. 不动索引也能改: 把问题改写扩写、先写一篇假想答案再去检索(HyDE)、按类型分流;
  10. HyDE 之所以管用,是因为文档和文档的向量比问题和文档的更接近;
  11. 有一类问题取块答不了:答案不在任何一份文档里,在文档之间的关系里。 得先抽出实体和关系连成图,代价是建索引的开销显著变大。

12. 原文地图

主题原书章原文位置
评审模型的三项评分标准Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:595(搜「evaluator LLMs come in」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:607(搜「Hallucination Indicators」)
规模化地审Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:618(搜「at scale」)
五类问法Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:672(搜「Basic factual questions」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:680(搜「Hypotheticals」)
权威答案来源Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:690(搜「Product spec sheets」)
那条半真半假的 5G 回答Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:703(搜「Unlimited Elite plan include 5G」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:708(搜「specific speed claims」)
四个手算指标Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:751(搜「7 / 10」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:761(搜「0.85」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:772(搜「85 / 100」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:782(搜「4.33」)
八个指标的清单Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:786(搜「Faithfulness」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:793(搜「Context Precision」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:802(搜「Contextual Precision」)
那个朴素的幻觉检测函数Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1485(搜「def hallucination_score」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1490(搜「hallucination_ratio」)
查询改写与 HyDEChapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1202(搜「Query rephrasing」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1204(搜「HYDE」)
查询路由Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1209(搜「Query routing」)
微调嵌入模型的造数据方法Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1179(搜「synthetic question generation」)
跨文档的问题与知识图谱Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1222(搜「Q1 risks relate」) · text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1224(搜「introduced by Microsoft in 2024」)
什么时候用哪一种Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1237(搜「How do policies differ by region」)
建索引开销显著变大Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1298(搜「significant indexing overhead」)
那个跨文档的连接结果Chapter 3: Grounding Outputs with RAGtext/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1304(搜「Supply chain delays」)

Footnotes

  1. 出处:「Chapter 3: Grounding Outputs with RAG」第 738 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:738,搜「metrics that can help us evaluate」)。书自己说选的是「相对好懂、好实现」的那几个。

  2. 出处:「Chapter 3: Grounding Outputs with RAG」第 672 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:672,搜「Basic factual questions」)起的五类。「它压测什么」那一列是我们加的,书只列了类别和例子。

  3. 出处:「Chapter 3: Grounding Outputs with RAG」第 690 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:690,搜「Product spec sheets」)。

  4. 出处:「Chapter 3: Grounding Outputs with RAG」第 703 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:703,搜「Unlimited Elite plan include 5G」)与第 708 段(同文件 :708,搜「specific speed claims」)。原文点破的是:这条回答里的具体速度数字和「免费高级功能」在官方文档里都不存在

  5. 出处:「Chapter 3: Grounding Outputs with RAG」第 595 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:595,搜「evaluator LLMs come in」)与第 607 段(同文件 :607,搜「Hallucination Indicators」)。三项标准的原文措辞分别是 Factual Correctness、Contextual Appropriateness、Hallucination Indicators。

  6. 出处:「Chapter 3: Grounding Outputs with RAG」第 618 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:618,搜「at scale」)。

  7. 出处:「Chapter 3: Grounding Outputs with RAG」第 1485 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1485,搜「def hallucination_score」)与第 1490 段(同文件 :1490,搜「hallucination_ratio」)。书对这个函数没有给出任何局限说明——上面那两个盲区是我们补的。

  8. 出处:「Chapter 3: Grounding Outputs with RAG」第 786 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:786,搜「Faithfulness」)起的八条。这套工具的名字叫 RAGAS。

  9. 补充(不在书里,依据我们自己的书架):我们去这套工具的源码里核实了书里第 3 条和第 6 条的重名问题。依据: shelf=ai-frontier-reference/ragas@src:src/ragas/metrics/_context_precision.py:311 与 shelf=ai-frontier-reference/ragas@src:src/ragas/metrics/_context_precision.py:321 事实=源码里定义的是两个不同名字的指标——context_precision(带参考答案的那一个)和 context_utilization(不带参考答案、看检索内容被用了多少的那一个),没有任何一个指标叫 contextual precision。书里第 6 条描述的正是 context_utilization

  10. 补充(不在书里,依据我们自己的书架):依据: shelf=ai-frontier-reference/ragas@src:src/ragas/metrics/_context_precision.py:84 事实=源码的类文档字符串写着它是一个平均精度类的量,评估的是「模型选出的相关条目有没有被排得更靠前」——也就是说它是和排序有关的,不是简单的比例。 这正好接上第 07 章那条「东西在但排第 3 就是精度问题」。

  11. 出处:「Chapter 3: Grounding Outputs with RAG」第 1202 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1202,搜「Query rephrasing」)。

  12. 出处:「Chapter 3: Grounding Outputs with RAG」第 1204 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1204,搜「HYDE」)。书对这个做法只有一句话,没有解释它为什么有效;上面那段「文体对不上」的解释是我们补的,来自通用知识。

  13. 出处:「Chapter 3: Grounding Outputs with RAG」第 1209 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1209,搜「Query routing」)。

  14. 出处:「Chapter 3: Grounding Outputs with RAG」第 1179 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1179,搜「synthetic question generation」)。

  15. 出处:「Chapter 3: Grounding Outputs with RAG」第 1222 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1222,搜「Q1 risks relate」)与第 1224 段(同文件 :1224,搜「introduced by Microsoft in 2024」)。那两条具体的关系(供应链延迟、双供应商策略)在第 1304 段(同文件 :1304,搜「Supply chain delays」)。

  16. 出处:「Chapter 3: Grounding Outputs with RAG」第 1298 段(text/06-ch03-chapter-3-grounding-outputs-with-rag.txt:1298,搜「significant indexing overhead」)。