跳到主要内容

怎么知道它在编 — 三个「置信度」只有一个是真的

这一章讲三件事: 在 RAG 里,胡编是从哪几个具体位置钻进来的; 系统报出来的那个「有多大把握」的数,什么时候可信、什么时候是装饰; 以及不确定的时候还有哪几条路可走。 它在全书链条里的位置: 第 08 章交代了「怎么答」,这一章交代「凭什么信它」 —— 而这是这本书里唯一一处自带正反对照组的地方。

1. 顶层全景

用户的问题


检索:找回来 k 条 ─────────► 这几条**有多像**这个问题? ← 唯一的真信号
│ │
│ └─ 太低就该说「我没找到」

生成:写出一段答案

├─► 这段话有多少个字符? ← 和对错无关
├─► 这段话让另一个模型看看? ← 有用,但要用对
└─► 这段话被格式要求逼过吗? ← **格式能逼出胡编**

图说:图里四条线都被这本书当成「置信度」用过。 只有最上面那一条量的是真东西,而它偏偏是最少被当回事的那一条。

一句话链条: 胡编不是玄学,在 RAG 里它有三个具体入口 → 想拦住它,先得有一个能说明「我有多大把握」的数 → 而这个数只有在它量的确实是证据强弱时才成立 → 一旦不确定,除了照答之外还有两条路。

2. 胡编在 RAG 里的三个具体入口

先给这件事一个正式名字

机器一本正经地说出根本不存在的事 —— 这件事叫幻觉。 它不是程序出错:句子通顺、语气笃定、格式漂亮,只有内容是假的。

在 RAG 里,它多半有具体成因。 这本书自己印出了三种,一种不落:

入口发生了什么现场在哪
检索根本没找到库里没有相关内容,但取前 k 条照样凑够 k 条,交给模型的是一堆无关文字第 05 章:问「怎么减少胡编」,第二名返回「出国旅行长见识」
找到了,但那一块缺了指代对象块里只剩「It 可以帮助减重」,而 It 指谁被切掉了第 03 章那颗雷,第 10 章结账
被格式要求逼出来的素材只够写两句,而你要求它写满八十个词第 7 节 —— 这是全书最好的一处现场

这三条的修法完全不同: ① 靠给检索设门槛(第 05 章)、② 靠改切法(第 03 章)、 ③ 靠不要提死板的格式要求(第 7 节)。

而这一章要讲的,是它们共同的前一步:先得知道「这次到底靠不靠谱」。

3. 主走查:三个「置信度」,只有一个是真的

这一节是本章的主走查。这一章每个机制,在这条线上都占一步。

先说这个词:系统跟着答案一起报出来的那个「我有多大把握」的数,叫置信度。 它一般是 0 到 1 之间的一个数,或者「高 / 中 / 低」这样的档。

明着管三个数叫置信度。三处用的语料各不相同,下面逐处标出来。 (还有一个数书没这么叫,却和答案一起印了出来、长得一模一样,第 4 节收了它一行。)

出处用的什么语料怎么算的印出来的数它实际在量什么
① 配方 73一份讲 RAG 的小文档答案的字符数 ÷ 300,超过 1 就取 10.79答案有 236 个字符
② 配方 78同一份文档,另取 2 条1 减去检索距离,再裁进 0 到 1,取平均0.68一个换算没有依据的数
③ 配方 86第 08 章那两句话检索相似度取平均,>0.7 高 / >0.5 中 / 其余低0.280 → Low这两条证据有多像这个问题

第 ① 步:0.79 就是「答案有 236 个字符」

那一行代码写的是:答案的长度除以 300,超过 1 就按 1 算,保留两位小数1

书印出来的答案长这样(原样 236 个字符):
an architecture that combines the ability of large language models (LLMs)
with a retrieval system to enhance the factual accuracy, …

236 ÷ 300 = 0.7867 → 四舍五入 → 0.79

图说:这个数和答案对不对**一点关系都没有**。
同样这段话,把最后一句删掉,「置信度」就掉到 0.6;
让它啰嗦一倍,「置信度」就是满分 1.00。

这不是一个弱信号,是一个无关信号。

第 ② 步:0.68 的换算没有依据

那一行代码的注释写着「FAISS 的相似度是余弦距离,越小越近」,做法是 「1 减去每个分数」,再裁进 0 到 1 之间,取平均2

