跳到主要内容

把话说清楚 — 从一句提示,到让它自己去用工具

这一章讲三件事: 你发给模型的那段话里到底该放什么; 为什么「让它把过程写出来」能让答案对得多(而且原因不玄,就在第 03 章那条结构里); 以及怎么把一个只会接话的模型,变成一个会自己查资料、自己算数的系统。 在全书链条里,这一章是「不训练」这条路上最长的一段—— 第 04 章告诉你不训练能到几分,这一章告诉你不训练还能再往上走多远。 需要先读第 03 章,其余生词都在当场解释。

1. 先看现象:同一个模型,换个说法,答案质量差一大截

这一节回答:为什么这一章值得单独存在。

你大概遇到过这种事:同一个问题,换个说法问,答案好坏差得离谱。

书讲了一个能量化的版本。同一道小学算术题,同一个模型:

  • 直接问——答错;
  • 在问题后面缀一句「让我们逐步思考」——答对了,而且把每一步都写了出来1

没有换模型,没有训练,没有加数据。只加了七个字。

这一章要回答的就是:这七个字凭什么管用,以及还有哪些七个字。

2. 顶层全景:四层,一层比一层重

① 设定层:两个采样设定,决定它多敢挑冷门
│ (最便宜,但只能调「稳」和「野」,调不了「对」)

② 积木层:你发给它的那段话,是七块可加可减的积木
│ (角色 / 指令 / 背景 / 格式 / 受众 / 语气 / 材料)

③ 想一想层:让它先写过程再给答案,以及三种更贵的变体
│ (这一层的收益最大,原理最简单)

④ 系统层:把提示串成链、外挂记忆、给它工具,让它自己决定下一步
(最强,也最难验)

图说:**越往下越强,也越贵、越难验。** 遇到问题从第 ② 层开始试,而不是从第 ④ 层。

3. 核心原理

3.1 先说一件容易被跳过的事:你写的那段话会被套进一个模板

这一节回答:为什么同一段提示词,换个模型就不好使了。

你以为你发过去的是一句话,其实它会先被套进一个固定格式。 书把这个格式打印出来给你看了,拿它全程用的那个小模型举例2:

<s><|user|>
你写的那段话<|end|>
<|assistant|>

这几个尖括号里的东西,就是第 02 章讲过的特殊词元——不代表任何真实文字,只起标记作用。 书把这套格式叫提示词模板,并说明它在模型训练期间就是这么用的3

它管两件事,第二件常被忽略:

  1. 告诉模型谁在说话(是你在问,还是它在答);
  2. 告诉模型什么时候该停——那个「结束」标记就是它给系统发的「我说完了」的信号3

实际后果:提示词模板是跟模型绑死的。 你把为 A 模型写的模板原样套到 B 模型上,轻则效果变差,重则它根本不知道该停在哪儿。 大部分现成的工具库会自动帮你套对模板,但你自己接口调用时不会。

3.2 两个采样设定:它多敢挑冷门

这一节回答:为什么同一句话问两遍答案不一样,以及那两个设定分别在调什么。

回到第 03 章那条流水线:每一步,模型都会给词表里每个词元分配一个可能性分数4。 书举的例子很直观:句子「我在开一辆……」后面,「车」和「卡车」的分数通常高于「大象」—— 但「大象」的可能性仍然存在,只是低得多4

从这张分数表里挑一个出来的方式,有两个可调的设定。

设定一:温度

温度控制的是「敢不敢挑分数低的」。 书的说法:温度为 0 时每次都生成相同的响应,因为它总是选择最可能的词; 较高的值允许生成可能性较低的词5

书给的经验值:0.8 左右输出更多样,0.2 左右输出更确定6

注意一个实操细节,很多人栽在这儿: 书演示时特意先把「要不要抽签」这个开关关掉了 (为了让输出稳定可复现);开关关着的时候,你调温度是没有任何效果的7

设定二:只从「靠前的那一撮」里挑

核采样(常写作 top_p)控制的是「候选名单有多长」。 做法是:把词元按分数从高到低排队,从头开始往下累加,加到设定的比例为止—— 后面的一律不考虑8

设成 0.1,名单很短;设成 1,全表都在名单里。

还有一个更直白的变体叫 top_k:直接规定只看分数最高的前 k 个9

书给了一张组合对照表,可以直接抄去用10:

你要干什么温度名单长度为什么
头脑风暴高随机 + 大候选池,结果高度多样,常出意外
写工作邮件可预测、专注、保守
创意写作高随机但候选池小——有创意的同时保持连贯
翻译确定性(每次都挑同一个,一点不随机)的选法 + 更广的词汇范围,输出连贯而不呆板

第三、四行是这张表的价值所在:这两个设定不是同一个设定的两个刻度,它们能反着调。

判断(我们的,不是书里的): 这两个设定只能调风格,调不了正确性。 一道算术题算错了,把温度降到 0 它还是错,只是每次都错得一模一样。 遇到「答得不对」,不要在这一层找解,直接跳到 3.4 节的「让它先想一想」或第 06 章的「先查再答」。 如果错,会错在: 如果错误来自「偶尔挑中了一个离谱的词元然后一路歪下去」, 那降温度确实能治——判据是:同一题问十遍,如果有对有错,降温度有用;如果十遍全错,没用。

3.3 提示不是一句话,是七块积木

这一节回答:那段话里到底该放什么。

书的基本结构只有两块:指令本身,和指令所指的数据11。 再加一块很实用的:输出指示符——在末尾写上「情感:」, 这种结构表明我们要的输出是「negative」或「positive」,而不是一整段话12

往上堆,书给了完整的七块13:

积木放什么书给的例子 / 提醒
角色让它扮演谁「你是一位天体物理学专家」
指令要它干什么「确保尽可能具体。我们不想留下太多解释空间」
背景这件事的来龙去脉回答「这个指令的原因是什么?」
格式输出长什么样不指定格式,模型会自己编一种,这在自动化流程里很麻烦
受众说给谁听教学场景可以写「像对我五岁时那样解释」
语气什么口气给老板写正式邮件时别用随意语气
材料任务相关的正文——

书反复强调的是第二块。 它给的对照最直白: 不要说「为产品写一段描述」,要说**「用少于两句话并以正式语气为产品写一段描述」**14

