你在豆包或 Kimi 里贴上三条示例,输出立刻变得整齐,这件事背后是 few-shot(少样本提示)在工作:先给模型看几条「输入—输出」配对,它就能照着样子续写新的一条。这篇文章拆开这个过程,看大模型到底是怎么被示例「教会」格式的。
第一步是读取与编码。你发出去的整段提示会被切成一个个词块,示例部分和指令部分一起进入模型。模型并不会把示例存成一条条规则,它把整个文本当作一个序列,逐块计算「下一个最可能出现的词块是什么」。
模式匹配:它真的在找规律
关键机制叫模式匹配。当模型读到「输入:某句话 输出:对应结果」这样的结构重复了三次,生成时就倾向于延续这个结构。它学到的规律包括三块:格式外壳,即输入输出的固定写法;内容映射,即什么样的输入对应什么样的输出;表达习惯,包括标点、详略与语气。三者混在一起,被一次性延续下来。
举例说,你给了三条「中文名词对应英文缩写」的示例,哪怕没写任何指令,模型遇到第四个中文名词时也会自动产出缩写。这就是示例在替指令干活:规律比命令更容易被延续。
再看一个反例。三条示例里,前两条用「输入:/输出:」做外壳,第三条随手写成了「问:/答:」,新输入进来后,输出可能在两种外壳之间摇摆,甚至前半段用一种、后半段换另一种。模式匹配不辨认你的意图,只负责延续最近、最像的模式,示例内部的整齐度就是它唯一的依据。
示例质量比数量更要紧
很多教程强调示例要多,实际更重要的是示例内部一致。三条格式统一的示例,胜过六条格式各异的示例。一旦示例之间互相打架,模型只能猜该延续哪一种,输出就开始摇摆。写完示例先自问:这几条除了具体内容,外壳是否完全一样?
数量也有讲究。简单格式两三条够用,复杂映射比如从长文本抽取字段,往往要五到八条才能稳定。一条实用判断:格式越简单,示例可以越少;输入输出差异越大,示例越要覆盖不同情形。
为什么有时候给了示例也没用
三种常见情形会让示例失灵。一是示例太短,模型抓不到稳定的映射规律;二是新输入和示例差异太大,模式匹配不上,模型退回自己的默认习惯;三是提示里其他要求与示例矛盾,比如文字说只要纯文本、示例却带着表格符号,这时模型可能两头都做一点。排查也按这三步走:先看一致性,再看覆盖面,最后查矛盾。
| 症状 | 输出表现 | 先查什么 |
|---|---|---|
| 示例外壳不一致 | 两种格式之间摇摆 | 先看一致性 |
| 示例覆盖不足 | 新输入匹配不上,退回默认习惯 | 再看覆盖面 |
| 指令与示例矛盾 | 两头都做一点 | 最后查矛盾 |
few-shot 快速自查
- 示例外壳完全一致吗?
- 示例覆盖了新输入的类型吗?
- 文字指令与示例有矛盾吗?
- 简单任务两三条起步,复杂任务再逐步加
每次调整示例都记一条迭代记录,回头才知道是哪次改动生效。
示例和角色设定经常配合使用:角色管语气,示例管格式,各管一段。角色一侧的机制可以读角色设定这篇。示例之外,用分隔符把指令区和示例区隔开,混淆更少。想知道为什么写进系统位置的要求更硬,见系统提示一篇。改示例没头绪时,迭代记录能帮你定位是哪次改动出了问题。
聊聊few-shot的常见疑问
- few-shot 里的示例会被模型记住吗?:不会进入长期记忆,它只影响这一次生成,关掉会话后什么也不留。
- 示例用中文还是英文好?:跟随你期望的输出语言,示例语言与新输入语言一致时,模式匹配最顺畅。
- 示例越多效果越好吗?:不是。超过需要的示例会拉长提示、增加干扰,稳定之后就该停手。