问题出在前半句。 第 04 章讲过三种量:

余弦相似度:范围 −1 到 1,**越大越近**
L2 距离 :从 0 起,没有 0 到 1 这个上界,**越小越近**

而这个库是按默认方式建的,取回来的是 L2 那一路的距离,不是余弦。
图说:「1 减去它」这个换算,是照着余弦的范围设计的,
**套在一个范围不同的量上就没有依据了。**

后果很具体: 距离一旦超过 1,「1 减去它」就是负数, 被后面那道裁剪强行压成 0 —— 于是一条毫不相关的文档和一条勉强相关的文档, 在这个数里一样是 0,分不出来。

判断(我们的,不是书里的): 我们认为 0.68 这个数不构成信号。 依据有两条:一是它的换算前提写错了(注释说余弦,实际是另一种量); 二是它的失效方式是单向的 —— 差的那一头会被压平到 0,而好的那一头照样往 1 靠, 所以它只会高估,不会低估。 如果错,会错在: 如果这个配方的嵌入模型输出恰好是单位长度的向量, 那么距离的取值范围就是有界的,「1 减去它」虽然仍不等于余弦相似度, 但至少是一个单调的量、名次不会错。 判据是把那两个原始距离打印出来 —— 而书只印了换算后的 0.68,没印原始值, 我们没法回核,所以这仍然是判断。

第 ③ 步:0.280 → Low,这是全书唯一一次系统说「我不太确定」

这一处用的是第 08 章那两句话,检索回来两条,各带一个相似度3:

- It reduces hallucinations by grounding answers … (score=0.391)
- Retrieval-Augmented Generation (RAG) is a technique … (score=0.169)

平均 = (0.391 + 0.169) / 2 = 0.280

分档:> 0.7 高 · > 0.5 中 · 其余低 → **Low**

图说:满分是 1,而最像的那一条只拿到 0.391。
**系统据此报了「低」——它承认自己心里没底。**

这一处为什么是真的:它量的是「交给模型的那几条证据,到底有多像这个问题」。

答案的质量上限,由证据的质量决定。 证据不像,答案就悬 —— 这条因果是成立的,所以这个数是信号。

三步放在一起看

① 量答案的长度 ← 答案越啰嗦,「把握」越大 荒谬
② 量检索的距离 ← 但换算的前提写错了 失真
③ 量检索的相似度 ← 证据越像,把握越大 成立

图说:三个数都印成了 0 到 1 之间的小数,摆在输出里长得一模一样。
**分辨它们的唯一办法是打开代码看那一行怎么算的。**

4. 怎么一眼分辨真假置信度

判据只有一条:这个数量的是「证据」,还是「输出的样子」?

量的是什么例子算不算信号
证据和问题有多像检索的相似度、重排的分数 —— 证据差,答案必然悬
有没有别的东西支持这个答案拿另一个模型核验(第 6 节),但要用对
答案和资料有多像第 08 章那个连答五遍挑一条的配方印的 0.906(书没管它叫置信度)半算 —— 见下
输出有多长字符数、词数、句数不算
输出长得像不像正经答案有没有分点、有没有引号不算

第三行那个「半算」是最难分辨的一种,因为它两头都沾。 它量的是「输出」和「证据」之间的距离 —— 上面那条判据在它身上给不出干脆的答案。

它确实看了资料,所以比按字数算的那种强得多。 但它奖励的是「抄得像」,而不是「答得对」 —— 一条把资料整段复述回来的答案,分数一定高过一条真正提炼过、换了说法的答案。 拿它当把握用,你会被一步步推向复述;而复述恰恰是第 08 章那条走查里的病。

还有一条实操建议:凡是自己写的置信度,都在旁边把原始的分数一起打印出来。 书里那三处,只有第 ③ 处这么做了 —— 也只有它能被读者当场核对。

5. 不确定的时候有三条路

书在这里只做了第一条,而三条各有用武之地。

做什么什么时候选它
① 报出来照常给答案,但把「低」标在旁边用户自己有判断力,比如内部工具
② 拒答不给答案,直说「资料里没有」错答的代价高 —— 医疗、法律、财务
③ 降级再来一次改写问题、换检索条件,再检索一遍问题本身问得含糊

