如果让大模型做分类、抽取或格式转换时它总是答非所问,少样本提示是最先值得试的手段:在提示里附上几个做好的示例,模型会照着示例的格式和思路处理真正的输入。读完这篇你能写出第一个少样本提示,知道示例怎么挑、随机标签为什么也能用,以及什么情况下该换更复杂的技术。
少样本提示是什么
少样本提示(few-shot prompting)是一种启用上下文学习(in-context learning)的提示技术:在提示里提供若干演示(demonstration),引导模型在当前任务上表现更好。这些演示是后续示例的条件——你给出「输入长这样、答案长这样」,模型就照着这个模式处理接下来真正的输入 [1]。
演示也不用长篇大论:一两行「输入加答案」就够,关键是让模型看清任务的模式。它和零样本提示(zero-shot prompting)的区别在于有没有示例。大模型的零样本能力很强,但在更复杂的任务上,只给一句任务描述往往表现不佳;附上演示后效果通常明显改善 [1]。
和微调相比,少样本提示不改动模型参数,示例只存在于当次调用的上下文里。换来的是近乎零成本的试验:换几个示例、调一下格式,重新调用一次就能看到效果,很适合在正式决定微调之前快速验证任务可行性。
少样本能力对模型规模有要求。Touvron 等人 2023 年的论文指出,当模型规模足够大时,少样本特性才开始出现,这与 Kaplan 等人 2020 年的缩放研究一致 [1]。也就是说,太小的模型给再多示例也未必学得会。
第一个少样本提示怎么写
经典例子来自 Brown 等人 2020 年的论文,任务是正确使用一个从未见过的新词。提示里先给出 whatpu 这个词的用法示例,再让模型用 farduddle 造句 [1]:
“whatpu”是坦桑尼亚的一种小型毛茸茸的动物。一个使用whatpu这个词的句子的例子是:
我们在非洲旅行时看到了这些非常可爱的whatpus。
“farduddle”是指快速跳上跳下。一个使用farduddle这个词的句子的例子是:模型输出:
当我们赢得比赛时,我们都开始庆祝跳跃。只给了一个示例(1-shot),模型就学会了任务的做法:把生词放进一个通顺的句子里。对更难的任务,可以增加示例数量,比如 3-shot、5-shot、10-shot [1]。任务用什么语言,示例就用什么语言写;关键是示例的输入输出格式要和真实输入一致,模型会把这种格式延续下去。
示例怎么挑:三个有用的结论
Min 等人 2022 年的研究给出了几条关于演示的结论 [1]:
- 标签空间和演示中输入文本的分布都很重要,即使标签对单个输入并不正确;
- 演示使用的格式对性能起关键作用,即使只是随机标签,也比没有标签好得多;
- 从真实标签分布(而不是均匀分布)里选取随机标签也有帮助。
用情感分类试一下随机标签:把 Negative 和 Positive 随机分配给输入 [1]:
这太棒了!// Negative
这太糟糕了!// Positive
哇,那部电影太棒了!// Positive
多么可怕的节目!//输出:
Negative标签完全是随机分配的,模型仍然答对了「多么可怕的节目」是负面评价。原因之一是演示保留了「输入 // 标签」这个格式。更新一些的 GPT 模型对格式甚至也更稳健,下面这个提示的标签位置和分隔符都不统一 [1]:
Positive This is awesome!
This is bad! Negative
Wow that movie was rad!
Positive
What a horrible show! --输出仍然是 Negative。对分类类任务,格式的重要性往往高于标签是否正确;这也意味着准备示例时可以不必逐条核对标签的正确性,先把手头数据整理成统一格式放进提示,就能快速看到模型的表现。不过这类结论多来自较简单的任务,换到复杂任务上最好自己验证一遍。
写示例的几个实操要点
把上面的结论变成动手时的清单:
- 从 1-shot 开始试,不够再往 3-shot、5-shot 加。每加一个示例,提示就变长,调用的费用和响应时间都会增加,先看一个示例能不能解决问题;
- 示例的输入要和真实输入来自同一类文本,标签体系要和你要的输出一致,这正是 Min 等人结论里「分布很重要」的含义 [1];
- 所有示例的输出部分保持同一种格式,比如统一用「// 标签」结尾,方便程序按格式解析模型返回;
- 分类任务可以先用随机标签快速搭起格式,再换成从真实标签分布里抽出的标签,效果更好 [1]。
少样本提示解决不了什么
标准的少样本提示不是完美技术,面对更复杂的推理任务会失灵 [1]。看一个零样本就出错的例子:
这组数字中的奇数加起来是一个偶数:15、32、5、13、82、7、1。
A:模型的回答是:
是的,这组数字中的奇数加起来是107,是一个偶数。答案错了,而且错得很笃定。试试加示例的少样本版本,给出四个带答案的演示 [1]:
这组数字中的奇数加起来是一个偶数:4、8、9、15、12、2、1。
A:答案是False。
这组数字中的奇数加起来是一个偶数:17、10、19、4、8、12、24。
A:答案是True。
这组数字中的奇数加起来是一个偶数:16、11、14、4、8、13、24。
A:答案是True。
这组数字中的奇数加起来是一个偶数:17、9、10、12、13、4、2。
A:答案是False。
这组数字中的奇数加起来是一个偶数:15、32、5、13、82、7、1。
A:输出:
答案是True。还是错的。这个例子还有个值得注意的地方:四个演示的答案有 True 也有 False,说明示例并不需要答案清一色,真正要紧的是都用同一种格式写出判断。问题在于:示例只能告诉模型答案的格式(True 或 False),演示不了中间的推理步骤。这类需要把问题分解成步骤来解的任务,示例帮不上忙 [1]。
什么时候该换技术
一个实用的判断顺序:先试零样本,不行就加示例;示例加到 3-shot、5-shot 还不行,说明模型对这个任务学得不够,此时有两条路——微调模型,或改用更高级的提示技术 [1]。对算术、常识、符号推理类任务,下一步通常是思维链(CoT)提示:让模型先写出中间推理步骤再给答案,这已成为处理这类任务的流行做法 [1]。
本文改编自 DAIR.AI 开源教程《Prompt Engineering Guide》的少样本提示一节[1],原文以 MIT 许可证发布。
来源
- 1少样本提示 | Prompt Engineering GuideDAIR.AI Prompt Engineering Guide (MIT)
引用本页: 少样本提示(Few-shot)怎么写. TellWorld, https://www.tellworld.net/zh/practice/practice-prompt-few-shot. 更新于 2026-11-14