跳到主要内容

评测 — 没有反馈环,改提示就是盲飞

这一章讲三件事: 「改一句、跑一遍、看一眼」为什么不算评测; 一架从「拇指评分」到「模型互评」的评测梯子,每一级用工程量换可信度; 以及全书收口处的一个完整实验——四种提示策略、三个案例、各跑十次以上,用一把能量化的尺子选出胜者。 对应原书第 1 章的评测节、第 3 章的自评与分类、第 4 章的评测工具、第 10 章的风格实验——评测散在原书各处,这一章把它们收拢。

1. 这一章讲什么

第 01 章立过原则四(评质量),还搭了一个最小反馈环:两个提示变体各跑 5 次、打乱盲评、按赞踩,变体 A 得 0.2、变体 B 得 0.6。那一节只立了概念:没有反馈环,往好里调提示就等于蒙眼飞行。

这一章回答接下来的问题:反馈环有哪些档次?各自花多少工程、换多少可信度?提示工程里的优化(optimization:反复试、挑出更好提示的那个循环)从来不是一次性动作,而是「改 → 测 → 再改」——第 01 章讲了怎么改,这一章讲怎么测。主走查是原书第 10 章的风格改写实验:一个博客写作系统里有一步「把草稿改写成目标风格」,作者为这一步设计了四种提示策略,用一把可以算出来的尺子选出了胜者。这个实验把本章的每件工具都用上了,我们拿它从头走到尾。

2. 顶层全景:评测是一架梯子

可信度 ↑
│ 两两对比 + 评分榜(Elo) 跨提示、跨模型的公平比较
│ LLM 当裁判 批量评,比人评便宜一个数量级
│ 程序化指标 能不调模型就不调:量长度、精确匹配、算距离
│ 拇指评分(打乱盲评) 最小反馈环,10 次以内抓出偏差
│ 肉眼(盲提示) 一次性任务够用,生产环境裸奔
└──────────────────────────────────→ 工程量与成本

图说:梯子没有「该爬到哪一级」的标准答案——取决于这个提示被调用的次数、
答错的代价。一次性任务停在最低一级完全合理;每天跑几千次的生产提示,
停在最低一级就是事故预备队。

3. 核心原理

3.1 什么时候才需要评测

先把边界画清楚。书里说得很直白:一次性、用完即弃的提示,盲提示(blind prompting,改一句跑一遍看一眼)完全够用;要复用、要进生产系统的提示,必须更严格地量结果1

还有一个容易被忽视的理由:模型在换代。书里的原话是,没有人能保证「上一个模型上好用的提示,换个模型还一样好用」——所以新模型发布时,业界看的是 evals(评测集:一组带 predefined 答案或评分标准的标准化考题,用来横向测各个模型)2。你对自己的提示也该有一套这样的考题:模型一换,重考一遍,才知道提示要不要跟着改。

3.2 拇指环之外:评分数据的三条出路

第 01 章的拇指环(各跑 5 次、打乱盲评)是最小配置。书里还给了它的三条延伸,都不是「评完就扔」:

  1. 评分可以变细。 从赞/踩升级成 3 分、5 分、10 分制,拿到更细的粒度3;
  2. 评分驱动瘦身。 边改边测常常能大幅缩短提示——提示里的很多元素「完全多余,甚至起反作用」;提示变短意味着每次调用更便宜、更快,省的是真金白银4;
  3. 评分攒成训练数据。 攒下的「哪个回答好」可以回流成微调(fine-tuning,第 02 章:在预训练模型上再训一轮)的例子——几千个例子之后,微调开始胜过提示工程5

代价也要照实记:手动评分很烦,而且你的口味不代表目标用户的口味6。拇指环是点火器,不是发动机。

3.3 程序化评测:能不调动模型就别调

评分不一定非要「看」。书里的原则是:只要能写成程序,就先别调模型——比如「量一量回答的长度」,瞬间跑完、成本几乎为零7。书里列了一张「什么时候值得程序化评测」的动机清单,抄其要点:成本(提示太长、模型太贵)、延迟(等回答要花的时间)、调用次数、分类准确率、推理正确率、幻觉检测、安全与拒答、对抗攻击、和参考答案的相似度8