第 ③ 条正是第 11 章那一章的全部内容 —— 那一章叫「代理式 RAG」, 核心就是「不够就再查一次」这个循环。

和第 05 章那道门槛划清界限

第 05 章讲过一道门槛:检索回来的候选,分数低于某个值就丢掉。 这一章的置信度长得像它,但拦的东西不同:

第 05 章那道门槛这一章的置信度
在哪一步检索之后、拼提示之前生成之后、交给用户之前
拦什么候选 —— 不够像的资料答案 —— 底气不足的回答
结果交给模型的资料变少,可能一条不剩答案照样生成,只是被打上标记或压下不发

两道关卡可以同时装,而且应该同时装。 门槛管「别拿垃圾喂它」, 置信度管「别把没底的话当结论发出去」。

6. 让另一个模型核验答案:书那次两个错叠在一起

想干什么

这是第 4 节表里第二类真信号:不看答案长什么样,看它有没有被证据支持。

做法是把答案拆成一条条断言,每条都拿去问一个专门的模型: 「拿这段资料当前提,这句断言是被支持、被否定,还是没关系?」

这类模型有个名字:自然语言推断模型。 它只回答这一件事,输出三选一 —— 支持(蕴含)、否定(矛盾)、无关(中立)。

书的做法与结果

书用的正是这类模型。而它印出来的结果是:两条断言全被判为「中立」, 支持率 0.0、矛盾率 0.04

两个错叠在一起,任何一个单独出现都会导致同样的结果:

错一:**没有成对地传进去。**
这类模型要的是「前提」和「假设」两个格子;
而代码把它们拼成一个字符串塞进了一个格子。
**模型于是只是在给一段普通文字分类,而不是在判断支持关系。**

错二:**标签大小写对不上。**
代码找的是大写的 ENTAILMENT / CONTRADICTION,
模型返回的是小写的 entailment / neutral。
**两个计数器永远加不到 1,所以两个比率必然都是 0.0。**

图说:输出里那两个 0.0 不是「答案没有被支持」的结论,
**是这段代码根本没在核验。** 而书把它当成功案例收了尾。

用对了会怎样

用对了,这是这一章第二个真信号,而且比检索相似度更贴近「答得对不对」。

检索相似度回答的是:**我找的资料对不对题**
核验模型回答的是: **我写的这句话,资料里到底有没有**

图说:前者管进料,后者管出货。**两个都装上,才算把两头都堵住。**

代价也要说清:每条断言都要跑一次模型,答案有五句就是五次。 它比检索相似度贵得多,所以一般只用在错答代价高的地方。

7. 另起一处:摘要长度写死,当场逼出一本不存在的书

这是本章第一处另起的走查,也是全书最值钱的一段现场: 它是唯一一处「同一件事、同一个工具、一次做错一次做对」的对照。

做错的那一次

书用一个专门做摘要的模型,把长度写死:最少 80 个词、最多 84 个词5

素材是一份讲 RAG 的短文档。 摘要出来是这样的:

Retrieval-Augmented Generation (RAG) is a method that combines retrieval
and generation. It reduces hallucinations by grounding answers in evidence.
It is especially useful in chatbots, search assistants, and education.
RAG can be used to build chatbots and search assistants for example.
For more information, visit the RAG website or read the book
**RAG: A Guide to Augmented Reality**.

图说:前三句是原文里有的。第四句已经在重复第三句。
**最后一句凭空造了一个网站和一本书** —— 而那本书的副标题
「Augmented Reality」(增强现实)和 RAG 里的 Augmented 根本是两码事。

这本书不存在,这个网站也不存在。

为什么会这样

素材里的真话 ≈ 只够写三句
你的要求 :**至少 80 个词**

写到第三句就没料了,而下限还没到

**它只能接着往下写。而它唯一会做的事,就是照着眼前的文字往下接。**

图说:这不是模型「不老实」,**是被下限逼的**。
下限是一条必须满足的硬要求,而真话的数量不是它能控制的。

做对的那一次

书在第 10 章有另一个配方,同一个摘要模型,长度改成按输入长度算出来6:

输入有多少个词 → 上限 = 这个词数的六成(不超过 100,不低于 30)
下限 = 上限的四成

那次输入是 51 个词 → 上限 30、下限 12

摘要出来是:
Retrieval-Augmented Generation (RAG) is a technique that reduces
hallucinations in large language models by grounding answers in
external evidence.