除了明确性,书还列了两条通用技巧14:

技巧具体做法
给它退路明说「只在知道答案时才回答,不知道就说『我不知道』」——用来减少它一本正经地编
注意位置重要的东西放开头或结尾。长提示里,中间的信息容易被忘掉

「一本正经地编」在这一行有个专门的叫法,就叫「幻觉」。 书给的定义:大语言模型可能会自信地生成不正确的信息14。 治它的根本办法在第 06 章。

关于「注意位置」,书给了两个心理学名词——首因效应和近因效应, 意思是模型倾向于关注提示词开头或结尾的信息14

补充(不在书里): 书只提了一句就过去了,而这件事有专门的实测。 把同一条关键信息放在长输入的不同位置,模型表现差别很大: 放在开头或结尾时最好,放在中段时明显下降。 来源:《Lost in the Middle: How Language Models Use Long Contexts》 (Liu、Lin、Hewitt、Paranjape、Bevilacqua、Petroni、Liang,2023-07-06) https://arxiv.org/abs/2307.03172(查阅于 2026-08-25)

书对整件事的态度值得记住,它出现在这一节的开头:

这是一个提示词优化的迭代过程,需要反复实验。 目前不存在,而且未来也不太可能存在完美的提示词设计。15

所以正确的用法是:一次加减一块积木,看效果,留下有用的。 书也说了顺序本身会影响结果,所以实验至关重要16

书还提了一个有点好笑但确有其事的做法:情感刺激—— 在提示里加一句「这对我的职业生涯非常重要」17书把它归在「发挥创造力」那一类,没有背书。

3.4 直接给它看例子,比描述更省事

它解决什么问题: 有些要求你描述半天说不清,但给一个例子对方立刻就懂。

它怎么做: 在提示里直接放几个「输入 → 想要的输出」的样例。 书管这个叫上下文学习18

按给几个例子分三档,这三个词在这一行到处都是:

叫法给几个例子
零样本0 个
一样本1 个
少样本2 个或更多

书套用了一句老话:一个示例胜过千言万语19

它的演示很妙:让模型用一个生造出来的词造句。 先给它一个例子——「Gigamuru 是一种日本乐器,用它造句:我有一把叔叔送我的 Gigamuru……」 然后问它另一个生造词。模型正确地造出了句子20

这里有一个格式上的要点,书特意点了出来: 例子必须区分「谁在问」和「谁在答」,否则看起来就像你在自言自语21—— 也就是要用 3.1 节那套模板把两个角色标出来。

书的收尾很克制,值得抄: 给例子不是万能法宝, 模型仍然可能通过随机采样「选择」忽略指令22

3.5 让它先想一想:这一层收益最大,原理最简单

这一节是这一章的核心。

先看现象

你有没有发现:让它「直接给答案」经常错,让它「写出过程」就对了?

这不是错觉。书给的做法叫思维链: 让生成式模型先「思考」,而不是不经过任何推理就直接回答问题23

书用的例子是原论文里那道题24:

提示里先放一个带过程的样例:
「Roger 有 5 个网球,又买了 2 罐,每罐 3 个。他现在有几个?」
「Roger 一开始有 5 个。2 罐每罐 3 个是 6 个。5 + 6 = 11。答案是 11。」


然后问真正的问题:
「食堂有 23 个苹果,用掉 20 个做午餐,又买了 6 个。现在有几个?」


模型的回答不是一个数字,而是:
「食堂原有 23 个。用掉 20 个,还剩 23 - 20 = 3 个。又买 6 个,所以现在是 3 + 6 = 9 个。答案是 9。」

图说:注意它先写过程、后给答案。**顺序是关键,不是装饰。**

为什么有效——原因就在第 03 章

书给的解释非常干净,而且和第 03 章那条结构直接对上:

添加这个推理步骤允许模型将更多的计算分配到推理过程中。 与仅基于几个词元计算整个解决方案不同,这个推理过程中的每个额外词元 都允许模型稳定其输出25

翻译成大白话,一句话:

它每写一个词元,都要把整台机器完整跑一遍(第 03 章)。 所以「多写几个字」在物理上就等于「多算了几遍」。 写出来的过程,是它唯一的草稿纸。

书用一句老师的话收尾:这就是为什么做计算时「展示你的工作过程」如此重要26

连例子都不用给

上面那招要你准备一个带过程的样例。书接着给了免费版:什么都不给,只加一句话。

在问题后面缀上「让我们逐步思考」。 书管这叫零样本思维链27

同一道苹果题,这一句话就让模型自己分成了三步,并且算对了27

书还说这句话不是唯一的咒语,列了几个同样有效的替代, 比如「深吸一口气,然后逐步思考」「让我们一步步解决这个问题」28

补充(不在书里): 书给了两篇论文的编号但没有讲里面的数字,而那些数字是这一招的分量所在。 注意这两篇用的不是同一个模型,别把数字张冠李戴。

带例子的那一篇(2022 年 1 月):用一个 5400 亿参数的模型 PaLM、只给八个带过程的样例, 就在小学数学应用题这项公开考卷上拿到了当时最好的成绩,超过了专门微调过的 GPT-3 加验证器

不给例子的那一篇(2022 年 5 月):跑出那两组大幅提升数字的是 当时的 InstructGPT(具体是 text-davinci-002 这一版),不是上面那个 PaLM。 只加「Let's think step by step」这一句—— 一项算术考卷从 17.7% 涨到 78.7%,小学数学应用题从 10.4% 涨到 40.7%。 同一篇摘要另外说了一句:在 5400 亿参数的 PaLM 上也观察到了幅度相近的提升, 但没有给出具体数字

来源:《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》 (Wei 等,2022-01-28)https://arxiv.org/abs/2201.11903; 《Large Language Models are Zero-Shot Reasoners》 (Kojima、Gu、Reid、Matsuo、Iwasawa,2022-05-24)https://arxiv.org/abs/2205.11916(均查阅于 2026-08-25)

判断(我们的,不是书里的): InstructGPT 那两个数字应该被当成整章的锚。 一句七个字的话,把一项任务的正确率提高了四倍多—— 这个量级说明:在你考虑训练之前,「话有没有说对」这件事上还有巨大的空间没榨干。 如果错,会错在: 如果你用的模型已经被训过「自己会先想很久」(2025 年后的主流做法), 那再加这句话收益接近零,甚至可能干扰它自己的节奏。 判据很好测:加与不加各问二十遍,看正确率差多少。