其中「和参考答案比」需要一个概念:ground truth(标准答案——测试案例的标准输出,可以人写,也可以让更强的模型生成)。有了标准答案,比较就能自动化:最简单的是精确匹配(输出和标准答案一字不差得 1 分,否则 0 分)——书里用 GPT-4 给一批金融交易描述生成标准答案,再拿它考 Mistral 模型,精确匹配得分 77.5%9

但很多任务「对」不等于「一字不差」。这时用两把软尺子:一把量字符串(一串字符)距离(Levenshtein 距离:把输出改成标准答案,最少要增删改多少个字符;适合允许少量出入的场景)。

另一把是嵌入距离(embedding distance:把两段文本各自转成一串数——第 02 章的嵌入——再算两串数离多远,最常用余弦(三角形里邻边比斜边的那个比值)相似度来量——方向有多一致,接近 1 为像;量的是意思上的出入)——主走查的风格实验用的就是后者10

3.4 分类与多数表决

分类是结构化任务里最常见的一种:给一段文本贴标签(好评/差评/中立)。第 03 章讲过「只许回一个单词」的格式约束,这一节补一个可靠性技巧:多数表决(majority vote)——同一段文本让模型独立分类三次,取出现次数最多的那个标签11

为什么有效?第 02 章讲过:模型每次生成都带随机,单次分类可能凭运气出错。书里的比方:10 个水果里 6 个是苹果,苹果就是多数——三次独立分类取多数,一次手滑会被另外两次盖过去。书里管这个效果叫降方差(variance:同一个输入重复跑,结果之间的离散程度;方差小,输出才稳)11。书里的演示:同一段文本分三次,多数表决收在「中立」上12

代价同样直白:调用次数乘三,时间和钱都乘三。所以这是分类专用——生成任务没有「多数」可取。

3.5 LLM 当裁判:便宜一个数量级,但裁判也要被评测

人评最准,但又慢又贵。书里给的数字对比:用模型评模型(书里叫合成评测,synthetic evaluation),通常便宜一个数量级,几分钟跑完,而人评要几天到几周7。这不是书里的空想——2023 年 Vicuna-13B 模型发布时,就是用 GPT-4 来给它的回答打分的13

但书里给了一条同样重要的纪律:裁判本身要被评测。 做法是准备两组测试案例——一组「明知有问题」、一组「明知没问题」——拿去考裁判,数两类错误:假阳性(没问题的案例,裁判硬说有问题)和假阴性(有问题的案例,裁判放过去了)14。书里的实测:简单的评分项(比如「够不够简洁」),GPT-4 当裁判的准确率接近 100%;复杂的评分项,就必须先评裁判再信裁判14

LangChain 那章还补了一条相关警告:拿 GPT-4 评 GPT-4 自己的输出时,要人工复核裁判的理由——它做不好一件事的时候,往往也评不好那件事15

3.6 两两比较与评分体系

「打绝对分」有个毛病:7 分和 8 分差多少,全看裁判心情。更稳的姿势是两两比较(pairwise comparison):把两份输出并排给裁判,问「哪个好、为什么」。LangChain 里的对应工具会强制裁判给出理由——这个理由本身就是调试线索:你能看到一种策略赢在哪15

两两比较攒多了,就能排出名次。书里点了业界在用的体系:Elo 评分(国际象棋的排名算法:赢家从输家身上挣分,分差越大挣得越少)和它的应用 Chatbot Arena(lmsys.org 办的模型擂台,真人盲投两两对比,攒出模型总榜)3

至此,梯子顶层也讲完了。回头看:拇指评分是「一个人对一份输出按赞」,Elo 是「全网对无数对输出投票」——同一个动作的工程化两端

3.7 图像侧:排列组合提示与网格

图像没有「标准答案」,评测怎么落?书里的做法在第 01 章露过面,这里给全名:排列组合提示(permutation prompting)——把想试的选项写成 {stock photo, oil painting, illustration} × {four, eight} 这样的组合,每个组合生成一张图(这个例子是 3 种格式 × 2 种人数 = 6 条提示 6 张图),然后把图排成网格扫一眼,哪个元素起了什么作用一目了然16