图说:这一句一字不差地来自原文第一句。**它没有编任何东西。**
书自己给这段输出的标题就叫「Faithful Summary」(忠实的摘要)。

关键的差别只有一处:下限从「写死的 80」变成了「输入词数的 24%」。 素材少的时候,要求也跟着少 —— 于是它不必凑字数。

判断(我们的,不是书里的): 我们认为这两处构成一组干净的对照 —— 同一个模型、同一类素材、同一件事,唯一改动的是长度参数,结果一个编、一个不编。 所以「把输出长度写死」应当被当成一种诱发胡编的设置来对待, 而不只是一个格式偏好。 如果错,会错在: 这两处的输入文本并不完全相同(一处约 60 词、一处 51 词), 而且第二处还多开了几个让输出更保守的开关。 严格的对照要在同一份输入上只改长度参数跑两次 —— 这个实验书里没做,我们也没有跑。

可带走的一条规矩

凡是「必须写满多少」的要求,都在给胡编开门。

❌ 至少写 200 字 ← 素材不够时,多出来的那部分只能编
❌ 一定要列出 5 条 ← 只有 3 条时,第 4、5 条是造的
❌ 每一段都要给出处 ← 没有出处的那段会被安一个

✅ 最多写 200 字
✅ 有几条列几条,没有就说没有

图说:上限是安全的,下限是危险的。 因为上限允许它少说,下限不允许它少说。

8. 另起一处:「把证据高亮出来」,而三条里两条是编的

这是本章第二处另起的走查。

想干什么

不只给答案,还把资料里支持这个答案的原句摘出来,让用户自己核。

书的做法

① 按关键词过滤:必须同时含 RAG 和 hallucinations,
或者含 reduces / grounding / factual accuracy 三者之一
② 把过滤出来的句子拼起来
③ **送进摘要模型再摘一遍**(上限 11 个词、下限 5 个词)
④ 把摘出来的东西按句拆开,作为「高亮的证据」列出来

第 ③ 步是这个配方的病根。

印出来的三条

- This reduces hallucinations by grounding answers in evidence. ← 接近原文
- This reduces hallucination by grounding **questions** in evidence,
rather than relying on a single source of information. ← answers 变成了 questions
- It can also reduce hallucinations by making it easier for people to
remember what they have been told. ← 原文里根本没有这个意思

图说:第二条把「把**答案**落在证据上」改成了「把**问题**落在证据上」——
一个词之差,说的是另一件事。第三条整句是造的。

病根:手段和目的相反

高亮证据要的是摘要做的是
输出从哪来原样摘出原文句子用自己的话重写
允不允许改字一个字都不许改改写就是它的工作

这两件事在方向上是相反的。 用「重写」这个动作去实现「原样摘出」,证据在这一步就被改坏了。

正确的做法是第 ① 步之后直接输出 —— 过滤出来的那些句子本来就是原文原句。 第 ③ 步是多余的,而且是有害的。

这两种做法在这一行各有名字:原样摘出叫抽取式,用自己的话重写叫生成式。 「证据」这件事只能用抽取式。

9. 作者的判断与证据

书里给了证据的:

说法证据
「若打分机制本身不可靠,过度依赖置信度会误导人」书自己那句话7;而同一章里两个假置信度当场坐实了它
检索相似度可以用来分高 / 中 / 低配方 86 的 0.391 与 0.169 → 0.280 → Low,数与档对得上
按输入长度动态算的摘要是忠实的那一句摘要一字不差来自原文第一句

作者只是断言、没有给证据的:

说法缺什么
配方 73 的 0.79 是「置信度」它是答案的字符数除以 300
配方 78 的 0.68 是「归一化到 0–1 的置信度」换算的前提写错了,而原始分数没有印出来
「批判性核验」核过了两个错叠在一起,两个比率必然都是 0.0
「证据高亮」高亮的是证据三条里两条是摘要模型改写出来的
摘要「聚焦于 RAG 如何减少幻觉」摘要末尾编出了一本不存在的书

