跳到主要内容

Prompt 工程 — 不改参数,改输入

这一章讲三件事: 范式怎么从「预训练-微调-预测」换成「预训练-提示预测」;Prompt 进模型前经历什么(分词——把文字切成最小单元——与词表);上下文学习怎么让模型看几个示例就换任务、示例该怎么挑。 链条位置:模型练好了(第 02–05 章),从这里开始进入全书的下半场——训练完成之后怎么改它的行为。Prompt 是四种手段里最便宜的一种:不动参数。

1. 顶层全景

旧范式:预训练 → 针对每个任务微调 → 预测 (一任务一模型,贵)
新范式:预训练 → 写好 Prompt → 直接预测 (一模型千任务,便宜)

├─ Prompt 四件套:任务说明 / 上下文 / 问题 / 输出格式
├─ 进模型前:分词 → Token ID → 嵌入向量
└─ 带示例的 Prompt = 上下文学习(ICL):零样本 / 单样本 / 少样本
图说:本章的主走查是一只小浣熊——书用它贯穿「一句情感判断怎么被 Prompt 改写」。

2. Prompt 四件套:一个情感判断的改写

书给 Prompt 下的定义:用于指导生成式 AI 执行特定任务的输入指令,通常以自然语言文本出现1。Prompt 工程的核心书也一句话点破:把新任务构建成模型在预训练阶段已经熟悉的形式,借它固有的泛化能力干活2

主走查。同一个判断任务,改写前后差多少3:

改写前:判断下面句子的情感:小浣熊连续吃了20包它最喜欢的烧烤味干脆面,
撑得肚子疼,痛并快乐的在地上打滚。
→ 模型答:「负面的」(被「撑得肚子疼」带跑了)

改写后:### 判断下面句子的情感为积极还是消极。 ← 任务说明
针对此问题有如下示例: ← 上下文(三个带标签示例)
# 示例1:…手舞足蹈迎接爸爸。\n积极
# 示例2:…辣得肚子疼。\n消极
# 示例3:…露出了满意的笑容。\n积极
### 待分类的句子:小浣熊连续吃了20包… ← 问题
### 以 {"结果": " "} 的JSON格式返回最终结果。 ← 输出格式
→ 模型答:{"结果": "积极"}(学会了对比例子:痛苦里带着快乐也算积极)

四件套缺一不可:任务说明要清晰直接;上下文给背景与示例;问题是真正的输入;输出格式(如 JSON——一种「键:值」成对的文本格式)让结果可以被程序直接拆开取用。

顺带的一个现实约束:Prompt 变长推理就变贵,于是有专门的压缩术——LLMLingua 能把 Prompt 压到原来的二十分之一而性能几乎不掉;RAG 场景的 FIT-RAG 把检索内容压缩一半4。(这套「改写改变判断」的效果在第 07 章会升级成完整的方法论。)

3. 分词:Prompt 进模型前的第一道工序

模型不认识文字,只认识数。Prompt 先被切成 token 序列——token 是承载语义的最小单元,每个 token 有唯一 ID,再经嵌入矩阵变成向量序列5。书的走查例子用 DeepSeek-V2 的分词器:「小浣熊吃干脆面」被切成 BOS、小、æµ、£、熊、吃、干脆、面——注意「浣」被拆成两个 token,而「干脆」是完整一个6

切法由分词算法决定,主流是 BBPE(按字节——文字在计算机里的底层编号——两两配对合并的编码法),四步循环7:

① 初始化:把所有文字按底层编码拆成单字节,当初始词表(256 个起步)
② 统计:数相邻 token 对的出现频率
③ 合并:把最高频的一对合并成一个新 token 入表
④ 迭代:回到②,直到词表达到预设大小
图说:高频组合(常见词、常用字)被逐步「焊」成整块;生僻字只能靠多块拼。

词表大小(词表里装多少个 token)是真金白银的权衡:太小(只含 256 个单字节)什么都能拼但序列暴涨、形近义远难区分;太大则长尾词学不透8。各家模型差距悬殊,书实测(中文语料取《朱自清散文》、英文取《项链》):GPT-3 的词表 50257,平均一个 token 只装 0.49 个汉字;DeepSeek-V1/V2 与 Qwen-1.5 优化过中文,平均一个 token 装 1.3 个字(每字只需约 0.7 个 token),常用词与成语能一击命中9。单 token 装的语义越多,同样的话输出的 token 越少,推理越省——这就是第 04 章 LLaMA-3 把词表扩三倍的全部动机。

4. 上下文学习:示例即教学

4.1 三级形式

