什么时候只给指令就够了,什么时候应该给模型几个示例?

Zero-shot 与 Few-shot

约 13 分钟5 道自测更新于 2026-11-01

一句话记住Few-shot 不改模型参数,而是用示例告诉模型任务的格式、输入分布和边界;示例要相关、覆盖面够,且要测试顺序变化带来的不稳定。

01学完你能做到

知道什么时候给示例、给几个。

02三个名词

  • Zero-shot(零样本):只给指令,不给示例。
  • One-shot(单样本):给 1 个「输入 → 输出」示例。
  • Few-shot(少样本):给几个示例,常见是 2 到 10 个。

这三个名词来自 GPT-3 论文(第 9 讲(预训练与规模定律)讲过),论文的题目就叫《Language Models are Few-Shot Learners》。

关键点:这三种做法都不改模型参数。模型只是在提示词里「看了几个例子」,然后照着规律回答,这叫上下文学习(in-context learning)。它和第 10 讲(指令微调 SFT 与 LoRA)讲的微调不同,微调要真的更新参数。

Zero-shot、One-shot 与 Few-shot
  1. Zero-shot只给指令
  2. One-shot给 1 个示例
  3. Few-shot给多个示例

03什么时候需要示例

情况建议
常见任务,用一句话就能说清(翻译、摘要)先试 zero-shot
输出格式特殊,用语言很难描述清楚给示例,示例比描述更直观
标签有公司内部的定义(如「什么算高风险订单」)给示例,覆盖边界情况
想要特定的语气或风格给 1 到 3 个风格样本

给几个?Anthropic 文档的建议是 3 到 5 个效果最好。文档还要求示例做到三点:

  • 相关:贴近真实使用场景。
  • 多样:覆盖不同情况,避免模型学到无关的规律。
  • 结构清楚:用 <example> 标签包起来,和指令区分开。

OpenAI 文档也建议示例尽量覆盖多样的输入。

04演示:从 zero-shot 到 few-shot

任务:把客户工单分成「账户问题 / 交易问题 / 数据问题」三类。

Zero-shot

把下面的工单分类为:账户问题、交易问题、数据问题。只输出类别。
工单:昨天的成交回报到现在还没发送过来。

模型可能输出「交易问题」,也可能输出「数据问题」。在公司内部,「回报没发送」到底算哪一类,模型并不知道。

Few-shot(3 个示例,覆盖边界)

把工单分类为:账户问题、交易问题、数据问题。只输出类别。
<example>工单:登录提示密码错误 → 账户问题</example>
<example>工单:下单被拒,提示超出风控限额 → 交易问题</example>
<example>工单:行情或回报发送延迟、缺失 → 数据问题</example>
工单:昨天的成交回报到现在还没发送过来。

第三个示例专门说明了「发送延迟、缺失」属于数据问题,模型就能照着这条规则来分。示例的价值往往在于说清边界,而不只是演示格式。

05示例带来的偏差

Few-shot 很方便,但也不稳定。三篇论文指出了它的毛病。

顺序会大幅影响结果

Lu 等(2022)发现:同样几个示例,只换排列顺序,效果可能从「接近最优」掉到「接近随机猜」。他们还发现,这种现象在各种规模的模型里都存在;对一个模型好的顺序,换到另一个模型上未必好。

模型偏爱某些答案

Zhao 等(2021)发现,提示格式、示例的选择和顺序都会让准确率在「接近随机」和「接近最优」之间摆动。原因是模型对某些答案有偏好,比如:

  • 偏爱提示末尾附近出现过的标签;
  • 偏爱预训练数据里常见的词。

他们提出的修正办法叫上下文校准(contextual calibration)。

手算一遍(数字是示意,方法按论文):

  1. 把真实输入换成没有内容的「N/A」,看模型的偏见:P(正面)=0.70,P(负面)=0.30。正常情况下应该各 0.5,说明模型天生偏向「正面」。
  2. 输入真实评论,得到原始概率:正面 0.60,负面 0.40。不做校准的话,答案是「正面」。
  3. 校准:用每个概率除以对应的偏见,再归一化。
    • 正面:0.60 / 0.70 = 0.857
    • 负面:0.40 / 0.30 = 1.333
    • 归一化:0.857 / (0.857 + 1.333) = 0.39,1.333 / 2.190 = 0.61
  4. 校准后答案变成「负面」。原来的「正面」主要来自模型的偏见。

