跳到主要内容

应用即转换层 — the loop、小红帽原则与四条准则

这一章讲三件事: 一个 LLM 应用的全貌(它不只是「一个提示词」); 写提示词的四条硬准则;以及书里最好笑也最有教益的一场事故—— 一个不知道该怎么闭嘴的模型。 这是原书第一部分的收官章,把前四章的机制全部折成一张施工图。

1. 这一章讲什么

前四章都在讲模型。从这一章开始,问题换成:你要拿它做一个产品,产品长什么样?

主走查是原书 Table 4-2 那份「旅游作业」提示词—— 我们会把它逐行拆开,看每一行各自在履行哪一条准则。 它是全书第一个「完整提示词」,后面第 06–08 章的所有技巧,都是对它的深化。

2. 顶层全景:一个圈,两头各转一次

把任何 LLM 应用抽象到底,都是一个圈(the loop)1:

用户的问题域 模型的文本域
┌─────────────────┐ ┌──────────────────┐
│ 用户在做自己的事: │ ① 翻译过去 │ 模型只会一件事: │
│ 写邮件/规划旅行/ │ ────────────▶ │ 续写文档 │
│ 调试代码/打电话… │ │ │
│ │ ② 翻译回来 │ │
│ 拿到解答/动作结果 │ ◀──────────── │ 补全(一段文字) │
└─────────────────┘ └──────────────────┘

图说:应用 = 两头各转一次的转换层。去程:把用户的问题转成一份
「续写后恰好含有解答」的文档;回程:把那段文字转回用户世界里
有用的东西——展示、解析、执行。

圈可以只转一圈(把要点列表变成散文,完事),也可以转很多圈(聊天), 还可以带着状态边转边变(旅行规划:先脑暴、再订票、再提醒)2

提示词工程真正的位置,在去程那一格:造出一份文档, 使它的「续写」恰好就是你需要的解答。这一章的四条准则,管的就是这一格。

3. 核心原理

3.1 四条准则,与小红帽原则

一份能用的提示词,要同时满足四条3:

  1. ——它必须像训练集里真实存在的文档;
  2. ——它必须包含解题所需的全部信息;
  3. 引向解答——它必须让模型去「答题」,而不是「继续编题」;
  4. 能停——补全必须有个自然的终点。

准则一有个全书反复使用的名字:小红帽原则。 童话里,小红帽偏离了走熟的小路,然后遇上了狼。 对模型来说,「走熟的路」就是训练集里文档的样子: 你的提示词越像它见过的某种真实文档,续写就越稳、越可预期; 你发明的格式越新,它越容易乱来4

那怎么知道它见过什么?商用模型的训练集是机密—— 书里顺带说破了保密的一个原因:你知道它见过什么格式的文档, 就更容易操纵它、甚至找到新的越狱路子。 作者给的建议很直接:问它。 「什么样的正式文档适合陈述一家公司的财务信息?」—— 它能给你列一堆,你照着挑一种当模板5

准则二「全」的反面不是「缺」,而是「滥」: 塞一堆八竿子打不着的资料,它会被带跑、去续写不相干的内容。 「全」是「不缺也不滥」6

准则三、四在聊天模型上是自动的(RLHF 把它调教成了会答题、会停), 在补全模型上全是你自己的活——主走查就看这个。

3.2 主走查:一份「旅游作业」提示词,逐行过堂

场景:旅游网站,用户在下拉框里选了「朝鲜」, 应用要生成一句给客户的旅行建议。用的是补全模型。提示词全文7:

# Leisure, Travel, and Tourism Studies 101 - Homework Assignment

Provide answers for the following three problems. Each answer should
be concise, no more than a sentence or two.

## Problem 1
What are the top three golf destinations to recommend to customers?
Provide the answer as a short sentence.

## Solution 1
St. Andrews, Scotland; Pebble Beach, California; and Augusta, Georgia,
USA (Augusta National Golf Club) are great destinations for golfing.

## Problem 2
Let's say a customer approaches you to help them with travel plans
for Pyongyang, North Korea.

You check the State Department recommendations, and they advise
"Do not travel to North Korea due to the continuing serious risk
of arrest and long-term detention of US nationals. …"

You check the recent news and see these headlines:
- "North Korea fires ballistic missile, Japan says"
- "Five-day COVID-19 lockdown imposed in Pyongyang"
- "Yoon renews efforts to address dire North Korean human rights"

Please provide the customer with a short recommendation for travel to
their desired destination. What would you tell the customer?

