| Q78 | What is the difference between zero-shot and few-shot prompting
1️⃣ 考察意图
面试官想考察你对 LLM 提示工程基础概念的掌握深度,而非简单背诵定义。真正想看的是:你是否理解两种策略背后的模型行为差异(预训练 vs. 上下文学习)、工程选型权衡(成本 vs. 效果),以及实际落地中的坑(示例质量、上下文窗口限制)。刁钻点在于:很多人能说出“零样本不给例子,少样本给例子”,但说不出“为什么少样本有效?示例数量如何影响?选型依据是什么?”答好了能展示你对 LLM 工作机理的直觉和工程落地经验。
2️⃣ 标准答
核心定义与机制差异
- 零样本(Zero-shot):仅靠任务指令(如“将以下句子分类为正面或负面”)驱动模型,依赖其预训练阶段学到的通用知识。模型需自行推断任务格式和输出规范。
- 少样本(Few-shot):在指令后附加 1 到几十个输入-输出示例(如“句子:电影很棒 -> 正面”),模型通过上下文学习(In-Context Learning, ICL) 从示例中提取模式,无需梯度更新。示例数量通常为 1-shot、3-shot、5-shot。
为什么少样本有效? 核心机制是模式匹配:模型在示例中识别输入-输出映射关系,并泛化到新输入。这与微调不同——ICL 不修改权重,仅利用注意力机制在上下文窗口内建立关联。论文《Why Can GPT Learn In-Context?》指出,示例相当于隐式地提供了任务分布的“先验”。
工程选型权衡
- 零样本优势:输入短、延迟低、成本低(按 token 计费),适合通用任务(如简单分类、摘要)。坑:对指令措辞敏感,同一任务换种说法可能结果迥异(如“分类” vs. “判断情感”)。
- 少样本优势:准确率更高,尤其对格式敏感任务(如 JSON 输出、特定模板)或低资源领域(如医疗术语分类)。代价:输入长度增加,可能突破上下文窗口(如 GPT-4 的 8K/32K),且示例选择不当会引入偏差。
- 示例数量选择:1-shot 往往提升有限(模型可能过度模仿单个示例);3-5 shot 通常达到收益递减点;超过 10 shot 可能因上下文过长导致注意力稀释。实际落地:在情感分类任务上,从 0-shot 到 3-shot 准确率提升约 5-15%(通用知识),但 5-shot 后提升<2%。
实际落地的坑 + 解法
- 坑 1:示例偏差。若示例中“正面”样本占 80%,模型会偏向输出正面。解法:平衡示例类别分布,或使用动态示例选择(如基于 embedding 相似度检索最相关示例,类似 RAG 的检索增强)。
- 坑 2:上下文窗口溢出。长文档 + 多示例可能超限。解法:优先选短示例,或使用压缩技术(如对示例做摘要,或使用 FlashAttention 等高效注意力机制)。
- 坑 3:指令与示例冲突。指令说“输出 JSON”,示例却给纯文本。解法:确保指令与示例格式严格一致,并在示例中显式标注格式(如“输入:...\n输出:{“label”: “positive”}”)。
选型决策树
- 任务简单(如情感分类、实体抽取)且对格式无要求 → 零样本(先试,成本低)。
- 任务复杂(如代码生成、数学推理)或格式严格(如结构化输出)→ 少样本(3-5 shot 起步)。
- 示例质量差或领域特殊 → 考虑微调(比少样本更稳定,但成本高)。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:定义层面,零样本不给示例,少样本给示例,依赖上下文学习;机制层面,少样本通过模式匹配提升准确率,但增加 token 成本和上下文压力;选型层面,零样本适合通用任务,少样本适合复杂或格式敏感任务,示例数量 3-5 shot 通常最优。总结一句:选型核心是平衡效果、成本和上下文限制,优先零样本试水,再根据结果决定是否加示例。”
4️⃣ 高频追问 & 应对
追问 1:少样本示例数量怎么选?为什么 3-shot 比 1-shot 好?
1-shot 容易让模型过度拟合单个示例的噪声(如示例是“正面”,模型可能认为所有句子都正面)。3-shot 提供了更多模式,让模型能识别输入-输出映射的共性。实际经验:在分类任务上,1-shot 提升约 3-5%,3-shot 提升 10-15%,5-shot 后收益递减。选型时考虑上下文窗口:若输入很长,优先选 3-shot 短示例;若输入短,可试 5-shot。工程技巧:用验证集做网格搜索,找到收益拐点。
追问 2:如果少样本效果反而比零样本差,可能是什么原因?
常见原因:① 示例偏差:示例分布与真实任务不匹配(如示例全是“正面”,测试集有“负面”)。② 示例质量低:示例本身有噪声(如标注错误)或格式不一致。③ 指令冲突:示例与指令矛盾(如指令说“输出数字”,示例给文字)。④ 模型过拟合:对复杂任务,示例太少(1-shot)可能让模型死板模仿。解法:检查示例分布、清洗数据、增加示例数量或改用动态示例选择。
追问 3:零样本和少样本在长上下文场景下如何选?
长上下文(如 10K+ token)下,少样本的 token 成本剧增,且模型可能因注意力分散而忽略示例。选型建议:① 若任务简单(如文档摘要),优先零样本,指令要清晰(如“总结前 500 字”)。② 若必须用少样本,使用示例压缩(如对示例做摘要,保留关键模式)或分块处理(将长文档切块,每块单独推理)。③ 考虑模型能力:GPT-4 的 128K 窗口对少样本更友好,但成本高;小模型(如 Llama 3 8B)在长上下文下效果衰减更快。
5️⃣ 避坑 · 常见错误答法
- ❌ 说“零样本就是不给例子,少样本就是给例子,少样本一定比零样本好” → ✅ 正确切入:少样本不一定更好,取决于任务复杂度、示例质量和上下文限制。零样本在简单任务上可能更稳定且成本低。
- ❌ 说“少样本示例越多越好,给 50 个示例效果最佳” → ✅ 正确切入:示例数量有收益递减点(通常 3-5 shot),过多示例会稀释注意力、增加 token 成本,甚至因上下文窗口溢出而失败。
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“动态示例选择”切入,类比 RAG 的检索增强——少样本示例可以像 RAG 的文档一样,基于 query embedding 相似度动态检索,提升效果。
- 如果你只做过传统 NLP:用“监督学习 vs. 迁移学习”类比——零样本像预训练模型直接推理,少样本像给少量标注数据做上下文学习,强调 ICL 与微调的区别。
- 如果你是校招无项目:聚焦论文复现 demo,如用 Hugging Face 的 transformers 库在 SST-2 数据集上对比 0-shot、1-shot、3-shot 准确率,并分析示例选择策略(随机 vs. 基于相似度)。
- 论文:《Language Models are Few-Shot Learners》(GPT-3 论文,定义 few-shot 范式)
- 论文:《Why Can GPT Learn In-Context?》(解释 ICL 机制)
- 工具:LangChain 的 FewShotPromptTemplate(少样本模板实现)
- 博客:OpenAI Prompt Engineering Guide(官方最佳实践)
- 论文:《Rethinking the Role of Demonstrations》(分析示例数量与效果关系)