两个工程细节:有 API 的模型(如 Stable Diffusion)可以固定随机种子(random seed,控制生成时那串随机数的起点),同一个种子同一提示出同一张图——评测因此可复现,你比的就真的是提示的差异,不是运气17

3.8 主走查:风格改写实验,从头走到尾

背景:第 14 章会完整拆解的博客写作系统里,有一步是把 AI 草稿改写成作者 Mike 的个人风格。作者的原话:这一步实际做起来是整个写作流程里最难搞对的,也是唯一必须动用最贵的 GPT-4 的环节18。怎么为这一步选提示?他们没凭感觉,做了一次完整实验:

第 1 步|造标准答案:选 3 个主题(模因学、摩天楼技巧、价值定价),
先让 ChatGPT 各写一段,再由 Mike 亲手改写成目标风格,
得到 3 篇参照文本。
第 2 步|造候选策略,4 种:
A 对照组——直接用原来的提示,不给任何样本;
B 一篇样文——给 GPT-4 一篇 Mike 的文章,让它先描述风格再照着改写;
C 三对范例——给 3 对「原文 → 改写后」,让它从对照里归纳风格;
D 三篇成品——只给 3 篇成品,不给原文。
第 3 步|跑:4 策略 × 3 案例,每个组合跑 10 次以上,共 120+ 篇输出。
第 4 步|量:每篇输出和对应参照文本,各用 OpenAI 的嵌入模型
(text-embedding-ada-002)转成一串数,算两串数的余弦相似度
(cosine similarity:一种量「两串数方向有多一致」的方法,
越接近 1 越像),折成距离分——分越低,改写越像 Mike 本人。
第 5 步|选:平均分最低的策略胜出。书里给出了胜出提示的全文——
一份七条的写作风格描述(信息量足、结构清晰、对话感但专业、
可操作、平衡、有例子有类比、直接清楚)[^19]。

(第 1、2、4 步的每一处都对应本章的一件工具:标准答案 = ground truth;候选 = 提示变体;尺子 = 嵌入距离;「各跑 10 次以上」是多数表决那一节「多跑几次压方差」的同一道理——模型的回答有随机性,跑得少了,你会把运气当成策略的差距19。)

这个实验有两句结语值得抄下来。其一:不测,你猜不到哪种策略会赢——作者自己也没猜到20。其二:测试不必很正规才有效——GitHub Copilot 的团队都承认,他们的评测过程「haphazard and messy」(杂乱无章),但把事情办成了20。书里还指了两条更远的路:微调(OpenAI 建议至少 50 个样本)和 DSPy(一个自动调提示的框架:你定义好指标——用来自动打分的那把尺子,比如嵌入距离——它替你试不同的指令与例子组合,挑出胜者)21

4. 作者的判断与证据

  • 拇指环、多数表决、LLM 裁判、风格实验,全部有书里的代码或真实输入输出撑着,不是主张;
  • 「程序化评测动机清单」书里自己标注了「不是穷举」8——那是两位作者的工程经验清单;
  • 「Copilot 团队评测杂乱无章」是作者的转述,没有给出处20;
  • 「几千个例子后微调胜过提示工程」书里配了图(图 1-13),但原始数据未给出——当作经验法则用5;
  • 风格实验的参照文本和代码在书的公开 GitHub 仓库里,作者邀请读者去打破他们的分数22

判断(我们的,不是书里的): 这架梯子有一个共同的深层结构——每一级都在把「我觉得好」换成「可重复的程序」。拇指环把口味变成 0 和 1;程序化指标把判断变成代码;LLM 裁判把阅读变成流水线作业;Elo 把单次偏好变成排名。提示会随模型换代过时,而这套「你定义的什么叫好」的考题不会——它是提示工程里唯一沉淀得下来的资产。书里「没有保证提示能迁移到新模型」那句2,正是这套资产存在的理由。 如果错,会错在: 如果任务本身消失、或「好」的定义变了(品牌改版、受众更换),考题同样贬值。评测资产保值的前提是「任务和口味都稳定」。