10. 边界与局限

  • 书从没把三个置信度放在一起比过。 它们分散在两章里,各自都以「成功」收尾 —— 这个对照是我们做的。
  • 没有一处讨论过「置信度低了该怎么办」。 三条路里书只做了「报出来」。
  • 没有一处讨论过分档的阈值怎么定。 0.7 / 0.5 这两个数从哪来,书没说 (怎么定,第 12 章讲)。
  • 核验那个配方没有一次生效,而书没有察觉。
  • 那本编出来的书,书原样印了出来、一个字没评 —— 这一章的主题恰恰是「减少幻觉」。
  • 没有一处量过「有多少答案是编的」。 这需要评测,而评测是全书最大的洞(第 12 章)。

11. 可带走的

全章那条走查,一行写完:

同一本书里三个「置信度」—— 0.79 是答案的 236 个字符除以 300; 0.68 是拿「1 减去距离」换算出来的,而换算的前提写错了; 0.280 → Low 是两条证据的相似度(0.391 与 0.169)取平均,只有它量的是真东西。

另有一组对照:摘要长度写死 80 个词 → 编出一本不存在的书; 改成按输入长度算(51 个词 → 下限 12) → 一字不差地摘自原文

  1. 幻觉在 RAG 里有三个具体入口: 检索没找到、块里缺指代对象、被格式要求逼出来; 三条的修法完全不同;
  2. 分辨真假置信度只有一条判据:它量的是证据,还是输出的样子? 量证据的算信号,量长度、量格式的不算;
  3. 别信一个没有把原始分数一起印出来的置信度 —— 你没法核它;
  4. 检索相似度是最省事的真信号,因为答案的质量上限由证据的质量决定;
  5. 拿另一个模型核验答案是更贴近「答得对不对」的信号,但要成对地把前提和断言传进去, 而且它贵得多;
  6. 不确定时有三条路:报出来 / 拒答 / 改写问题再检索一次。 书只做了第一条;
  7. 检索门槛和置信度是两道不同的关卡: 一道拦候选,一道拦答案,应该同时装;
  8. 凡是「必须写满多少」的要求,都在给胡编开门。 上限安全,下限危险;
  9. 「把证据摘出来」只能用原样摘出那一种做法。 中间插一道改写,证据当场就被改坏了;
  10. 一个数长得像置信度,不等于它在量把握。 三个 0 到 1 的小数摆在一起, 肉眼分不出真假 —— 只能去看那一行代码。

12. 原文地图