书的一句克制,必须原样保留

书在讲这些之前,先给整节定了调,而这句话比技术本身更值得记住。 先讲一个词:涌现指的是「模型做大到某个规模之后,突然冒出来的、小模型身上看不到的能力」—— 这个说法本身有争议,见第 07 章第 5 节。

推理经常与模型表现出的类似推理的涌现行为相提并论。 我们强调「类似」,因为在撰写本文时,人们普遍认为这些模型是通过 记忆训练数据和模式匹配来表现出这种行为的。29

换句话说:书自己说的是「模拟推理」,不是「推理」。 这个措辞值得沿用。

书还借了一个心理学的二分法来打比方30:

系统 1系统 2
是什么自动、直觉、几乎瞬时有意识、缓慢、有逻辑
对应到模型不加任何反思、直接一个词元一个词元往外吐上面这些「先想再答」的招数

比方到此为止,后文一律说「先想再答」。

3.6 更贵的三种变体

思维链之上还有三层,每一层都用更多的调用换更好的答案。

招数做法代价
链式提示把一个大提示拆成几个小提示,前一个的输出当后一个的输入31多次调用;但能给每一步单独设一套设定,而且中间结果可以取出来单独用32
自一致性同一个问题问 n 遍,答案投票取多数33慢 n 倍——书明说了这一点34
思维树(名字来自它的形状:每一步分出好几个岔,像一棵树)每一步生成多个候选想法,打分,留下最有希望的、剪掉最差的,再往下走35更多次调用,会显著减慢应用程序36

链式提示那一行值得展开,因为它是最实用的一个。 书举的例子是生成故事:与其一个提示里同时要标题、角色、摘要, 不如先生成标题 → 用标题生成角色 → 用标题和角色生成故事37

好处书列了两条,第二条常被忽略:

  1. 每一步可以用不同的设定(生成标题只要几个词元,生成故事要很多)32;
  2. 你能单独拿到中间结果——书的原话是「我们可以轻松提取标题; 而如果使用单一提示,可能就无法做到这一点」32

书还列了链式提示的另外几种用法:让模型复查自己上一步的输出、 并行跑多个提示再合并、把写书拆成先写摘要再发展角色再写对话38

思维树那一行有一个很省钱的替身,值得单独记: 书说已经有人把思维树框架转换成一种简单的提示技术—— 不多次调用模型,而是要求模型通过模拟多位专家之间的对话来模仿这种行为, 让这些「专家」互相质疑,直到达成共识39

书给的那段提示词很有代表性:「想象三位不同的专家在回答这个问题。 每位专家写下自己思考的第一步,然后分享给大家。然后所有专家进入下一步…… 如果任何专家在某一步发现自己错了,就退出。」39

同一道苹果题,输出真的变成了三位专家的对话,而且答对了40

判断(我们的,不是书里的): 这个「一次调用里模拟多个专家」的技巧, 说明了这一层技术的一个共同本质:它们都是在用输出的长度换计算的深度。 无论是写出过程、投票、还是模拟辩论,多出来的每一个词元都是一次额外的完整计算。 如果错,会错在: 如果某个任务的难点不在「步数不够」而在「压根不知道」 (比如它没见过的事实),那再怎么加长输出也没用——那是第 06 章的问题,不是这一章的。

3.7 让输出永远合规:三级,最后一级最狠

它解决什么问题: 系统要拿这个输出去做下一步,格式一乱整条流程就崩。

书先列了四个必须管住输出的理由41:

理由说的是什么
结构化输出(就是「输出必须严格按规定的格式排好」,而不是一段自由的话)有些场景要求必须是规定格式,比如程序之间传数据用的那种固定格式
有效输出要它二选一,它可能给你冒出第三个选项
伦理有些开放模型没有任何防护,可能输出粗话、个人信息、偏见
准确性事实对不对、连不连贯、有没有编

书给了三种治法42:

治法怎么做效果
给示例把想要的格式当成少样本示范塞进提示有效,但是否遵守仍然取决于模型自身43
约束采样(「采样」就是「从可能性清单里挑一个」,「约束」就是「限死能挑哪些」)在挑下一个词元那一刻就把不合规的选项掐掉最狠,能保证
微调拿符合格式的数据去训模型最贵,第 09 章讲

「给示例」这一条,书做了一个很有说服力的对照:

  • 不给示例,让它输出一个角色档案:结果在中途就停了,不是有效的格式44;
  • 给一个示例(一段规定了要填哪几栏的模板,每一栏行话叫一个字段): 模型完美地遵循了给出的示例45

但书立刻指出了这条路的天花板: 我们无法明确阻止生成某些输出。尽管我们引导模型并给出指令,它可能仍然不会完全遵循46

所以有了第二条路,而它的思路是全章最巧的一个:

常规做法:让它自由生成 → 事后检查 → 不合格就重来
│ 问题:它总有可能生成不合格的东西,你只能反复重试

约束采样:在「从可能性清单里挑一个」这一步就动手
把不合规的选项直接从清单里划掉,它想跑偏也跑不出去

图说:**不是「事后拦」,是「事前就没有这个选项」。**
书举的例子:要它只回答「正面」「中性」「负面」三选一,
那就把词元选择限制在这三个之内[^47]。

书用一个专门的工具库演示了这件事:只要声明输出必须是那种通用数据格式, 底层就会应用相应的规则,确保输出符合该格式47。 所谓「解析」就是「按约定的格式,把内容一项一项拆出来读懂」。 演示结果是一段结构完整、能被程序直接解析的输出48

书还提醒了一句:约束采样仍然受温度和候选名单长度的影响49—— 它管的是「不许挑什么」,不是「一定挑什么」。

3.8 往上一层:链、记忆、工具

从这里开始,讨论的对象从「一段提示」变成「一个系统」。

链:把提示模板和模型绑在一起

它解决什么问题: 每次调模型都要手动套一遍 3.1 节那个模板,烦且容易错。

它怎么做: 把「模板 + 模型」打包成一个可复用的东西。 书用的那个库把这个概念叫,而它自己就是以「链」命名的50。 最基本的形式是单一链:把某个模块化组件(提示模板、外部记忆、工具)连到模型上51