上下文学习(ICL)指模型从 Prompt 里的任务说明与示例中学会任务,不做任何训练10。书用同一只小浣熊展示了三档11:

  • 零样本:只有任务说明。泛化强,但全凭模型底子。

  • 单样本:给一个示例,像人的「举一反三」;效果强依赖这个例子有没有代表性。

  • 少样本:几个到十几个示例,效果最好;代价是示例全都要进输入,推理成本涨。

数学题的例子最能看出「学」字:给一条「有 8 包吃了 6 包,还剩几包?答:2 包」的示例后,模型会仿照格式回答「24 包每天吃 2 包,5 天后剩几包」——答案是 14 包12

4.2 为什么换几个例子就「会」了

书引了斯坦福大学的一种解释:把上下文学习视为隐式的贝叶斯(按新证据更新旧判断的统计思路)推理

预训练时模型已经从海量文本里学过「情感」「句法(组词成句的规则)」这些潜在概念,推理时示例的作用是把模型「锚定」到相关概念上,而不是现教13。换句话说:示例不是教材,是定位器。这也解释了第 04 章的一个现象:为什么上下文学习要规模够大才涌现——概念库得先装满,锚才有处可下

4.3 示例怎么挑:相似性与多样性

示例不是随手放的。两个原则常常打架14:

  • 相似性:挑与问题最像的例子。KATE 用 RoBERTa 把问题与候选示例(去掉标签)编码,按余弦相似度(两串数的夹角)取前 K 个——简单有效,但选出来的例子可能高度雷同。

  • 多样性:让例子覆盖面广。Self-Prompting 先把候选聚成 K 簇,每簇只取与问题最相似的一个——不雷同了,但有的簇跟问题不沾边,相似性又不够。

兼顾两者的思路是迭代着选:RetICL 用一个 LSTM 检索器,选一个例子就更新一次内部状态(把「已选了什么」计入),再选下一个,直到凑够 k 个——效果更好,计算更复杂15

4.4 什么影响上下文学习的效果

书把因素分三层16:

因素要点
预训练数据领域丰富度 / 任务多样性 / 分布特性单一领域语料反而限制适应;突发性分布与罕见类别会增强 ICL
模型规模与架构参数需达亿级以上 ICL 才涌现;已知最小的是 5 亿参数的 Qwen2-0.5B;规模越大越强
演示示例格式 / 标签对错 / 数量 / 顺序复杂推理任务要给思维链示例;标签错了,大模型比小模型更敏感地跟着错;数量增益边际递减;顺序影响显著且最优顺序因模型而异

最后一条值得单独记住:模型越大越「信」你给的例子——示例标签标反了,大模型会忠实学走错误映射(输入到输出的对应关系),小模型反而无感。少样本是把双刃剑的机制根源。

5. 作者的判断与证据

  • 给了证据的:四件套改写的前后对比(「负面」→「积极」);分词效率实测表(9 个模型,注明中英语料来源);三档 ICL 的示例图。

  • 作者转述、未自证:「隐式贝叶斯推理」是斯坦福研究的解释,书明确标了出处——它是「一种解释」,不是定论;书原文说 ICL 为何奏效「仍然是一个重要的研究问题」17

  • 书的取向:把 Prompt 长度与成本当作一等公民讨论(LLMLingua/FIT-RAG)——这是工程教材的视角,纯论文综述不会花笔墨在这。

6. 边界与局限

  • 书只说「亿级以上」涌现 ICL 并举 Qwen2-0.5B 为最小已知例;「最小」是 2024 年中之前的快照。

  • Prompt 压缩(1/20)的评测集中在特定任务,通用性未证;压缩率和性能损失的权衡依任务而变。

  • 「锚定」解释覆盖了「模型为什么能被示例引导」,但覆盖不了第 4.4 节「大模型更易被错误标签带偏」的全部细节——学界对 ICL 是「学任务」还是「识别任务」仍有争论,书未展开。

  • 分词效率表的语料只有两种(一篇散文、一篇小说),数字当量级参考,不当精确基准。

7. 可带走的

  1. 「预训练-提示预测」取代「预训练-微调-预测」:任务变成一段话。
  2. Prompt 四件套:任务说明/上下文/问题/输出格式;加示例和 JSON 格式能反转判断结果。
  3. token 是模型的最小语义单元;BBPE 四步:拆字节→数对→并最高频→迭代。
  4. 分词效率差一倍:中文优化的模型一个 token 装 1.3 个字;这决定同样的文本谁更省钱。
  5. ICL 三级:零样本赌底子、单样本赌代表性、少样本买效果付算力。
  6. 示例是定位器不是教材:「锚定」到预训练学过的概念上。
  7. 挑示例:KATE 求相似、Self-Prompting 求多样、RetICL 迭代兼顾。
  8. 亿级参数是 ICL 门槛;示例标签错误对大模型的误导更大;示例顺序显著影响结果。

