零样本、少样本与示例工程
一句话定义
不给示例是零样本,给少量输入-输出对是少样本(few-shot)——模型通过上下文中的示例"现学"任务模式,示例的质量与分布比数量更重要。
为什么重要
少样本是提示工程中投入产出比最高的技法:不训练、不改权重,只改上下文就能显著改变输出模式。它也是歧义最大的技法——放错示例会把模型的错误固化为系统性偏差。掌握了"示例如何被模型消费",你就能解释为什么同一个提示换示例就换行为,并主动用示例做行为校准(这与 结构化输出:JSON/YAML 与 Schema 约束 的结构化输出配合是生产标配)。
前置知识
- 系统提示词设计:角色、边界与结构:示例区在系统提示中的位置与预算约束;
- 分词与上下文:模型如何"读"你的话:模型把示例当作 token 模式消费,没有"理解-记忆"之分。
直观类比
教实习生做审核:口头讲十条规则(指令),不如甩给他三份"这么判"和一份"别误判成这样"的历史案例(示例)。实习生照着案例的模式做事——模型同理,而且它只照模式。
图示
指令:判断评论情感,输出 正面/负面/中性。
示例1:'物流太慢了' → 负面
示例2:'还行吧,凑合' → 中性 ← 边界示例(价值最高)
示例3:'客服秒回,好评!' → 正面
输入:{用户评论} →核心概念
- 零样本(Zero-shot):只有指令没有示例。适合任务模式明确、模型先验强的场景(翻译、总结)。
- 少样本(Few-shot):指令 + 若干完整输入-输出对。适合格式特殊、边界模糊、领域术语多的任务。
- 模式诱导(In-Context Learning):示例的真正作用是告诉模型"输出长什么样、边界在哪",而非"传授知识"——模型不会因示例学会新事实,只会学会模式。
- 示例分布:示例集合对输入空间的覆盖率,包括正例、易混淆的负例、边界样本。
- 示例顺序:最后一个示例对输出的影响最强(近因效应,见 注意力衰减与"迷失在中间"(Lost in the Middle)),把最典型的示例放在最后。
原理与机制
模型做的是条件续写:少样本提示实际上构造了一个"这个任务的历史输入输出长这样"的序列,生成时向该模式收敛。三个设计推论:
- 格式一致性是硬要求:示例的输出格式就是模型要模仿的格式,示例里 inconsistent 的格式会被忠实模仿——写示例比写指令更重要(格式教学靠示例,规则教学靠指令);
- 负例与边界例价值最高:只放正例,模型对边界情况自由发挥;刻意放一个"这不算 X,应输出 Y"的对比示例,能消除大部分歧义;
- 标签/难度要均衡:分类任务中示例标签分布失衡,会导致预测分布跟着失衡——这是"模型总判成好评"的第一嫌疑。
公式或模型
本节不适用——示例选择没有可计算公式;少样本收益的量化来自论文基准与自身任务的评估集对比(见 评估集构建:黄金样本与失败分类)。
实例或案例
案例:抽取任务的 before/after。
before(零样本,输出随机):
从下面的邮件中提取姓名、订单号、问题类型,以 JSON 输出:
{邮件正文}症状:字段名漂移(name/user_name 乱换)、缺字段、多解释。
after(少样本 + 契合 结构化输出:JSON/YAML 与 Schema 约束 的格式锚定):
从邮件中提取信息,严格按示例格式输出 JSON,缺失字段填 null。
示例1:
邮件:你好,我是王小明,订单 A10293 到货破损。
输出:{"姓名":"王小明","订单号":"A10293","问题类型":"物流破损"}
示例2:
邮件:收到的杯子是裂的,怎么办?
输出:{"姓名":null,"订单号":null,"问题类型":"商品质量"}
示例3(边界):问天气无关内容时
输出:{"姓名":null,"订单号":null,"问题类型":"无关"}
现在处理:{邮件正文}操作步骤:① 收集 20 个真实输入,手工标注理想输出;② 挑 3~5 个覆盖主要模式(含 1 个边界例)做示例;③ 剩余做测试集(见 评估集构建:黄金样本与失败分类);④ 失败样本优先转化为新示例或负例。
排错清单:
- 症状:输出模仿了示例里的错别字/错误值 → 示例必须逐字校对,示例错误被忠实复制;
- 症状:只对与示例相似的问题有效 → 分布覆盖不足,补不同模式示例;
- 症状:示例太长挤爆预算 → 用 上下文压缩:摘要、滚动与层级 的方式压缩示例背景,保留"输入-输出"骨架。
常见误区
- 示例越多越好:超过一定数量后边际收益趋零而成本线性上升,且加剧中段衰减;3~5 个精选通常优于 20 个平庸。
- 以为示例能注入知识:示例教模式不教事实——需要事实请走资料区/检索(RAG 侧议题,本库只管呈现,见 长文档组织:分块、裁剪与引用定位)。
- 示例与指令冲突:指令说输出 JSON,示例却是纯文本——模型通常跟示例走,格式类要求必须示例先行。
自测题
- 分类任务中模型总输出"正面",最先检查什么?
答:示例标签分布是否失衡——示例几乎全是正面会诱导预测偏向正面。
- 为什么边界示例比普通正例更重要?
答:它消解"什么不算/怎么判"的歧义,正例只展示典型模式,边界例决定自由发挥空间的大小。
- 零样本什么时候够用?
答:任务模式是模型强项且格式标准(翻译、常见格式总结)时;格式特殊或领域歧义大时必须上少样本。
与其他知识点的关系
输出格式控制三件套:指令、示例与结构 讲格式控制的指令-示例配合;结构化输出:JSON/YAML 与 Schema 约束 把示例锚定到 schema;信息放置策略:指令、知识、数据的排布 决定示例区放哪(通常紧邻指令之后、资料之前);示例质量问题的终极兜底是 评估集构建:黄金样本与失败分类 的评估集。
延伸阅读
- 论文:Language Models are Few-Shot Learners(Brown et al., 2020)——少样本情境学习(in-context learning)的奠基工作。
来源
- Language Models are Few-Shot Learners (Brown et al.
- 2020)