welclaiAI·TREND·DIGEST
教程

少样本提示:一份实用指南

示例比指令更快地教会模型。这里讲的是如何挑选、排序和格式化它们,让少样本提示可靠地见效。

tutorials2026-04-05 15:34 KST·主编·7 分钟

在与语言模型打交道的过程中,有一个时刻,指令不再奏效,而示例开始奏效。你已经用三种不同的方式解释了任务,模型却仍然把格式弄得略有出入,或漏掉了边缘情况,或把输出格式化得前后不一。修复之道通常不是写一段更好的指令——而是给模型看一个好答案长什么样。这就是少样本提示(few-shot prompting),做得好,它是你拥有的最可靠的工具之一。

为什么示例胜过解释

一条指令描述一个模式。一个示例演示它。这个差别要紧,因为演示去除了描述所留下的含混。「把日期格式化为月、日、年」仍然留下了一打选择——有没有逗号、月份是否缩写、是否补前导零。一个展示了确切目标输出的单个示例,一下子就把这些全部敲定,而你不必把每个你在意的细节都罗列出来。

这之所以奏效,是因为模型会生成其上下文最可能的续写。当那个上下文里包含两三个干净的「输入接正确输出」的示例时,对一个新输入而言最可能的续写,就是一个匹配既定模式的输出。你与其说是在教模型一项新技能,不如说是在让答案的形状变得显而易见。示例越清晰、越一致,那个形状就越明显。

零样本、单样本,以及何时需要更多

从零个示例开始。如果任务简单,模型仅凭指令就已经做得很好,那么示例只是浪费的 token 和延迟。许多任务确实不需要它们。当零样本的输出前后不一、格式弄错,或在某一类输入上失败时,再去取用示例。

一个好的示例常常能自行修复格式问题——它钉住了散文难以传达的结构。当任务有模型需要看到的多样性时,再加上第二个和第三个:不同的输入类型、一个边缘情况、一个「没有答案」的情况。超过寥寥几个,你通常会撞上收益递减;更多的示例花费更多,而一旦模式已经清楚,它们很少再添多少价值。正确的数量,是那个能让模式毫不含混的最小集合,而不是你塞得下的最大集合。

挑选能代表现实的示例

最大的单个错误,是挑选的示例全都很简单。如果每个示例都展示一个干净、规整的输入产出一个显而易见的答案,那你就只教了模型那条简单的路,别无其他。然后一个乱糟糟的真实输入到来,模型却没有可以退守的、被演示过的行为。你的示例应当看起来像你真实的数据,包括那些你但愿更干净的部分。

刻意地把那些要紧的情况包括进来。如果某些输入应当产出「我不知道」或一个空结果,就给出一个正是这么做的示例——否则模型会学到每个输入都得到一个自信的答案。如果某个特定类别容易出错,就放一个进去。示例是一份课程;挑选它们去覆盖那些模型本会绊倒的情形,而不是那些它本来无论如何都会成功的。

让示例彼此保持一致

示例靠模式来教,所以它们之间的矛盾是有害的。如果一个示例用破折号格式化列表、另一个用数字,你就教会了模型两者都可接受,而它会把它们混着用。如果一个示例包含一个推理步骤、另一个直接跳到答案,模型就分不清你想要哪个。每个示例都应当在格式、语气和结构上达成一致,细到细枝末节。

这种一致性延伸到示例与真实输入之间的边界。对你的示例和你附在末尾的实际任务,使用相同的标签、相同的分隔符、相同的版式。模型应当把新输入看作既定序列中的下一项,格式与此前的完全相同。示例和真实输入之间任何视觉上的断裂,都是模式溜走的机会。

把格式做得让边界一目了然

少样本提示在模型分不清一个示例在哪里结束、下一个在哪里开始,或者示例在哪里停止、真实任务在哪里开始时,就会失败。让那些边界明确无误。给各部分加上标签——一个清晰的输入标记和一个清晰的输出标记——并对每个示例重复那个完全相同的结构。一致的分隔符,能把一面文字墙变成一个模型可以续写的、清晰易读的序列。

这个结构还防范一种微妙的失败:输入内容渗进指令里。当示例被清晰地分隔时,那些碰巧看起来像命令的内容,会留在它带标签的格子里,被当作数据来对待。当一切混在一起时,模型就更可能把输入误读为指令。在这里,少量的格式纪律能为你买来大量的可靠性,而它几乎不花什么成本。

对着一个集合迭代,而不是单个案例

像所有提示工作一样,少样本工作只有在它能跨真实输入站得住时才算完成。人们很想把示例反复微调,直到某个令人印象深刻的案例完美运行,但那一个案例是一次演示,不是一次衡量。收集一组多样的真实输入,对它们全部跑你的少样本提示,并阅读结果,去看那些示例本应防止的失败。

一次只改一样东西。换掉一个示例,加上你总在漏的那个边缘情况,修好一处不一致,然后再次跑整个集合并比较。有时你会发现,一个你以为有帮助的示例,实际上在把模型锚向一个错误的模式;去掉它反而让情况变好。保留那个在你所有测试输入上表现最好的示例集,并把示例集当作一件你需要维护的东西,而不是一件你写一次就完事的东西。

总结

少样本提示之所以奏效,是因为演示比描述更清晰。当仅凭指令会让输出前后不一时使用它,并用那个能让模式毫不含混的最少示例。挑选看起来像真实数据的示例——把边缘情况和「没有答案」的情况包括进来——让它们彼此保持一致,并把边界格式化好,让模型把它们读作一个干净的序列。然后对着一组真实输入而不是单个演示去证明它。一小撮精挑细选、彼此一致的示例,在那些格式和边缘情况最要紧的任务上,会胜过成段的指令。

#few-shot#prompting#examples#patterns