注意:这一节的具体代码今天已经不能照抄了。 书里那套写法在书出版之前就被官方标注为弃用(官方宣布不再维护、建议你改用别的写法), 并给了替代写法(见总纲第 5 节)。 但「把模板和模型打包」这个概念没有过时——今天所有同类库都还是这么做的。

记忆:模型是无状态的

先看现象。 书做了一个极短的演示,结果很刺眼52:

你:「你好,我叫 Maarten。1 + 1 等于几?」
它:「你好 Maarten!1 + 1 等于 2。」


你:「我叫什么名字?」
它:「抱歉,作为一个语言模型,我无法知道个人信息……」

图说:上一句话它刚说过你的名字,下一句就不认识了。

原因书讲得很干脆:这些模型是无状态的——它们没有任何关于之前对话的记忆53

「无状态」是计算机领域的通用词:每次调用都是独立的一次,不带上一次的任何痕迹。

所以「记忆」必须外挂。 书给了三种做法,而它们其实是同一个权衡上的三个点54:

做法怎么弄好处代价
全量缓冲把完整对话历史原样贴回提示里55实现最简单,上下文窗口内零信息丢失词元开销一路涨,迟早撞上长度上限;历史一大,反而难从中找信息
只留最近 k 轮丢掉更早的56开销可控,最近 k 轮零丢失k 轮之前的全丢;书演示时特意让模型「忘掉」了第一轮提到的年龄57
摘要用另一个模型把历史压成一段摘要58保住全程,省词元每一轮多一次模型调用,而且细节要靠推断;书的实测里,模型只能从摘要里「推断」出最初的问题59

书给的总结一句话:这是速度、记忆和准确性之间的权衡60

摘要那一行有一条书顺带提到的实用建议: 摘要用的模型不必和主模型是同一个,可以用一个更小更快的58

工具与智能体:让它自己决定下一步

它解决什么问题: 有些事模型天生干不了。

书举的例子最有代表性:大语言模型在处理数学问题时表现很差, 经常在解决简单的数学任务时失败,但如果我们提供计算器,它们就能做得更多61

书给「智能体」的定义是:利用语言模型来决定应采取哪些行动以及以何种顺序执行的系统62

它比前面那些「链」多两样东西63:

  1. 工具——用来完成它自身无法完成的事;
  2. 一种决定「用哪个工具、什么顺序」的办法。

书讲的那套办法叫 ReAct,循环只有三步64:

思考(Thought) ── 它应该做什么、为什么


行动(Action) ── 调哪个工具,给它什么输入


观察(Observation)── 把工具返回的结果读回来、总结一下

└──▶ 回到「思考」,直到它认为可以给最终答案为止

图说:名字里的 Re 和 Act 就是 Reasoning(推理)和 Acting(行动)——
**这个框架的全部主张就是让这两件事互相影响。**[^65]

书举的例子很生活化:你在美国想买一台笔记本,既想知道美元价格,又想换算成欧元。 系统只配了两个工具:一个网页搜索、一个计算器65

书给了输入和最后那个数,中间几轮它想了什么、发出去什么字串,书没有逐字列。 下面这三轮是我们按那三步循环补出来的,不是书里的原文; 只有 2,249.00、0.85、1911.65 这三个数是书给的。

思考行动观察
第 1 轮「我不知道这台机器卖多少钱,得先查」搜索工具,查询串是 MacBook Pro price USD拿到 2,249.00 美元
第 2 轮「现在要把 2249 美元换成欧元,我自己算不准,得用计算器」计算器,算式是 2249 * 0.85拿到 1911.65
第 3 轮「两个数都有了,可以答了」不调工具,直接给最终答案——

最后的输出是:美元 2,249.00,按 0.85 的汇率约合 1911.65 欧元66

这里有一个坑,书没有交代:0.85 这个汇率是哪儿来的? 它没有出现在第 1 轮的搜索结果里,也没有第二次搜索去取它。 最可能的解释是模型自己填进算式的。 换句话说,这条链上有一个数没有任何工具背书,而最终答案整个建立在它上面—— 这正是下一小节那句「没有人在流程中」最具体的样子。

这里有一个很实在的门槛,书自己交代了: 它全章用的那个小模型不足以运行这些示例,只好换成当时的商业模型, 理由是它能更准确地遵循这些复杂指令67

但书紧接着补了一条判断,今天看非常准: 它说这不意味着只有商业模型才行,更大的开放模型也能做,只是要更多算力; 而且随着这个领域发展,小模型最终也会足以运行这个示例68

书自己点破的代价

这一节的最后一句是全章最有价值的一句,必须原样保留:

通过创建这种相对自主的行为,我们并未参与中间步骤。因此, 没有人在流程中(human in the loop)来判断输出或推理过程的质量。69

书还给了两条补救方向:让它把找到价格的那个网址返回来, 或者在每一步都问一下这一步的输出对不对70

判断(我们的,不是书里的): 这句自我提醒比很多鼓吹自主系统的材料都诚实, 但它指出的问题比书想的更根本。 前面每一层技术(温度、积木、想一想)你都能看到输入和输出、都能自己判断; 到了这一层,中间发生了什么你不翻日志(就是程序自己一条条记下来的运行流水账)就完全不知道。 所以这一层真正缺的不是能力,是可观测性。 如果错,会错在: 如果任务本身有客观判据(代码能不能跑通、计算对不对), 那中间步骤看不看无所谓,只看最终结果就行——判据是: 你能不能写出一个程序自动判断这次做得对不对。 能,就不需要人守在中间。

4. 作者的判断与证据

说法属于哪一类说明
「让我们逐步思考」能提高正确率有实例,书没给数字书演示了一道苹果题,书没有引用任何量化结果——那两个大幅提升的数字是我们补的
「每个额外词元都允许模型稳定其输出」有机制解释而且这条解释和第 03 章的结构直接对得上,是这一章最扎实的一条
「这是模拟推理,不是推理」作者主动划界原话是「我们强调『类似』」,并归因到「记忆训练数据和模式匹配」29
温度 0.8 / 0.2 这类经验值经验,无来源和第 01 章那本样板书一样,这类默认值属于「试出来有效」,不是推导出来的
那张「四种用例的设定组合」表经验总结没有实验支撑,但它的价值在于点明了这两个设定可以反着调
「不存在完美的提示词设计」作者的判断值得当成这一章的免责声明15
「没有人在流程中」作者主动坦白全章最有价值的一句自我拆台69
「小模型终将足以运行这些示例」作者的预测书写在 2024 年;今天回看,这条预测方向正确68