主题原书章原文位置
置信度 ①:答案长度除以 300CHAPTER 7 Response Generation with LLM in RAG Systemstext/14-fm-introduction.txt:331(搜「len(answer_text) / 300」) · text/14-fm-introduction.txt:381(搜「confidence: 0.79」)
置信度 ②:1 减距离再裁剪,以及那句写错的注释同上text/14-fm-introduction.txt:1276(搜「FAISS similarity is cosine distance」) · text/14-fm-introduction.txt:1280(搜「sims = [1 - s for s in scores]」) · text/14-fm-introduction.txt:1328(搜「0.68」)
「打分机制不可靠时,过度依赖置信度会误导人」同上text/14-fm-introduction.txt:1194(搜「over-reliance on confidence scores can be misleading」)
核验:没成对传入 + 标签大小写对不上同上text/14-fm-introduction.txt:1079(搜「nli_model(f{claim} {text}」) · text/14-fm-introduction.txt:1113(搜「r[verdict] == ENTAILMENT」) · text/14-fm-introduction.txt:1184(搜「support_ratio: 0.0」)
置信度 ③:0.391 / 0.169 → 0.280 → LowCHAPTER 8 Prompt Engineering for RAG Systemstext/15-fm-introduction.txt:908(搜「if avg_score > 0.7」) · text/15-fm-introduction.txt:973(搜「score=0.391」) · text/15-fm-introduction.txt:981(搜「Confidence: Low」)
摘要长度写死 → 编出一本不存在的书同上text/15-fm-introduction.txt:1339(搜「max_length=84」) · text/15-fm-introduction.txt:1367(搜「RAG: A Guide to Augmented Reality」)
证据高亮:先过滤再摘要,三条里两条被改写同上text/15-fm-introduction.txt:1450(搜「keywords_all = ['RAG', 'hallucinations']」) · text/15-fm-introduction.txt:1478(搜「summary = summarizer(」) · text/15-fm-introduction.txt:1531(搜「grounding questions in evidence」)
摘要长度按输入算 → 忠实的摘要CHAPTER 10 Implementing RAG with Chainstext/17-fm-introduction.txt:434(搜「max_len = min(100, max(30, int(input_length * 0.6)))」) · text/17-fm-introduction.txt:478(搜「Dynamic length settings: min=12, max=30」) · text/17-fm-introduction.txt:486(搜「Retrieval-Augmented Generation (RAG) is a technique that reduces」)

Footnotes

  1. 出处:「CHAPTER 7 Response Generation with LLM in RAG Systems」第 331 段(text/14-fm-introduction.txt:331,搜「len(answer_text) / 300」),输出在第 381 段(text/14-fm-introduction.txt:381,搜「confidence: 0.79」)。答案本体在第 373 段(text/14-fm-introduction.txt:373,搜「an architecture that combines the ability of large language models」),数一遍正好 236 个字符,236 ÷ 300 = 0.7867,四舍五入就是 0.79。

  2. 出处:同章第 1276 段(text/14-fm-introduction.txt:1276,搜「FAISS similarity is cosine distance」)、第 1280–1284 段(text/14-fm-introduction.txt:1280,搜「sims = [1 - s for s in scores]」)与第 1328 段(text/14-fm-introduction.txt:1328,搜「0.68」)。这个库是用默认方式建的(text/14-fm-introduction.txt:1292,搜「vectorstore.similarity_search_with_score(query, k=2)」),取回来的是 L2 那一路的距离。书只印了换算后的 0.68,两个原始距离一个都没印。

  3. 出处:「CHAPTER 8 Prompt Engineering for RAG Systems」第 906–918 段(text/15-fm-introduction.txt:908,搜「if avg_score > 0.7」)与第 973–981 段(text/15-fm-introduction.txt:973,搜「score=0.391」)。这一处把两条证据各自的分数都印了出来,所以读者能自己把 (0.391+0.169)/2 = 0.280 算一遍 —— 三处里只有这一处做得到。

  4. 出处:「CHAPTER 7 Response Generation with LLM in RAG Systems」第 1079 段(text/14-fm-introduction.txt:1079,搜「nli_model(f{claim} {text}」)、第 1113–1117 段(text/14-fm-introduction.txt:1113,搜「r[verdict] == ENTAILMENT」)与第 1184–1186 段(text/14-fm-introduction.txt:1184,搜「support_ratio: 0.0」)。输出里两条断言的判定都是小写的 neutral(text/14-fm-introduction.txt:1176,搜「verdict: neutral」)。补充(不在书里,来自通用知识): 判断「前提是否蕴含假设」的模型要求把前提和假设分成两个输入传进去;把两者拼成一个字符串塞进单个输入,模型只会当作一段普通文本做分类。

  5. 出处:「CHAPTER 8 Prompt Engineering for RAG Systems」第 1339–1343 段(text/15-fm-introduction.txt:1339,搜「max_length=84」)与第 1367 段(text/15-fm-introduction.txt:1367,搜「RAG: A Guide to Augmented Reality」)。下限 80、上限 84,区间只有 4 个词宽,几乎等于「必须写满 80 个词」。

  6. 出处:「CHAPTER 10 Implementing RAG with Chains」第 434–436 段(text/17-fm-introduction.txt:434,搜「max_len = min(100, max(30, int(input_length * 0.6)))」)、第 478 段(text/17-fm-introduction.txt:478,搜「Dynamic length settings: min=12, max=30」)与第 486 段(text/17-fm-introduction.txt:486,搜「Retrieval-Augmented Generation (RAG) is a technique that reduces」)。这一处还另开了三个让输出更保守的开关(不随机采样、多候选择优、偏向更短),写在第 454–458 段(text/17-fm-introduction.txt:456,搜「num_beams=4」)。书自己给这段输出的标题是「Faithful Summary」(text/17-fm-introduction.txt:468,搜「=== Faithful Summary ===」)——「忠实」作为一项可以量化的指标,第 12 章讲。

  7. 出处:「CHAPTER 7 Response Generation with LLM in RAG Systems」第 1194 段(text/14-fm-introduction.txt:1194,搜「over-reliance on confidence scores can be misleading」)。原文的完整意思是:置信度打分在决策支持、研究、企业应用这些看重信任与可解释性的场合特别有用,但如果打分机制本身不可靠,过度依赖它会误导人。 这句话写在配方 78 的正文里 —— 而配方 78 恰恰就是那个不可靠的打分机制。