5. 边界与局限

  • 嵌入距离量的是「像不像参照文本」,不是「好不好」。 一篇比 Mike 本人更好的改写,会因为「不像」而得分更差。这把尺子只在「目标就是模仿」时成立;
  • LLM 裁判的偏见书里没展开。 书里只讲了「用已知答案考裁判」,没讲裁判的系统性偏好(比如偏爱长回答、偏爱自家模型的措辞)——那是 2024 年之后评测研究的热门话题,本书定格在之前;
  • 图像侧评测仍靠人眼扫网格。 书里给的最强手段是固定种子加排列组合,没有自动指标——图像的自动评测当时(2024)还不成熟;
  • 多次跑的账单会累积。 书里自己提醒:大规模测试的成本、GPT-4 的速率限制,都会成为瓶颈7;
  • 这些工具写于 GPT-4 时代;今天各家框架都有评测模块,但梯子的层级关系和「裁判要被评测」的纪律没有变。
  • 与姊妹书《Prompt Engineering for LLMs》的分工:评测这个主题两本各讲一半。 本书这章是工程梯子(拇指环、程序化指标、LLM 裁判、两两比较);那本第 13 章讲评估方法论的另一半(SOMA 式评分细则、线上指标)——想往深走一步,去读那章。

6. 可带走的

  1. 先问这个提示用几次:一次性的,盲提示就够;进生产的,必须建反馈环;
  2. 最小反馈环 = 两个变体各跑 5 次、打乱盲评——不到 10 次就能抓出上线后才会撞见的偏差;
  3. 能写成程序的判断,就别调模型:量长度几乎不要钱;
  4. 分类任务:独立分三次取多数,用三倍的调用换方差下降;
  5. 用模型评模型之前,先用「已知有问题/没问题」的案例考评裁判,数假阳性和假阴性;
  6. 两两比较要带理由——理由是调试线索,不只是分数;
  7. 图像评测:选项写成排列组合,一次生成、网格对比,固定种子才能复现;
  8. 评分数据别扔:它能回流成微调样本,几千条之后微调胜过提示工程;
  9. 不测,你猜不到哪个提示会赢——Copilot 团队的评测都杂乱无章,但他们测了。

7. 原文地图

主题原书章原文位置
盲提示的适用边界Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:432(搜「blind prompting」)
evals 的定义Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:434(搜「standardized set of questions」)
评分变细、Elo 与擂台Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:771(搜「Elo rating」)
评测驱动提示瘦身Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:719(搜「radical decreases」)
评分回流微调Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:767(搜「few thousand examples」)
拇指评分的代价Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:717(搜「less than 10 test runs」)
程序化评测动机清单Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:721(搜「not an exhaustive list」)
多数表决Ch.3 标准做法text/23-fm-self-eval-llm-responses.txt:144(搜「majority vote」) · text/23-fm-self-eval-llm-responses.txt:148(搜「three times」)
合成评测的成本对比Ch.3 标准做法text/23-fm-self-eval-llm-responses.txt:297(搜「order of magnitude less」)
裁判的假阳性/假阴性Ch.3 标准做法text/23-fm-self-eval-llm-responses.txt:291(搜「false positives」)
GPT-4 生成标准答案Ch.4 LangChain 进阶text/25-fm-environment-setup.txt:432(搜「generate the ground truth」)
精确匹配 77.5%Ch.4 LangChain 进阶text/25-fm-environment-setup.txt:596(搜「77.5%」)
字符串距离与嵌入距离Ch.4 LangChain 进阶text/25-fm-environment-setup.txt:695(搜「Levenshtein」)
两两比较带理由Ch.4 LangChain 进阶text/25-fm-environment-setup.txt:598(搜「labeled_pairwise_string」)
排列组合提示Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:773(搜「permutation prompting」)
固定随机种子Ch.1 五原则text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:809(搜「random seed」)
风格实验:四种策略Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:457(搜「embedding distance」)
风格实验:案例与参照Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:475(搜「cosine similarity」)
风格实验:每案 10 次以上Ch.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:479(搜「10 or more runs」)
「不测猜不到」与 CopilotCh.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:514(搜「haphazard and messy」)
微调与 DSPyCh.10 端到端应用text/64-ch10-chapter-10-building-ai-powered-applications.txt:516(搜「at least 50」) · text/64-ch10-chapter-10-building-ai-powered-applications.txt:528(搜「DSPy」)