5. 边界与局限

第一,书对「模拟推理」的克制,在 2025 年之后有了新的含义。 书写的时候,「让模型想一想」只能靠改写提示;今天更主流的做法是把长思考直接训进模型

补充(不在书里): 有工作声称,不需要人工标注的推理过程,纯靠奖惩训练, 就能让模型自己长出自我反思、验证、动态换策略这些行为。 来源:《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》 (DeepSeek-AI 等,2025-01-22)https://arxiv.org/abs/2501.12948(查阅于 2026-08-25)

这不否定这一章,但它挪动了性价比: 与其在提示里堆四层技巧, 不如先换一个训过「会想」的模型,把力气花在别处。

第二,工具接入这一块已经有了标准,而书里全是手工。 书里每个工具都要你亲手写一段描述、亲手注册。

补充(不在书里): 2024 年 11 月之后出现了一个开放标准 MCP (Model Context Protocol,直译「模型上下文协议」——一份「工具怎么自报家门、 模型怎么调它」的通用约定),把「每接一个数据源就写一份定制实现」变成一次接入、到处可用。 来源:《Introducing the Model Context Protocol》Anthropic,2024-11-25 https://www.anthropic.com/news/model-context-protocol(查阅于 2026-08-25)

第三,那些代码不能照抄。 书用的那个库,属于一类叫编排的工具—— 所谓「编排」,就是把模型、提示词模板、外部工具串成一条流水线,并负责调度它们。 这个库的核心写法在书出版之前就已经被官方标注为弃用(依据见总纲第 5 节)。 概念全部有效,代码全部作废。

第四,书没有讲提示的稳定性和版本管理。 一段提示今天好使,换个模型版本就不好使了——这在生产里是个真问题,书一个字没提。 它承认了「某些提示词对某些模型效果更好,因为它们可能在不同的训练数据上训练」71, 但没有给出任何应对办法。

第五,自主系统那一层书只给了一个玩具例子。 多步长任务、中途出错怎么恢复、怎么防止它无限循环、成本怎么封顶——一个都没讲。 读到这一节要清楚:你拿到的是概念,不是可上生产的方案。

6. 可带走的

  1. 你发出去的那段话会先被套进一个固定模板,而模板和模型绑死——换模型要换模板;
  2. 模板管两件事:谁在说话,以及什么时候该停;
  3. 两个采样设定:温度管「敢不敢挑冷门」,候选名单长度管「有多少个选项可挑」;它们能反着调;
  4. 这两个设定只能调风格,调不了正确性——十遍全错就别在这层找解;
  5. 提示是七块积木:角色、指令、背景、格式、受众、语气、材料。一次加减一块,看效果;
  6. 明确性是最重要的一块:不说「写段描述」,说「用少于两句话、正式语气写段描述」;
  7. 重要信息放开头或结尾——放中段模型明显更容易漏掉,这有实测支撑;
  8. 描述不清就直接给例子:零样本、一样本、少样本;例子里要标清谁问谁答;
  9. 「让我们逐步思考」这七个字,在公开考卷上把正确率提高了四倍多——这是这一章的锚;
  10. 为什么有效不玄:每写一个词元就完整跑一遍机器,多写几个字就是多算几遍;
  11. 书自己说的是「模拟推理」,不是推理。沿用这个措辞;
  12. 更贵的三种变体:拆成链(能取中间结果)、问 n 遍投票(慢 n 倍)、生成多个候选再剪枝(最慢);
  13. 思维树有个省钱替身:一次调用里让模型模拟几位专家互相质疑;
  14. 想让输出永远合规,最狠的是约束采样——在挑词那一刻就把不合规的选项划掉,而不是事后拦;
  15. 模型是无状态的,记忆必须外挂;三种外挂方式是同一个权衡的三个点:全留、留最近 k 轮、压成摘要;
  16. 摘要用的模型可以比主模型小;
  17. 给它工具,它就成了能自己决定下一步的系统;循环只有三步:思考 → 行动 → 观察;
  18. 这一层最缺的不是能力,是可观测性——书自己说了「没有人在流程中来判断质量」;
  19. 判断要不要人守在中间有个简单判据:你能不能写程序自动判对错。 能,就不需要。

7. 原文地图