8. 原文地图

主题原书章原文位置
两种范式对比3.1 Prompt工程简介text/08-ch03-01-3-1-prompt.txt:3(搜「预训练-微调-预测」) · text/08-ch03-01-3-1-prompt.txt:9(搜「直接适应」)
Prompt 定义3.1.1 Prompt 的定义text/08-ch03-01-3-1-prompt.txt:23(搜「输入指令」)
Prompt 工程定义3.1.2 Prompt 工程的定义text/08-ch03-01-3-1-prompt.txt:66(搜「设计和优化」) · text/08-ch03-01-3-1-prompt.txt:70(搜「已经熟悉的形式」)
四要素与小浣熊改写3.1.2 Prompt 工程的定义text/08-ch03-01-3-1-prompt.txt:107(搜「四个基本元素」) · text/08-ch03-01-3-1-prompt.txt:87(搜「示例」)
Prompt 压缩3.1.2 Prompt 工程的定义text/08-ch03-01-3-1-prompt.txt:154(搜「压缩至原来的二十」) · text/08-ch03-01-3-1-prompt.txt:160(搜「50%」)
Token 与分词定义3.1.3 Prompt 分词向量化text/08-ch03-01-3-1-prompt.txt:169(搜「承载语义的最小单元」)
BBPE 四步3.1.3 Prompt 分词向量化text/08-ch03-01-3-1-prompt.txt:202(搜「BBPE」) · text/08-ch03-01-3-1-prompt.txt:209(搜「底层编码拆分为若干字节」)
词表大小权衡3.1.3 Prompt 分词向量化text/08-ch03-01-3-1-prompt.txt:227(搜「256 个 Token」)
分词效率实测3.1.3 Prompt 分词向量化text/08-ch03-01-3-1-prompt.txt:295(搜「1.3 个字」) · text/08-ch03-01-3-1-prompt.txt:295(搜「0.7 个 Token」)
三大意义(垂域/数据增强/代理)3.1.4 Prompt 工程的意义text/08-ch03-01-3-1-prompt.txt:351(搜「Spider」) · text/08-ch03-01-3-1-prompt.txt:363(搜「蒸馏」) · text/08-ch03-01-3-1-prompt.txt:385(搜「虚拟西部小镇」)
ICL 定义与 LLMaaS3.2.1 上下文学习的定义text/09-ch03-02-3-2.txt:28(搜「构造特定的 Prompt」)
三种形式3.2.1 上下文学习的定义text/09-ch03-02-3-2.txt:77(搜「Zero-shot」) · text/09-ch03-02-3-2.txt:83(搜「场景泛化能力」)
隐式贝叶斯与锚定3.2.1 上下文学习的定义text/09-ch03-02-3-2.txt:124(搜「奏效仍然是一个重要的研」) · text/09-ch03-02-3-2.txt:128(搜「隐式贝叶斯推理」) · text/09-ch03-02-3-2.txt:130(搜「锚定」)
相似性与多样性3.2.2 演示示例选择text/09-ch03-02-3-2.txt:148(搜「相似性和多样性」)
三种选择方法3.2.2 演示示例选择text/09-ch03-02-3-2.txt:179(搜「KATE」) · text/09-ch03-02-3-2.txt:211(搜「Self-Prompting」) · text/09-ch03-02-3-2.txt:244(搜「RetICL」)
预训练数据三因素3.2.3 性能影响因素text/09-ch03-02-3-2.txt:288(搜「领域丰富度」) · text/09-ch03-02-3-2.txt:300(搜「突发性分布」)
亿级门槛与 Qwen2-0.5B3.2.3 性能影响因素text/09-ch03-02-3-2.txt:312(搜「亿」) · text/09-ch03-02-3-2.txt:316(搜「Qwen2-0.5B」)
标签敏感与顺序3.2.3 性能影响因素text/09-ch03-02-3-2.txt:349(搜「更高的敏感性」) · text/09-ch03-02-3-2.txt:361(搜「模型依赖性」)

