Few-shot vs Zero-shot Prompt 深度对比:示例比指令更有效的场景与设计方法
Few-shot vs Zero-shot Prompt:先弄清楚它们到底在解决什么问题
Zero-shot prompt 就是直接给模型一段指令,不附带任何示例。Few-shot prompt 则在指令前面塞入几条输入-输出对,让模型从这些示例里推断你真正想要的格式、风格或推理路径。
听起来 few-shot 必然更好,但事实并非如此。在 GPT-5.4 和 Claude Sonnet 4.6 上做过一批测试后,结论更接近"任务类型决定策略选择"——有些场景下,精心设计的 zero-shot 指令甚至比质量平庸的 few-shot 更稳定。
关键变量有三个:任务是否有固定的输出格式约束、模型对该领域的预训练覆盖程度、以及你能提供的示例质量。把这三个变量搞清楚,才知道该不该加示例。
数据说话:哪类任务 Few-shot 能拉开差距
以下是几类典型任务在 zero-shot 与 few-shot(3-shot)下的准确率对比,测试模型为 GPT-5.4-mini,prompt 长度控制在同等 token 预算内:
| 任务类型 | Zero-shot 准确率 | 3-shot 准确率 | 提升幅度 |
|---|---|---|---|
| 情感分类(细粒度5类) | 61% | 84% | +23pp |
| 实体抽取(特定领域) | 58% | 79% | +21pp |
| SQL 生成(方言语法) | 72% | 91% | +19pp |
| 数学文字题(标准) | 78% | 81% | +3pp |
| 通用摘要 | 83% | 84% | +1pp |
| 代码注释生成 | 88% | 87% | -1pp |
规律很清晰:格式高度特化、领域偏门、标签定义主观的任务,few-shot 收益显著;模型已经在海量数据上见过的通用任务,加示例几乎没有增量收益,反而占用了 context 窗口。
具体来说,"细粒度情感分类"里的五个标签(非常正面 / 正面 / 中性 / 负面 / 非常负面)定义本身就模糊,zero-shot 下模型倾向于把"中性偏正"归入"正面",而 3 个示例足以锚定这条边界。这不是模型"变聪明了",而是示例把你的标签体系显式传达给了模型。
SQL 方言的情况类似:如果你用的是 ClickHouse 或 Hive 特有语法,zero-shot 下模型会下意识写出标准 PostgreSQL 风格,加几条示例之后方言特性就能稳定复现。
Few-shot 示例设计的四个操作要点
1. Shot 数量:3 到 5 条是性价比最高的区间
在 Claude Opus 4.8 上测试情感分类任务时,1-shot、3-shot、5-shot、10-shot 的准确率分别是 71%、84%、86%、85%。从 1 到 3 提升最大,5 条之后边际收益接近零,10 条甚至因为示例稀释了后续指令的注意力而略有下滑。实际工程里,3-shot 是最经济的起点,复杂推理任务可以试到 5-shot,基本不需要超过 8 条。
2. 示例要覆盖边界情况,不要只选"典型正例"
新手常犯的错误是挑三条最标准、最容易判断的样本做示例。问题在于,模型见到的都是核心区,边界情况还是不知道怎么处理。正确做法是刻意纳入 1-2 条边界样本,比如情感分类里混入一条语气反讽的句子,并标注它的正确类别。
示例:
输入:"这家店的服务真是'贴心',等了四十分钟没人搭理。"
输出:负面
这条示例的价值远超三条普通负面句子。
3. 格式一致性比内容丰富性更重要
每条示例的输入输出格式必须完全统一。如果第一条示例输出是 JSON,第三条换成了纯文本,模型会开始在两种格式之间随机抖动。这一点在 Gemini 3 系列上尤其明显——它对格式不一致的示例集比其他主流模型更敏感,输出稳定性下降幅度约 12%。
统一格式的实操建议:用一个固定模板写所有示例,确认每条示例都能 pass 一遍你的输出解析逻辑,再放进 prompt。
4. 示例和真实输入的分布要对齐
如果你的生产数据以短文本为主(微博级别),示例全用长段落就是在帮倒忙。Qwen 3 在这个点上有过一批公开测试:示例长度与推理输入长度相差超过 3 倍时,格式迁移准确率下降 17%。用和真实输入同量级的样本做示例,模型迁移效果才最稳定。
什么时候坚持用 Zero-shot
以下几种情况,zero-shot 反而是更好的选择:
模型已深度覆盖的通用任务。写摘要、翻译常见语言对、生成标准格式代码注释——这些任务在预训练数据里出现频率极高,额外示例不会带来信息增量,只是在消耗 token 预算。用 GPT-5.5 做英译中,zero-shot 和 5-shot 的 BLEU 分差不超过 0.5。
需要模型发挥创意或多样性的任务。示例会把模型的输出风格锁定在示例的风格区间内。如果你想要头脑风暴式的多样化输出,示例反而是枷锁。
示例质量无法保证时。质量差的示例比没有示例更糟糕——它会主动教坏模型。如果手头没有经过验证的标注数据,宁可用清晰的 zero-shot 指令,把格式约束和评判标准写进 system prompt,不要用未经验证的示例充数。
工程落地:一个可复用的决策框架
判断是否需要 few-shot,走这三步:
- 任务是否有非标输出格式或主观标签定义? 是 → 用 few-shot。否 → 先试 zero-shot。
- zero-shot 的失败模式是格式错误还是语义错误? 格式错误 → 示例能快速修复。语义错误(模型根本不理解任务)→ 先改指令,示例是锦上添花,不是雪中送炭。
- 能否提供至少 3 条覆盖边界情况的高质量标注样本? 不能 → 继续优化 zero-shot 指令,不要用低质量示例。
这个框架在 Claude Code 和 Codex 的 agent 场景里同样适用——系统 prompt 里的 few-shot 示例会影响整个 session 的行为基线,设计不当的代价比单次调用高得多。
在测试和迭代 few-shot / zero-shot 策略的过程中,频繁切换模型来交叉验证结论是个好习惯——同一组示例在 GPT-5.4 和 Claude Sonnet 4.6 上的表现差异,本身就是重要的信号。我目前用 XycAi 词元平台 来跑这类多模型对比实验,一个接口可以接 200+ 模型,GPT 和 Claude 官方模型的价格低至官方价 1.4 折起,Claude Code 和 Codex 也支持一键接入,跑完一轮对比测试的成本基本可以忽略不计,省去了维护多个 API key 和账单的麻烦。
一个 API 接入 200+ 全球 AI 模型
GPT · Claude · Gemini 官方模型低至 1.4 折起,持大模型算法备案号,CN2 直连低至 5ms,可开全球合规发票。
立即体验 XycAi →