主题原书章原文位置
提示词模板与它管的两件事提示工程text/08-fm.txt:98(搜「何时应停止生成文本」)
每个词元都有可能性分数、开车那个例子提示工程text/08-fm.txt:108(搜「可能性分数」) · text/08-fm.txt:110(搜「elephant」)
采样开关默认关着提示工程text/08-fm.txt:114(搜「我们特意设置了 do_sample=False」)
温度的定义与经验值提示工程text/08-fm.txt:118(搜「温度控制生成文本的随机性」) · text/08-fm.txt:122(搜「0.8」)
核采样与 top_k提示工程text/08-fm.txt:136(搜「核采样」) · text/08-fm.txt:142(搜「top_k」)
四种用例的设定组合表提示工程text/08-fm.txt:152(搜「创造性(高 temperature 和高 top_p)」) · text/08-fm.txt:169(搜「创意写作」)
提示工程的定位与免责声明提示工程text/08-fm.txt:183(搜「不存在,而且未来也不太可能存在完美的提示词设计」)
指令 + 数据、输出指示符提示工程text/08-fm.txt:197(搜「指令本身和与指令相关的数据」) · text/08-fm.txt:201(搜「输出指示符」)
明确性、幻觉、顺序提示工程text/08-fm.txt:224(搜「以正式语气为产品写一段描述」) · text/08-fm.txt:226(搜「幻觉」) · text/08-fm.txt:230(搜「首因效应」)
七块积木提示工程text/08-fm.txt:250(搜「天体物理学专家」) · text/08-fm.txt:259(搜「模型会自己创造一种格式」) · text/08-fm.txt:262(搜「ELI5」)
顺序会影响输出、实验至关重要提示工程text/08-fm.txt:274(搜「实验至关重要」)
情感刺激提示工程text/08-fm.txt:305(搜「这对我的职业生涯非常重要」)
不同模型吃不同的提示提示工程text/08-fm.txt:307(搜「某些提示词对某些模型效果更好」)
上下文学习、三档样本数提示工程text/08-fm.txt:313(搜「这通常被称为上下文学习」) · text/08-fm.txt:315(搜「零样本提示不使用示例」)
一个示例胜过千言万语、生造词实验提示工程text/08-fm.txt:319(搜「一个示例胜过千言万语」) · text/08-fm.txt:321(搜「生造的词」) · text/08-fm.txt:376(搜「screeged」)
必须区分用户与助手提示工程text/08-fm.txt:369(搜「自言自语」)
给例子不是万能法宝提示工程text/08-fm.txt:379(搜「忽略指令」)
「模拟推理」这句克制提示工程text/08-fm.txt:449(搜「我们强调"类似"」) · text/08-fm.txt:451(搜「模拟推理过程」)
系统 1 与系统 2提示工程text/08-fm.txt:455(搜「系统 1 思维代表一种自动、直观」)
思维链与它为什么有效提示工程text/08-fm.txt:461(搜「生成式模型实现复杂推理的第一个也是最重要的步骤是通过一种称为思维链的方法」) · text/08-fm.txt:463(搜「稳定其输出」)
网球与苹果那两道题提示工程text/08-fm.txt:473(搜「Roger has 5 tennis balls」) · text/08-fm.txt:486(搜「The answer is 9」)
零样本思维链与替代说法提示工程text/08-fm.txt:489(搜「让我们逐步思考」) · text/08-fm.txt:515(搜「展示你的工作过程」) · text/08-fm.txt:519(搜「深吸一口气」)
自一致性与它的代价提示工程text/08-fm.txt:525(搜「多数结果作为最终答案」) · text/08-fm.txt:531(搜「慢 n 倍」)
思维树与它的提示词替身提示工程text/08-fm.txt:539(搜「投票选出最佳解决方案」) · text/08-fm.txt:543(搜「转换为一种简单的提示技术」) · text/08-fm.txt:551(搜「Imagine three different experts」) · text/08-fm.txt:573(搜「All experts agree」)
链式提示、产品名与推销词提示工程text/08-fm.txt:381(搜「链式提示」) · text/08-fm.txt:427(搜「为每次调用设置不同的参数」) · text/08-fm.txt:434(搜「响应验证」)
输出验证的四个理由提示工程text/08-fm.txt:585(搜「结构化输出」) · text/08-fm.txt:589(搜「它不应该提出第三个选项」)
三种控制输出的方法提示工程text/08-fm.txt:608(搜「控制词元选择过程」)
不给示例会输出无效格式提示工程text/08-fm.txt:671(搜「不是有效的 JSON」) · text/08-fm.txt:712(搜「模型完美地遵循了我们给出的示例」)
是否遵守格式仍取决于模型提示工程text/08-fm.txt:714(搜「仍然取决于模型自身」)
少样本的天花板、约束采样提示工程text/08-fm.txt:718(搜「无法明确阻止生成某些输出」) · text/08-fm.txt:728(搜「在词元采样过程中就执行验证」)
约束采样的实测输出提示工程text/08-fm.txt:768(搜「JSON 语法以确保输出符合该格式」) · text/08-fm.txt:840(搜「输出被正确格式化为 JSON」)
链的概念高级文本生成技术与工具text/09-fm.txt:82(搜「以其主要方法之一——链——命名」) · text/09-fm.txt:84(搜「单一链」)
无状态、忘掉名字的演示高级文本生成技术与工具text/09-fm.txt:277(搜「它们不会记住对话中的内容」) · text/09-fm.txt:290(搜「know personal information」) · text/09-fm.txt:291(搜「无状态」)
全量缓冲高级文本生成技术与工具text/09-fm.txt:305(搜「复制完整的对话历史」)
只留最近 k 轮、忘掉年龄高级文本生成技术与工具text/09-fm.txt:381(搜「最近 k 次对话」) · text/09-fm.txt:438(搜「未保留在聊天历史中」)
摘要式记忆与两次调用高级文本生成技术与工具text/09-fm.txt:446(搜「对整个对话历史进行摘要」) · text/09-fm.txt:452(搜「会有两次调用」) · text/09-fm.txt:546(搜「需要根据上下文进行推断」)
三种记忆的权衡表高级文本生成技术与工具text/09-fm.txt:548(搜「速度、记忆和准确性之间的权衡」) · text/09-fm.txt:555(搜「实现最简单」)
智能体的定义与两个附加件高级文本生成技术与工具text/09-fm.txt:568(搜「自主决定可以采取的行动」) · text/09-fm.txt:572(搜「智能体可以使用的工具」)
数学差、给计算器高级文本生成技术与工具text/09-fm.txt:578(搜「如果我们提供计算器」)
ReAct 三步循环高级文本生成技术与工具text/09-fm.txt:584(搜「推理与行动」) · text/09-fm.txt:594(搜「思考(Thought)」) · text/09-fm.txt:600(搜「它会观察输出,这通常是对检索到的结果进行摘要」)
笔记本价格换算的例子高级文本生成技术与工具text/09-fm.txt:602(搜「MacBook Pro」) · text/09-fm.txt:737(搜「1911.65」)
小模型跑不动、以及那条预测高级文本生成技术与工具text/09-fm.txt:616(搜「不足以运行这些示例」) · text/09-fm.txt:631(搜「最终像本章使用的小型语言模型也能足以运行此示例」)
「没有人在流程中」与两条补救高级文本生成技术与工具text/09-fm.txt:740(搜「human in the loop」) · text/09-fm.txt:742(搜「双刃剑」)