## Solution 2

模型的补全:「Perhaps North Korea isn't a great destination right now. But I bet we could find some nice place to visit in South Korea.」

逐行过堂,看四条准则各自在哪一行被满足:

准则一(像),落在每一个格式选择上。 「家庭作业」是训练集里 满地都是的文档类型;Markdown(用 # 写标题、星号做强调的轻量排版格式)的 ### 标题是它最熟的骨架; 连语法都必须工整——你写得潦草,它就学着潦草8

准则二(全),落在 Problem 2 的三段料。 用户的选择(平壤)、 国务院旅行警告、三条新闻标题——做判断需要的料全在,多一句没有。 这些料是应用去回来的,不是用户敲的——用户只是点了下拉框。

准则三(引向解答),落在 Problem 1 与「## Solution 2」。 Problem 1 跟用户的请求毫无关系,它存在的唯一理由是立模式: 「Problem N 后面跟 Solution N」,顺便定调——答案要短、要客气。 如果删掉结尾那行 ## Solution 2,模型多半不去答题, 而是继续编 Problem 2 的「更多背景」——因为「继续编题」 在此刻的文档里同样像训练集9

准则四(能停),落在一个参数上。 每个新段落都以 ## 开头, 所以把停止文本设为 \n#:模型一旦开始编「## Problem 3」, 生成即刻截断——答案干净到不需要任何解析10

这份提示词是玩具(作者自己说的,真实的旅行应用复杂得多), 但它把四条准则摆在了同一页纸上。第 08 章会把它升级成完整方法论。

3.3 一场真实事故:不知道该怎么闭嘴的模型

准则四不是纸面功夫。作者亲历(在 GitHub 时): 聊天模型被训练成用特殊标记 <|im_end|> 结束每条助手消息。 有一次,某个模型的配置写错了,<|im_end|> 给屏蔽了—— 它永远吐不出自己的刹车11

结果是一个「字面意义上不知道该怎么闭嘴」的模型:

(正常的回答)
Hope you have a nice day!
Hope you have a wonderful day!
Hope you have a festive day!
…(同义词穷尽)…
(撞到 token 上限,被迫停)

图说:它每次都给出了完美回答,然后死在谢幕上。
「继续」在每一步都赢了「收尾」——第 02 章的复读机制,在事故里重演。

3.4 回程:把一段文字变回用户世界的东西

补全到手,转换层还有后半圈。视产品形态,回程可能是12:

  • 解析:让模型按固定格式输出,程序再把字段(结果表里的一格一格)抠出来;

  • 格式可以是表格、代码,或 JSON(一种花括号配对的数据格式);

  • 执行:模型产出的一个函数调用(它只负责写出「要调哪个函数、带什么参数」), 由你的应用真正去执行——查航班、订票。写操作之前要让用户确认—— 「别因为用户随口说想去希腊,就真把票买了」13;

  • 换媒介:电话客服要把文字转成语音;复杂 UI 里,补全可能是界面事件;

  • 换呈现:同样是 Copilot,补全在编辑器里是灰色影子(Tab 接受), 聊天里要的代码改动则渲染成红绿 diff——内容一样,给用户的样子完全不同14

3.5 用哪个模型:聪明、快、便宜,不可兼得

去程还要做一个决定:调哪个模型。书里给的 2024 年口径: GPT-4 比 GPT-3.5-turbo 贵约 20 倍——质量提升值不值这一个数量级的价差? 有时值,经常不值15

延迟——从发请求到拿到回答要等的时间——常常比钱更硬。 作者的一手经验:Copilot 代码补全选了 Codex,因为它「小、够聪明、快如闪电」。 用 GPT-4 的话,补全再好,用户也等不到它吐出来16

挑模型的口诀:能可靠完成任务的最小那个。 更细的选型在第 09 章。

3.6 去程的四步工序,与复杂度的四个观察面

去程那一格,拆开是四步(第 06–08 章各管一段,这里先立框架)17:

① 取料 直接料(用户输入)→ 间接料(邻接文件、文档、API)→ 样板话
② 切料 把料切成片段:只取相关段落;把语音转成文字;把 JSON
(一种花括号「键:值」的数据格式)转成人话
③ 估价 每个片段打分:优先级分层(整数,先用完高层),层内再细分(浮点)
④ 组装 按预算装进去:塞不下就删代码行、做摘要;顺序还得对

图说:feedforward pass 的四步。GPT-3.5 时代窗口只有 4,096 个标记,
预算是生死问题;如今窗口上十万,但「少而准」仍是质量杠杆。

应用变复杂,沿四个面展开,后文各占章节: 状态(聊天历史,截断或摘要)、外部资料(训练集里没有的,靠搜索补)、 推理深度(让它把想法写出来再答)、工具(让它够到真实世界)18

4. 作者的判断与证据

有硬证据的:

  • 「邻接标签页显著提升补全质量」「Codex 小快灵」「<|im_end|> 事故」 全部来自作者在 GitHub Copilot 的一线经历111619;
  • 四准则不是事后总结,是作者团队做作业提示词这类实战时的工作清单—— 主走查那份提示词就是他们按准则造出来、并拿真实模型跑过的7

时代口径(引用时注意年份):

  • 「GPT-4 贵 20 倍」「窗口 4,096 到 10 万+」是 2024 年的价格与规格, 今天引用请只取「按标记算账、按场景选型」的方法论1517

判断(我们的,不是书里的): 小红帽原则是这本书对「为什么模板有用」 给出的唯一第一性解释,也是它跟满网「提示词玄学」的分界线: 玄学告诉你「这样说有奇效」,这本书告诉你「因为它像训练集里的某种文档」。 任何「神提示词」拿到手,先问「它在模仿哪种真实存在的文档?」—— 答不上来的,大概率是过拟合到某个版本的巧合。 如果错,会错在: 如果模型后训练强到「对任何格式都同样服从」, 小红帽原则会贬值;但第 04 章的 RLHF 恰恰也是靠「格式像训练数据」起作用的, 所以至少在这本书的时代坐标上,原则前后说得通。

5. 边界与局限

  • 四准则在聊天模型上有三条被「代劳」了(像、引向解答、能停), 但「全」永远是你自己的事——而且聊天格式里你要负责整个剧本的塑造, 责任只是转移,没有消失20
  • 旅行作业是玩具例,作者明说了;真实应用的多轮、带状态版本在第 11、12 章。
  • 回程的「函数调用」本章只点了名,机制全在第 10 章。
  • 评估(怎么知道改好没改好)在本章只有一节,完整展开在第 13 章—— 但作者已经埋了态度:这是工程问题,不是品味问题。

6. 可带走的

主走查一行回顾:用户点了「平壤」→ 应用取回警告与新闻 → 装进「作业」壳(Problem 1 立模式,「## Solution 2」转作答,\n# 当刹车)→ 模型答出一句得体的劝阻——每一行都在值班,没有一行是装饰。

  1. 应用 = 转换层,两头各转一次;提示词只是去程里的一站;
  2. 四准则:像、全、引向解答、能停——补全模型上全是你的活;
  3. 小红帽原则:别离开训练集走熟的路;不知道它见过什么就问它;
  4. 「全」是不缺也不滥——塞得越多,带跑得越远;
  5. 「能停」要设计:停止文本、格式骨架,GitHub 那场事故就是反例;
  6. 你写得潦草,它学着潦草——提示词的语法工整度会传染;
  7. 选模型:能可靠完成任务的最小那个;Copilot 用 Codex 不是因为最强,是因为够快;
  8. 回程同样要设计:解析、执行、换媒介、换呈现,危险动作先问用户。

7. 原文地图

主题原书章原文位置
转换层与 the loopChapter 4text/07-ch04-chapter-4-designing-llm-applications.txt:14(搜「transformation layer」) · :36(搜「the loop」)
四准则与小红帽Chapter 4text/07-ch04-chapter-4-designing-llm-applications.txt:108(搜「closely resemble content」) · :117(搜「Little Red Riding Hood」)
训练数据保密与「问它」Chapter 4text/07-ch04-chapter-4-designing-llm-applications.txt:129(搜「tight-lipped」)
旅游作业主走查Chapter 4text/07-ch04-chapter-4-designing-llm-applications.txt:212(搜「Homework Assignment」) · :283(搜「stop text」)
停不下来的事故Chapter 4text/07-ch04-chapter-4-designing-llm-applications.txt:196(搜「Hope you have a nice day」)
模型选择、20 倍、CodexChapter 4text/07-ch04-chapter-4-designing-llm-applications.txt:334(搜「more expensive than running」) · :340(搜「lightning fast」)
回程、灰字与 diffChapter 4text/07-ch04-chapter-4-designing-llm-applications.txt:389(搜「grayed-out」)
去程四步Chapter 4text/07-ch04-chapter-4-designing-llm-applications.txt:409(搜「Context retrieval」) · :445(搜「4,096 tokens」)

Footnotes

  1. 出处:「Chapter 4. Designing LLM Applications」第 18-56 段(text/07-ch04-chapter-4-designing-llm-applications.txt:36,搜「the loop」)与第 14-16 段(:14,搜「transformation layer」)。

  2. 出处:「Chapter 4. Designing LLM Applications」第 44-53 段(text/07-ch04-chapter-4-designing-llm-applications.txt:44,搜「just one iteration」)。

  3. 出处:「Chapter 4. Designing LLM Applications」第 100-115 段(text/07-ch04-chapter-4-designing-llm-applications.txt:108,搜「closely resemble content」)。四条原文是编号列表。

  4. 出处:「Chapter 4. Designing LLM Applications」第 116-128 段(text/07-ch04-chapter-4-designing-llm-applications.txt:117,搜「Little Red Riding Hood」)。原文:「don't stray far from the path upon which the model was trained」。

  5. 出处:「Chapter 4. Designing LLM Applications」第 129-139 段(text/07-ch04-chapter-4-designing-llm-applications.txt:129,搜「tight-lipped」)。

  6. 出处:「Chapter 4. Designing LLM Applications」第 159-163 段(text/07-ch04-chapter-4-designing-llm-applications.txt:160,搜「loosely relevant」)。

  7. 出处:「Chapter 4. Designing LLM Applications」表 4-2(text/07-ch04-chapter-4-designing-llm-applications.txt:212,搜「Homework Assignment」)。补全原文:「Perhaps North Korea isn't a great destination right now. But I bet we could find some nice place to visit in South Korea.」 2

  8. 出处:「Chapter 4. Designing LLM Applications」第 248-254 段(text/07-ch04-chapter-4-designing-llm-applications.txt:252,搜「sloppy grammar」)。原文:「sloppy grammar will encourage the model to generate text in a similar, sloppy style」。

  9. 出处:「Chapter 4. Designing LLM Applications」第 265-279 段(text/07-ch04-chapter-4-designing-llm-applications.txt:276,搜「Solution 2」)。原文:「If we had omitted this, then the model would likely have continued elaborating upon the problem by confabulating more information about North Korea.」

  10. 出处:「Chapter 4. Designing LLM Applications」第 280-286 段(text/07-ch04-chapter-4-designing-llm-applications.txt:283,搜「stop text」)。

  11. 出处:「Chapter 4. Designing LLM Applications」第 188-199 段(text/07-ch04-chapter-4-designing-llm-applications.txt:188,搜「Funny Thing Happened」)与(:196,搜「Hope you have a nice day」)。原文:「we ended up with a model that literally didn't know how to shut up」。 2

  12. 出处:「Chapter 4. Designing LLM Applications」第 352-391 段(text/07-ch04-chapter-4-designing-llm-applications.txt:354,搜「blob of text」)。

  13. 出处:「Chapter 4. Designing LLM Applications」第 374-380 段与第 610-612 段(text/07-ch04-chapter-4-designing-llm-applications.txt:612,搜「trip to Greece」)。

  14. 出处:「Chapter 4. Designing LLM Applications」第 387-391 段(text/07-ch04-chapter-4-designing-llm-applications.txt:389,搜「grayed-out」)。

  15. 出处:「Chapter 4. Designing LLM Applications」第 331-335 段(text/07-ch04-chapter-4-designing-llm-applications.txt:334,搜「more expensive than running」)。 2

  16. 出处:「Chapter 4. Designing LLM Applications」第 336-342 段(text/07-ch04-chapter-4-designing-llm-applications.txt:341,搜「lightning fast」)。原文:「small, sufficiently smart, and lightning fast」。 2

  17. 出处:「Chapter 4. Designing LLM Applications」第 401-479 段(text/07-ch04-chapter-4-designing-llm-applications.txt:409,搜「Context retrieval」)与(:445,搜「4,096 tokens」)。 2

  18. 出处:「Chapter 4. Designing LLM Applications」第 481-612 段(text/07-ch04-chapter-4-designing-llm-applications.txt:491,搜「More application state」)。

  19. 出处:「Chapter 1. Introduction to Prompt Engineering」第 326-328 段(text/04-ch01-chapter-1-introduction-to-prompt-engineering.txt:328,搜「neighboring tabs」)。

  20. 出处:「Chapter 4. Designing LLM Applications」第 288-302 段(text/07-ch04-chapter-4-designing-llm-applications.txt:297,搜「off the hook」)。