跳到主要内容

战术手册 — 防幻觉、思考时间、内心独白与其他六招

这一章讲三件事: 五原则之外,书里(主要转述自 OpenAI 的官方建议)还有一组即插即用的战术; 每招治一种具体的病——幻觉、抢答、泄题、浅答; 以及它们的共同机理:都在给模型换个姿势,而不是给它新知识。 对应原书第 3 章后半。

1. 这一章讲什么

第 01 章的五原则是战略层:方向、格式、例子、评测、分工。这一章降到战术层——书里管它们叫 tactics,并说明大多转述自 OpenAI 的提示工程指南1。每条都短,都能抄,难的是知道什么时候用哪条

主走查:一个辅导场景。 学生在做一道概率题:「一副 52 张牌(13 红心、13 方块、13 梅花、13 黑桃),不放回抽两张,一张红心一张梅花的概率是多少?」学生交了答案 (13/52)×(13/51)=13/204。这个答案漏了一种顺序(先梅花后红心),是错的——我们拿它走三个战术:直接评判、思考时间、内心独白,看输出的差别。

2. 顶层全景:七招七病

病 招 章节
─────────────────────────────────────────────────────
答非所据(编) → 只许用给定文本,答不出就说找不到 §3.1
抢答(评判先于解题) → 先自己解,再评判 §3.2
泄题(推理剧透) → 推理藏进分隔区,只露提示 §3.3
浅答(一次要太多) → 从简到繁,逐层加码 §3.4
跑题(风格不对) → 派个角色 §3.5
一稿烂尾 → 让它改自己的稿 §3.6
提示难写 → 让模型替你写提示 §3.7

图说:每招对应一种具体的失败模式。不要预防性地全用——
每招都花标记,没病别吃药。

3. 核心原理

3.1 引用文本:治「答非所据」

模型最危险的毛病是幻觉(第 01 章:一本正经地编造)。书里给的第一道防线:只许用你给的文本回答,答不出就说找不到2

输入:参照三引号内的文章回答。
你必须遵守:如果答案不在这些文章里,直接回「I could not find an answer」。
"""
B2B 客户的决策周期更长,销售漏斗也更长……
"""
示例回答:
- I could not find an answer.
- 是的,B2B 客户的决策周期更长……

问:B2C 销售更省钱吗?
答:I could not find an answer.

这里的结构件值得点名:那三对引号 """分隔符(delimiter)——一段起围栏作用的固定符号,告诉模型「这围栏里面是给定的资料,外面是指令」。围栏让「资料」和「指令」在文本里泾渭分明3

这个战术还有一个加强版:要求回答里带上引用——答案末尾附 {"citation": "……原文那句……"}。好处不只是看着正规:引用是原文里的一串字符,程序可以自动比对它是否真的出自给定文档——引用变成了可机验的防伪标记4。第 09 章的 RAG 就是这个战术的工程化。

3.2 思考时间:治「抢答」

主走查第一步。把学生的答案直接丢给模型评判,它会犯的错和人一样:没自己算就开始评。书里的修法是在提示里下一条工序纪律5:

输入:先自己把这道题解一遍。再看看你的答案和所给解法是否一致。
在自己解出来之前,不要评判所给的解法。
问题:(52 张牌那道题)
所给解法:(13/52)×(13/51) = 13/204

OpenAI 管这类做法叫「给模型思考的时间」——第 01 章的「让我们一步步想」是同一族的零成本版本。机理回到第 02 章的结构:它是逐标记往下写的,先把推导写出来,后面的判断就建立在写出来的推导上——写出来的字就是它仅有的草稿纸。

3.3 内心独白:治「泄题」

辅导产品有个特殊矛盾:你想让模型认真推理(一步一步把结论推出来),又不想让学生看到推理过程——看到过程就等于看到答案。书里的解法叫内心独白(inner monologue):让模型把推理写进约定的隐藏区,程序在展示前把隐藏区剥掉6

提示(节选):
第 1 步:独立解这道题,把你的演算包在三引号 """ 里。
第 2 步:比较你的解法和学生的解法,同样包在 """ 里。
第 3 步:如果学生错了,设计一个「不直接给答案的提示」,包在 """ 里。
第 4 步:把提示给学生——这一段不用三引号,以「Hint:」开头。

模型的真实输出(节选):
"""
第 1 步——我的解法:先算「先红心后梅花」:(13/52)×(13/51)……
但顺序反过来也成立,要重复计算一次……
"""
"""
第 2 步——和学生解法比较:学生只算了一种顺序,漏了另一种,不完整。
"""
"""
第 3 步——设计提示:提醒他两种顺序都要考虑。
"""
Hint: 记住,两张牌可以以任意顺序被抽到。考虑两种顺序:先红心后梅花,和先梅花后红心。

走完三招对比:直接评判(§3.2 之前)可能顺着学生的错答案走;思考时间让模型自己先算,抓住了漏掉的顺序;内心独白则把这份推理藏起来,学生只收到一条不泄底的提示。同一件事,三个姿势,三种产品形态。

3.4 从简到繁:治「浅答」