Footnotes

  1. 出处:「提示工程」第 489 段(text/08-fm.txt:489,搜「让我们逐步思考」)与第 508 段(text/08-fm.txt:508,搜「Step 1: Start with the initial number of apples」)。

  2. 出处:「提示工程」第 93 段(text/08-fm.txt:93,搜「<|user|>」)。书是用工具库里的模板函数把它打印出来的,不是抄的文档。

  3. 出处:「提示工程」第 98 段(text/08-fm.txt:98,搜「何时应停止生成文本」)。原文:这个模板「不仅提供了谁说了什么的信息,还用于指示模型何时应停止生成文本」。 2

  4. 出处:「提示工程」第 108 段(text/08-fm.txt:108,搜「可能性分数」)与第 110 段(text/08-fm.txt:110,搜「elephant」)。 2

  5. 出处:「提示工程」第 118 段(text/08-fm.txt:118,搜「温度控制生成文本的随机性」)。

  6. 出处:「提示工程」第 122 段(text/08-fm.txt:122,搜「0.8」)。

  7. 出处:「提示工程」第 114 段(text/08-fm.txt:114,搜「我们特意设置了 do_sample=False」)。原文:「要使用 temperature 和 top_p 参数,我们需要设置 do_sample=True 才能使用它们。」

  8. 出处:「提示工程」第 136 段(text/08-fm.txt:136,搜「核采样」)。原文:「它会考虑词元,直到达到它们的累积概率。」

  9. 出处:「提示工程」第 142 段(text/08-fm.txt:142,搜「top_k」)。

  10. 出处:「提示工程」第 152 段(text/08-fm.txt:152,搜「创造性(高 temperature 和高 top_p)」)起的表 6-1,四行分别见第 159、164、169、174 段(text/08-fm.txt:169,搜「创意写作」)。

  11. 出处:「提示工程」第 197 段(text/08-fm.txt:197,搜「指令本身和与指令相关的数据」)。

  12. 出处:「提示工程」第 201 段(text/08-fm.txt:201,搜「输出指示符」)。原文还指出:模型可能没有直接在这类结构上训练过,但「它已经接收了足够的指令,能够泛化到这种结构」。

  13. 出处:「提示工程」第 250 段(text/08-fm.txt:250,搜「天体物理学专家」)、第 259 段(text/08-fm.txt:259,搜「模型会自己创造一种格式」)与第 262 段(text/08-fm.txt:262,搜「ELI5」)。ELI5 是英文网络用语「Explain Like I'm 5」的缩写,意思是「当我是五岁小孩那样解释」。

  14. 出处:「提示工程」第 224 段(text/08-fm.txt:224,搜「以正式语气为产品写一段描述」)、第 226 段(text/08-fm.txt:226,搜「幻觉」)与第 230 段(text/08-fm.txt:230,搜「首因效应」)。原文对「顺序」的说法是:「特别是在长提示词中,中间的信息往往容易被遗忘。」 2 3 4

  15. 出处:「提示工程」第 183 段(text/08-fm.txt:183,搜「不存在,而且未来也不太可能存在完美的提示词设计」)。同一段还指出提示工程「还可以用作评估模型输出的工具,以及设计安全防护和安全缓解措施的方法」。 2

  16. 出处:「提示工程」第 274 段(text/08-fm.txt:274,搜「实验至关重要」)。

  17. 出处:「提示工程」第 305 段(text/08-fm.txt:305,搜「这对我的职业生涯非常重要」)。这段在原书里是一条「提示」框,书把它归在「发挥创造力」那一类,没有给任何效果数据。

  18. 出处:「提示工程」第 313 段(text/08-fm.txt:313,搜「这通常被称为上下文学习」)。

  19. 出处:「提示工程」第 319 段(text/08-fm.txt:319,搜「一个示例胜过千言万语」)与第 315 段(text/08-fm.txt:315,搜「零样本提示不使用示例」)。

  20. 出处:「提示工程」第 321 段(text/08-fm.txt:321,搜「生造的词」)与第 376 段(text/08-fm.txt:376,搜「screeged」)。这个例子取自提出这个方法的那篇原始论文。

  21. 出处:「提示工程」第 369 段(text/08-fm.txt:369,搜「自言自语」)。

  22. 出处:「提示工程」第 379 段(text/08-fm.txt:379,搜「忽略指令」)。

  23. 出处:「提示工程」第 461 段(text/08-fm.txt:461,搜「生成式模型实现复杂推理的第一个也是最重要的步骤是通过一种称为思维链的方法」)。

  24. 出处:「提示工程」第 473 段(text/08-fm.txt:473,搜「Roger has 5 tennis balls」)与第 486 段(text/08-fm.txt:486,搜「The answer is 9」)。

  25. 出处:「提示工程」第 463 段(text/08-fm.txt:463,搜「稳定其输出」)。

  26. 出处:「提示工程」第 515 段(text/08-fm.txt:515,搜「展示你的工作过程」)。

  27. 出处:「提示工程」第 489 段(text/08-fm.txt:489,搜「让我们逐步思考」)与第 508 段(text/08-fm.txt:508,搜「Step 1: Start with the initial number of apples」)。 2

  28. 出处:「提示工程」第 519 段(text/08-fm.txt:519,搜「深吸一口气」)。这段在原书里是一条「提示」框。

  29. 出处:「提示工程」第 449 段(text/08-fm.txt:449,搜「我们强调"类似"」)与第 451 段(text/08-fm.txt:451,搜「模拟推理过程」)。 2

  30. 出处:「提示工程」第 455 段(text/08-fm.txt:455,搜「系统 1 思维代表一种自动、直观」)。这个二分法来自 Daniel Kahneman 的《思考,快与慢》,书给了引用。

  31. 出处:「提示工程」第 381 段(text/08-fm.txt:381,搜「链式提示」)。原文:「我们将一个提示词的输出作为下一个提示词的输入,从而创建一个连续的交互链来解决我们的问题。」

  32. 出处:「提示工程」第 427 段(text/08-fm.txt:427,搜「为每次调用设置不同的参数」)与第 273 段(text/09-fm.txt:273,搜「访问这些单独的组成部分」)。后一处出自「高级文本生成技术与工具」那一章的故事生成例子。 2 3

  33. 出处:「提示工程」第 525 段(text/08-fm.txt:525,搜「多数结果作为最终答案」)。原文还提到每次采样可以用不同的温度和候选名单长度,以增加多样性。

  34. 出处:「提示工程」第 531 段(text/08-fm.txt:531,搜「慢 n 倍」)。

  35. 出处:「提示工程」第 539 段(text/08-fm.txt:539,搜「投票选出最佳解决方案」)与第 541 段(text/08-fm.txt:541,搜「评分最低的被剪枝」)。

  36. 出处:「提示工程」第 543 段(text/08-fm.txt:543,搜「显著减慢应用程序」)。

  37. 出处:「高级文本生成技术与工具」第 183 段(text/09-fm.txt:183,搜「生成一个故事及其复杂细节」)与第 265 段(text/09-fm.txt:265,搜「llm_chain.invoke( a girl that lost her mother」)。书的三步是:标题 → 主角描述 → 故事摘要,每一步都用上前面所有步的结果。

  38. 出处:「提示工程」第 434 段(text/08-fm.txt:434,搜「响应验证」)起的用例表,三条依次是响应验证、并行提示、编写故事。

  39. 出处:「提示工程」第 543 段(text/08-fm.txt:543,搜「转换为一种简单的提示技术」)与第 551 段(text/08-fm.txt:551,搜「Imagine three different experts」)。 2

  40. 出处:「提示工程」第 573 段(text/08-fm.txt:573,搜「All experts agree」)。

  41. 出处:「提示工程」第 585 段(text/08-fm.txt:585,搜「结构化输出」)与第 589 段(text/08-fm.txt:589,搜「它不应该提出第三个选项」)。JSON 是一种被广泛使用的通用数据格式,程序之间传数据常用它;书直接用了这个名字。

  42. 出处:「提示工程」第 608 段(text/08-fm.txt:608,搜「控制词元选择过程」)。

  43. 出处:「提示工程」第 714 段(text/08-fm.txt:714,搜「仍然取决于模型自身」)。

  44. 出处:「提示工程」第 671 段(text/08-fm.txt:671,搜「不是有效的 JSON」)。原文的现象是:模型在开始写某个字段之后就停止生成了。

  45. 出处:「提示工程」第 712 段(text/08-fm.txt:712,搜「模型完美地遵循了我们给出的示例」)。

  46. 出处:「提示工程」第 718 段(text/08-fm.txt:718,搜「无法明确阻止生成某些输出」)。

  47. 出处:「提示工程」第 768 段(text/08-fm.txt:768,搜「JSON 语法以确保输出符合该格式」)。

  48. 出处:「提示工程」第 840 段(text/08-fm.txt:840,搜「输出被正确格式化为 JSON」)。

  49. 出处:「提示工程」第 728 段(text/08-fm.txt:728,搜「在词元采样过程中就执行验证」)。原文还提醒:「请注意,这仍然受到 top_p 和 temperature 等参数的影响。」

  50. 出处:「高级文本生成技术与工具」第 82 段(text/09-fm.txt:82,搜「以其主要方法之一——链——命名」)。

  51. 出处:「高级文本生成技术与工具」第 84 段(text/09-fm.txt:84,搜「单一链」)。

  52. 出处:「高级文本生成技术与工具」第 283 段(text/09-fm.txt:283,搜「basic_chain.invoke({ input_prompt : Hi! My name is Maarten」)与第 290 段(text/09-fm.txt:290,搜「know personal information」)。模型的原话是英文,这里的中文是我们的转述。

  53. 出处:「高级文本生成技术与工具」第 291 段(text/09-fm.txt:291,搜「无状态」)与第 277 段(text/09-fm.txt:277,搜「它们不会记住对话中的内容」)。

  54. 出处:「高级文本生成技术与工具」第 548 段(text/09-fm.txt:548,搜「速度、记忆和准确性之间的权衡」)起的表 7-1。「三个点在同一条权衡线上」是我们的归纳,书是分三节讲的。

  55. 出处:「高级文本生成技术与工具」第 305 段(text/09-fm.txt:305,搜「复制完整的对话历史」)与第 555 段(text/09-fm.txt:555,搜「实现最简单」)。

  56. 出处:「高级文本生成技术与工具」第 381 段(text/09-fm.txt:381,搜「最近 k 次对话」)。

  57. 出处:「高级文本生成技术与工具」第 438 段(text/09-fm.txt:438,搜「未保留在聊天历史中」)。书在第一轮特意报了年龄,三轮之后再问,模型已经答不出来了。

  58. 出处:「高级文本生成技术与工具」第 446 段(text/09-fm.txt:446,搜「对整个对话历史进行摘要」)与第 483 段(text/09-fm.txt:483,搜「更小的语言模型来执行摘要任务」)。 2

  59. 出处:「高级文本生成技术与工具」第 546 段(text/09-fm.txt:546,搜「需要根据上下文进行推断」)与第 452 段(text/09-fm.txt:452,搜「会有两次调用」)。

  60. 出处:「高级文本生成技术与工具」第 548 段(text/09-fm.txt:548,搜「速度、记忆和准确性之间的权衡」)。

  61. 出处:「高级文本生成技术与工具」第 578 段(text/09-fm.txt:578,搜「如果我们提供计算器」)。

  62. 出处:「高级文本生成技术与工具」第 568 段(text/09-fm.txt:568,搜「自主决定可以采取的行动」)。

  63. 出处:「高级文本生成技术与工具」第 572 段(text/09-fm.txt:572,搜「智能体可以使用的工具」)。

  64. 出处:「高级文本生成技术与工具」第 594 段(text/09-fm.txt:594,搜「思考(Thought)」)与第 600 段(text/09-fm.txt:600,搜「它会观察输出,这通常是对检索到的结果进行摘要」)。

  65. 出处:「高级文本生成技术与工具」第 602 段(text/09-fm.txt:602,搜「MacBook Pro」)。工具只有两个:一个网页搜索引擎和一个数学工具。

  66. 出处:「高级文本生成技术与工具」第 737 段(text/09-fm.txt:737,搜「1911.65」)。

  67. 出处:「高级文本生成技术与工具」第 616 段(text/09-fm.txt:616,搜「不足以运行这些示例」)。

  68. 出处:「高级文本生成技术与工具」第 631 段(text/09-fm.txt:631,搜「最终像本章使用的小型语言模型也能足以运行此示例」)。这段在原书里是一条「注意」框。 2

  69. 出处:「高级文本生成技术与工具」第 740 段(text/09-fm.txt:740,搜「human in the loop」)。 2

  70. 出处:「高级文本生成技术与工具」第 742 段(text/09-fm.txt:742,搜「双刃剑」)。

  71. 出处:「提示工程」第 307 段(text/08-fm.txt:307,搜「某些提示词对某些模型效果更好」)。