Footnotes

  1. 出处:「Ch.1 五原则」第 432 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:432,搜「blind prompting」)。原文:临时单次的提示用盲提示就好;要复用或进生产,就必须更严格地量结果。

  2. 出处:「Ch.1 五原则」第 434 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:434,搜「standardized set of questions」)。原文还提到 OpenAI 把它的 evals 框架开了源。 2

  3. 出处:「Ch.1 五原则」第 771 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:771,搜「Elo rating」)。 2

  4. 出处:「Ch.1 五原则」第 719 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:719,搜「radical decreases」)。原文:迭代测试能带来提示长度的「radical decreases」,随之降低成本与延迟;很多提示元素「完全多余,甚至起反作用」。

  5. 出处:「Ch.1 五原则」第 767 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:767,搜「few thousand examples」)。 2

  6. 出处:「Ch.1 五原则」第 717 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:717,搜「less than 10 test runs」)。同段:「你的评分可能不代表目标受众的偏好」。

  7. 出处:「Ch.3 标准做法」第 297 段(text/23-fm-self-eval-llm-responses.txt:297,搜「order of magnitude less」)。量长度的建议也在这一段。 2 3

  8. 出处:「Ch.1 五原则」第 721 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:721,搜「not an exhaustive list」)。清单各项在该段之后逐条展开(第 723-765 段)。 2

  9. 出处:「Ch.4 LangChain 进阶」第 432 段(text/25-fm-environment-setup.txt:432,搜「generate the ground truth」)与第 596 段(text/25-fm-environment-setup.txt:596,搜「77.5%」)。例子:GPT-4 给金融交易描述分类生成标准答案,再考 Mistral。

  10. 出处:「Ch.4 LangChain 进阶」第 695 段(text/25-fm-environment-setup.txt:695,搜「Levenshtein」)。两把尺子都在这一段命名。

  11. 出处:「Ch.3 标准做法」第 144 段(text/23-fm-self-eval-llm-responses.txt:144,搜「majority vote」)与第 148 段(text/23-fm-self-eval-llm-responses.txt:148,搜「three times」)。 2

  12. 出处:「Ch.3 标准做法」第 194 段(text/23-fm-self-eval-llm-responses.txt:194,搜「Neutral」)。

  13. 出处:「Ch.1 五原则」第 436 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:436,搜「Vicuna-13B」)。

  14. 出处:「Ch.3 标准做法」第 291 段(text/23-fm-self-eval-llm-responses.txt:291,搜「false positives」)。「接近 100% 准确率」也在这一段。 2

  15. 出处:「Ch.4 LangChain 进阶」第 598 段(text/25-fm-environment-setup.txt:598,搜「labeled_pairwise_string」)。「它做不好一件事时往往也评不好」一句就在这段。 2

  16. 出处:「Ch.1 五原则」第 773 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:773,搜「permutation prompting」)。

  17. 出处:「Ch.1 五原则」第 809 段(text/04-ch01-chapter-1-the-five-principles-of-prompting.txt:809,搜「random seed」)。

  18. 出处:「Ch.10 端到端应用」第 455 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:455,搜「the most difficult to get right」)。原文:这一步是 AI 写作流程里最难搞对的,也是唯一需要更大更贵的 GPT-4 才能拿到及格结果的环节。

  19. 出处:「Ch.10 端到端应用」第 479 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:479,搜「nondeterministic」)。原文:跑得少了,回答的非确定性会让你以为表现比实际更好或更差。

  20. 出处:「Ch.10 端到端应用」第 514 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:514,搜「haphazard and messy」)。 2 3

  21. 出处:「Ch.10 端到端应用」第 516 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:516,搜「at least 50」)与第 528 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:528,搜「DSPy」)。DSPy 补充(不在书里,依据我们的 frontier 书架):它是 Stanford NLP 组的提示优化框架,把提示当成可按指标优化的程序。依据: shelf=ai-frontier-reference/dspy#04-optimizers-teleprompt.md 事实=DSPy 的优化器拿训练集加评测指标,自动调整提示里的指令与 few-shot 样例。

  22. 出处:「Ch.10 端到端应用」第 516 段(text/64-ch10-chapter-10-building-ai-powered-applications.txt:516,搜「publicly available on GitHub」)。