least-to-most(从简到繁)是把一个大问题拆成一串层层加码的小问题,每个提示建立在上一个回答之上7。书里用「让模型帮你写一个 Flask 网页程序」演示(Flask 是 Python 的一个轻量网站框架):

  1. 先问:一个 Hello World 网站的基本架构是什么?——它给出轮廓(导入、建实例、定路由、实现、运行);
  2. 再问:把其中那个路由的代码写出来;——它给出可运行的代码;
  3. 再问:给这段代码写个测试。——它给出测试用例8

每步的回答成为下一步的上下文。书里如实写了代价:链条对前序质量的依赖是累积的——上一步答得烂,下一步建在烂地基上;而且对话变长后,最早的目标可能被挤出窗口。所以这条战术和评测(第 07 章)必须配套:每一环都要验9

3.5 角色提示:治「跑题」

角色提示(role prompting)第 01 章已经见过大场面(乔布斯 vs 马斯克)。书里补了通用形态:「我想让你扮演一位科技评论员,我给你一个产品,你给我深度评测——优点、缺点、功能、和同类对比……」然后点名 MongoDB,它真的交出一篇结构完整的评测10

书里给的两条边界同样值得记:角色可能带来刻板印象(派什么角色就往什么偏见靠),而且长对话里角色会漂移——跑着跑着它就忘了自己在扮演谁。用 OpenAI 的接口时,角色的标准位置是 system 消息11

3.6 自评循环:治「一稿烂尾」

第 01 章的「让它给自己的起名清单打分」是一个方向;反方向同样成立:让它改进自己的输出。书里的演示:先让它写一个 Hello World 函数;然后带着对话历史再问「还能改进吗?加上类型标注(在代码里标明每个值的类型)或默认参数呢?」——它交回一个带类型标注、带文档说明、带默认参数的版本12

书里点明了这个循环的终止条件:可以反复让它自我批评,直到它再也提不出改进为止13。这是「生成难、评判易」那条机制的第二次应用——它的产出在自己的评判面前是透明的。

3.7 元提示:治「提示难写」

第 01 章立过元提示(模型给模型写提示)。这一章补两个实用形态14:

  • 提示改写器:把「提示 A」和「目标 1」一起给它,让它改写提示来逼近目标;
  • 风格指南生成器:给它几篇范文,让它提炼一份写作指南,这份指南本身就是一条可复用的提示。

书里还演示了一个当时(2024)的新能力:ChatGPT 能联网读你给的两个网址,结合网页内容来改进提示15

4. 作者的判断与证据

  • 这组战术书上标注了来源:大多转述自 OpenAI 的提示工程指南,书里逐个演示过1;
  • 苹果题、扑克题、Flask 三连、Hello World 改进,全部有真实输入输出;
  • 书里对角色提示的警告(刻板印象、角色漂移)是经验陈述,没有量化;
  • 有一处翻译过来必须加的小心:书中苹果题里「所给解法」本身就是对的(5+2=7),模型确认无误——但模型「确认一个错解法」的案例在提示工程圈屡见不鲜,思考时间战术降低、并不消灭这类风险。这条补充来自通用知识,不是书里的内容。

判断(我们的,不是书里的): 这七招有一个共同的深层结构:它们都在重组「先写什么、后写什么」。引用文本是「先读再答」,思考时间是「先算再评」,内心独白是「写了但不给看」,从简到繁是「一次只加一阶」。提示工程做到深处,做的是控制模型生成顺序的工程——因为输出里先出现的字,就是后面字的依据。 如果错,会错在: 如果模型内部有了不可见的推理通道(2024 年后的推理模型正是这个方向),「写出来当草稿纸」的必要性部分内化,这些战术的收益会缩小;但「先读再答」「先算再评」的纪律在提示层依然成立,只是转由模型默认执行。

5. 边界与局限

  • 引用文本防幻觉的前提是文本真的相关。 书里自己点了:窗口有限时,得先有办法把相关资料找出来——那正是第 09 章;
  • 内心独白的「隐藏」发生在你的程序里(剥掉三引号区),不是模型的能力——别把它当隐私机制,任何能被写进输出的内容原则上都可能漏出;
  • 从简到繁对「前序错误」敏感;链越长越要逐环评测;
  • 这些战术大多写于 GPT-4 时代;今天的模型默认推理更强,战术从「必须手动加」逐渐变成「模型常自带」——但写进提示仍然有效,且可控。

6. 可带走的

  1. 防幻觉第一句:「答案不在给定文本里,就回答找不到」;
  2. 加引用格式,引用就成了可机验的防伪标记;
  3. 评判前先让它自己解——抢答是默认行为,要明令禁止;
  4. 要推理但不要剧透 → 三引号藏推理,只露 Hint;
  5. 大问题别一口吃:先轮廓、再部件、再测试(least-to-most);
  6. 角色能收窄输出,但留意刻板印象与角色漂移;
  7. 一稿不满意,让它改自己的稿,直到改不动为止;
  8. 提示写不出来,让模型先替你起稿,你再改。

7. 原文地图