Footnotes

  1. 出处:「3.1.1 Prompt 的定义」第 23 段(text/08-ch03-01-3-1-prompt.txt:23,搜「输入指令」)。

  2. 出处:「3.1.2 Prompt 工程的定义」第 70 段(text/08-ch03-01-3-1-prompt.txt:70,搜「已经熟悉的形式」)。

  3. 出处:「3.1.2 Prompt 工程的定义」第 87 段(text/08-ch03-01-3-1-prompt.txt:87,搜「示例」)。图 3.3 的改写前后全文(text/08-ch03-01-3-1-prompt.txt:79,搜「原始的Prompt」);四要素列举在第 107 段(text/08-ch03-01-3-1-prompt.txt:107,搜「四个基本元素」)。

  4. 出处:「3.1.2 Prompt 工程的定义」第 154 段(text/08-ch03-01-3-1-prompt.txt:154,搜「压缩至原来的二十」)与第 160 段(text/08-ch03-01-3-1-prompt.txt:160,搜「50%」)。

  5. 出处:「3.1.3 Prompt 分词向量化」第 169 段(text/08-ch03-01-3-1-prompt.txt:169,搜「承载语义的最小单元」)。

  6. 出处:「3.1.3 Prompt 分词向量化」第 163 段(text/08-ch03-01-3-1-prompt.txt:163,搜「分词」)。图 3.4 的 token 切分与 ID(BOS 100000、干脆 65553 等)见同段;「浣」拆两块的解释在第 250 段(text/08-ch03-01-3-1-prompt.txt:250,搜「生僻字」)。

  7. 出处:「3.1.3 Prompt 分词向量化」第 202 段(text/08-ch03-01-3-1-prompt.txt:202,搜「BBPE」)与第 5–7 段(text/08-ch03-01-3-1-prompt.txt:209,搜「底层编码拆分为若干字节」)。

  8. 出处:「3.1.3 Prompt 分词向量化」第 227 段(text/08-ch03-01-3-1-prompt.txt:227,搜「256 个 Token」)。

  9. 出处:「3.1.3 Prompt 分词向量化」第 295 段(text/08-ch03-01-3-1-prompt.txt:295,搜「1.3 个字」)与第 295 段(text/08-ch03-01-3-1-prompt.txt:295,搜「0.7 个 Token」)。GPT-3 词表 50257 与 0.4858 见表 3.1(text/08-ch03-01-3-1-prompt.txt:281,搜「50,257」)。

  10. 出处:「3.2.1 上下文学习的定义」第 28 段(text/09-ch03-02-3-2.txt:28,搜「构造特定的 Prompt」)。

  11. 出处:「3.2.1 上下文学习的定义」第 77 段(text/09-ch03-02-3-2.txt:77,搜「Zero-shot」)。零样本泛化强、单样本举一反三、少样本效果最好成本高的展开在同段(text/09-ch03-02-3-2.txt:83,搜「场景泛化能力」;text/09-ch03-02-3-2.txt:87,搜「举一反」)。

  12. 出处:「3.2.1 上下文学习的定义」图 3.5(text/09-ch03-02-3-2.txt:55,搜「还剩下几包」)。数学示例「8 包吃 6 包剩 2 包」与问题「24 包每天 2 包 5 天后」见同图。

  13. 出处:「3.2.1 上下文学习的定义」第 124 段(text/09-ch03-02-3-2.txt:124,搜「奏效仍然是一个重要的研」)、第 128 段(text/09-ch03-02-3-2.txt:128,搜「隐式贝叶斯推理」)与第 130 段(text/09-ch03-02-3-2.txt:130,搜「锚定」)。

  14. 出处:「3.2.2 演示示例选择」第 148 段(text/09-ch03-02-3-2.txt:148,搜「相似性和多样性」)与第 179 段(text/09-ch03-02-3-2.txt:179,搜「KATE」)、第 211 段(text/09-ch03-02-3-2.txt:211,搜「Self-Prompting」)。

  15. 出处:「3.2.2 演示示例选择」第 236 段(text/09-ch03-02-3-2.txt:236,搜「顾此失彼」)与第 244 段(text/09-ch03-02-3-2.txt:244,搜「RetICL」)。

  16. 出处:「3.2.3 性能影响因素」第 288 段(text/09-ch03-02-3-2.txt:288,搜「领域丰富度」)、第 300 段(text/09-ch03-02-3-2.txt:300,搜「突发性分布」)、第 312 段(text/09-ch03-02-3-2.txt:312,搜「亿」)、第 316 段(text/09-ch03-02-3-2.txt:316,搜「Qwen2-0.5B」)、第 349 段(text/09-ch03-02-3-2.txt:349,搜「更高的敏感性」)与第 361 段(text/09-ch03-02-3-2.txt:361,搜「模型依赖性」)。

  17. 出处:「3.2.1 上下文学习的定义」第 124 段(text/09-ch03-02-3-2.txt:124,搜「奏效仍然是一个重要的研」)。