论文报告,这个方法让 GPT-3 和 GPT-2 的平均准确率最多提升了 30 个百分点(绝对值),而且不同提示之间的差异也变小了。

标签对不对,没想象中重要

Min 等(2022)做了一个出人意料的实验:在分类和选择题任务中,把示例里的标签随机替换,效果几乎不下降。这个结论在 12 个模型上(包括 GPT-3)都成立。

他们认为,真正起作用的是示例提供的另外三样东西:

  1. 标签空间:一共有哪些可选答案;
  2. 输入的分布:真实输入大概长什么样;
  3. 整体格式:输入和输出怎么排列。

这不代表标签可以乱写。该结论来自分类和选择题实验,在需要精确规则的任务里(比如上面的工单分类边界)标签仍然重要。它说明的是:示例的很大一部分作用是「告诉模型这道题长什么样」。

上下文校准先用 N/A 测量标签偏好,再把真实输入概率除以偏好并重新归一化(示意)。
上下文校准先用 N/A 测量标签偏好,再把真实输入概率除以偏好并重新归一化(示意)。

06实用清单

  • 先用 zero-shot 写一版,找出失败的样例,再针对这些样例补充示例。
  • 示例要覆盖每个类别,数量大致平衡,避免模型偏向出现多的类别。
  • 打乱示例顺序多测几次。如果结果波动很大,说明提示还不稳定。
  • 用 <example> 标签把示例和指令分开。
  • 示例格式必须和你期望的输出完全一致,模型会照抄格式。
上下文校准
  1. 1测量空输入偏好用 N/A 得到各标签偏好
  2. 2得到真实输入概率保留原始结果
  3. 3按偏好校准除以偏好并归一化

07延伸阅读

  • Brown et al., Language Models are Few-Shot Learners, 2020:arxiv.org
  • Zhao et al., Calibrate Before Use: Improving Few-Shot Performance of Language Models, 2021:arxiv.org
  • Lu et al., Fantastically Ordered Prompts and Where to Find Them, 2021:arxiv.org
  • Min et al., Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?, 2022:arxiv.org
  • Anthropic, Prompting best practices:platform.claude.com
  • OpenAI, Prompt engineering:platform.openai.com
  • Prompt Engineering Guide 中文版:promptingguide.ai

08一分钟讲给别人

试着用自己的话讲一遍Zero-shot 只给指令,few-shot 在提示里放几个示例,两者都不改模型参数,属于上下文学习。示例最适合用来说明格式、风格和边界,Anthropic 建议给 3 到 5 个,并且要相关、多样、用标签隔开。Few-shot 不稳定:示例顺序可能让效果从接近最优掉到接近随机;模型偏爱末尾出现过的标签和常见词,可以用「N/A」测出偏见再做校准。示例的作用很大一部分在于展示标签空间、输入分布和格式。

想一想

5 道自测

先在心里答一遍,再展开对照。能说清理由,比答对数字更重要。

  1. 01Few-shot 和微调的根本区别是什么?

  2. 02用「N/A」测得 P(是)=0.8、P(否)=0.2;某个输入的原始概率是 P(是)=0.7、P(否)=0.3。校准后答案是什么?

  3. 03Min 等人的实验说明了什么?能不能因此随便写示例标签?

  4. 04为什么要打乱示例顺序测试?

  5. 05什么情况下优先考虑 few-shot?

已看 0/5 题

练动手练习

准备 5 条虚构的客户工单和“账户、交易、数据”三个类别,先不用示例让 AI 分类。再给它 3 条覆盖边界的示例,交换示例顺序后各测一次,比较 few-shot 是否稳定以及示例究竟说明了什么。

完成这一课

完成这一课

读完讲义、看完自测答案,这一课就算学完了。

  • 读完讲义
  • 看完全部自测

本课为投资者教育内容,案例数字均为示意,不构成任何投资建议,也不承诺收益。规则和费率会变,实际操作前请以交易所、监管机构和产品的最新公告为准。