主题原书章原文位置
战术源自 OpenAI 指南Ch.3 标准做法text/19-fm-challenges-with-the-least-to-most-technique.txt:116(搜「recommended by OpenAI」)
引用文本与「找不到」Ch.3 标准做法text/20-fm-avoiding-hallucinations-with-reference.txt:9(搜「triple quotes」) · text/20-fm-avoiding-hallucinations-with-reference.txt:13(搜「I could not find an answer」)
带引用的回答Ch.3 标准做法text/20-fm-avoiding-hallucinations-with-reference.txt:49(搜「citation」)
思考时间与苹果题Ch.3 标准做法text/21-fm-give-gpts-thinking-time.txt:7(搜「solve the problem on your own」)
内心独白与扑克题Ch.3 标准做法text/22-fm-the-inner-monologue-tactic.txt:1(搜「inner monologue」) · text/22-fm-the-inner-monologue-tactic.txt:34(搜「13 hearts」)
least-to-most 与 FlaskCh.3 标准做法text/18-fm-benefits-of-the-least-to-most-technique.txt:1(搜「least to most」) · text/15-fm-planning-the-architecture.txt:9(搜「Flask」)
least-to-most 的代价Ch.3 标准做法text/19-fm-challenges-with-the-least-to-most-technique.txt:3(搜「Overreliance」)
角色提示Ch.3 标准做法text/19-fm-challenges-with-the-least-to-most-technique.txt:15(搜「Role prompting」)
自评循环Ch.3 标准做法text/23-fm-self-eval-llm-responses.txt:3(搜「critque」) · text/23-fm-self-eval-llm-responses.txt:69(搜「multiple times」)
元提示Ch.3 标准做法text/23-fm-self-eval-llm-responses.txt:301(搜「Meta prompting」) · text/23-fm-self-eval-llm-responses.txt:380(搜「URL 1」)

Footnotes

  1. 出处:「Ch.3 标准做法」第 116 段(text/19-fm-challenges-with-the-least-to-most-technique.txt:116,搜「recommended by OpenAI」)。原文在「GPT Prompting Tactics」一节:这些方法被设计来显著提升 AI 输出的精确度,且由 OpenAI 推荐。 2

  2. 出处:「Ch.3 标准做法」第 9 段(text/20-fm-avoiding-hallucinations-with-reference.txt:9,搜「triple quotes」)与第 13 段(text/20-fm-avoiding-hallucinations-with-reference.txt:13,搜「I could not find an answer」)。

  3. 补充(不在书里,来自通用知识):「分隔符」一节书里没有单独命名,但三引号围栏的用法贯穿全书提示示例;这个名字是提示工程材料的通用说法。

  4. 出处:「Ch.3 标准做法」第 49 段(text/20-fm-avoiding-hallucinations-with-reference.txt:49,搜「citation」)。原文强调:引用可以在给定文档里做字符串匹配,自动验证。

  5. 出处:「Ch.3 标准做法」第 7 段(text/21-fm-give-gpts-thinking-time.txt:7,搜「solve the problem on your own」)。

  6. 出处:「Ch.3 标准做法」第 1 段(text/22-fm-the-inner-monologue-tactic.txt:1,搜「inner monologue」)与第 34 段(text/22-fm-the-inner-monologue-tactic.txt:34,搜「13 hearts」)。学生的解法 (13/52)×(13/51) 只算了「先红心后梅花」一种顺序。

  7. 出处:「Ch.3 标准做法」第 1 段(text/18-fm-benefits-of-the-least-to-most-technique.txt:1,搜「least to most」)。

  8. 出处:「Ch.3 标准做法」第 9 段(text/15-fm-planning-the-architecture.txt:9,搜「Flask」)、「Ch.3 标准做法」(text/16-fm-coding-individual-functions.txt:3,搜「Hello World」)与(text/17-fm-adding-tests.txt:3,搜「test case」)。

  9. 出处:「Ch.3 标准做法」第 3 段(text/19-fm-challenges-with-the-least-to-most-technique.txt:3,搜「Overreliance」)与第 7 段(text/19-fm-challenges-with-the-least-to-most-technique.txt:7,搜「Dependence on prior prompts」)。

  10. 出处:「Ch.3 标准做法」第 15 段(text/19-fm-challenges-with-the-least-to-most-technique.txt:15,搜「Role prompting」)与第 23 段(text/19-fm-challenges-with-the-least-to-most-technique.txt:23,搜「tech reviewer」)。

  11. 出处:「Ch.3 标准做法」第 81 段(text/19-fm-challenges-with-the-least-to-most-technique.txt:81,搜「stereotyping」)与第 108 段(text/19-fm-challenges-with-the-least-to-most-technique.txt:108,搜「System Message」)。

  12. 出处:「Ch.3 标准做法」第 3 段(text/23-fm-self-eval-llm-responses.txt:3,搜「critque」)与第 33 段(text/23-fm-self-eval-llm-responses.txt:33,搜「type hints」)。critique 一词原文拼作 critque,照录。

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

  14. 出处:「Ch.3 标准做法」第 301 段(text/23-fm-self-eval-llm-responses.txt:301,搜「Meta prompting」)与第 327 段(text/23-fm-self-eval-llm-responses.txt:327,搜「GPT Prompt Engineer」)。

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