首页 › AI Agent › Agent100道面试题 › 提示工程-prompt-engineering › Few-Shot vs Zero-Shot Prompting:如何选择?

Few-Shot vs Zero-Shot Prompting:如何选择?

难度:基础 分类:Prompt Engineering​

简短回答​

Zero-shot Prompting 不提供任何示例,直接描述任务让 LLM 执行——依赖模型从预训练中学到的通用能力。Few-shot Prompting 在 Prompt 中提供 2-5 个输入输出示例,让模型通过"模仿"理解任务格式和期望。选择原则:任务简单且模型理解充分 → Zero-shot(更省 token、更灵活);任务有特定格式/逻辑或模型表现不稳定 → Few-shot(更准确、更一致)。研究表明 Few-shot 在分类和格式化任务上优势显著,但在复杂推理任务上,Few-shot 的优势被 CoT 等推理增强技术压缩。随着模型能力提升(GPT-4、Claude Opus 等),Zero-shot 的能力边界在不断扩大——很多过去需要 Few-shot 的任务现在 Zero-shot 就能做好。​

详细解析​

核心区别​

​

代码块​

Python

# Zero-shot:直接描述任务,无示例​

zero_shot_prompt = """​

将以下客户评价分类为"正面"、"负面"或"中性"。​

​

评价:这个产品用了一周就坏了,太失望了。​

分类:​

"""​

# 模型需要自己理解"分类"的含义和格式​

​

# Few-shot:提供示例,模型模仿模式​

few_shot_prompt = """​

将客户评价分类为"正面"、"负面"或"中性"。​

​

评价:非常好用,超出预期!​

分类:正面​

​

评价:还行吧,没什么特别的。​

分类:中性​

​

评价:快递太慢了,包装也破损了。​

分类:负面​

​

评价:这个产品用了一周就坏了,太失望了。​

分类:​

"""​

# 模型通过示例理解输出格式和分类标准​

​

何时选择 Zero-shot​

​

代码块​

Python

use_zero_shot_when = [​

"任务在模型预训练中常见(翻译、摘要、问答)",​

"使用足够强的模型(GPT-4、Claude Opus)",​

"任务描述本身足够清晰明确",​

"需要灵活处理多样化的输入",​

​

何时选择 Few-shot​

​

代码块​

Python

use_few_shot_when = [​

"任务有特定的输出格式(JSON、表格、特殊结构)",​

"分类标签有领域特定含义(不是通用的正面/负面)",​

"模型在 Zero-shot 下表现不稳定",​

"需要教模型一个它不熟悉的模式",​

​

Few-shot 的最佳实践​

​

代码块​

JSON

few_shot_best_practices = {​

"示例数量": {​

"建议": "2-5 个示例最佳",​

"原因": "太少不够学习模式,太多浪费 token 且可能引入噪声",​

"例外": "复杂任务可以用 5-10 个示例",​

},​

"示例质量": {​

"多样性": "覆盖不同的输入类型和边界情况",​

"代表性": "包含典型案例,不只是简单案例",​

"平衡性": "每个分类标签的示例数量大致相等",​

},​

​

动态 Few-shot:结合两者优势​

​

代码块​

Python

class DynamicFewShot:​

"""根据输入动态选择最相关的示例"""​

​

def __init__(self, example_bank, embedding_model):​

self.examples = example_bank # 预存的示例库​

self.embedder = embedding_model​

​

性能对比数据(示意,请以最新公开评测为准)​

情感分类(SST-2,示意值):​

​

#vfkGDiQbscTS text{white-space:pre}.fb0{stroke:var(--N900-FG, 0.15)}.fx0{stroke-miterlimit:10}.fa1{fill:#bbbfc4}.fx1{font:normal 400 12px MonospacedNumber,LarkHackSafariFont,LarkEmojiFont,LarkChineseQuote,-apple-system,BlinkMacSystemFont,Helvetica Neue,Tahoma,PingFang SC,Microsoft Yahei,Arial,Hiragino Sans GB,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.fx2{text-anchor:middle}.fx3{dominant-baseline:central}.fx4{stroke:none}.fc0{fill:var(--text-caption)}.fa2{fill:var(--text-link-disabled)}.fx5{font:400 normal 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}.fx6{text-anchor:start}.fx7{dominant-baseline:alphabetic}.fc1{fill:rgb(0, 0, 0)}.fb1{fill:var(--N900-FG, 0.15)}.fb2{fill:rgb(209, 217, 224)}.fa3{fill:var(--bg-body)}ABC1234方法Zero-shotFew-shot (3)Few-shot (5)GPT-3.5~88%~93%94%GPT-495%~96%~96%

​

观察:​

Few-shot 对弱模型帮助更大(+6pp vs +1pp)​

强模型 Zero-shot 已经很好​

数学推理(GSM8K,示意值):​

3 个示例就已获得大部分提升​

​

#guQURosZAUxJ text { white-space: pre; }#guQURosZAUxJ .fb0 { stroke: var(--N900-FG, 0.15); }#guQURosZAUxJ .fb0 {stroke: rgba(31,35,41, 0.15)}#guQURosZAUxJ .fx0 { stroke-miterlimit: 10; }#guQURosZAUxJ .fx0 {stroke-miterlimit: 10}#guQURosZAUxJ .fa1 { fill: rgb(187, 191, 196); }#guQURosZAUxJ .fa1 {fill: rgb(187, 191, 196)}#guQURosZAUxJ .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#guQURosZAUxJ .fx1 {font-style: normal}#guQURosZAUxJ .fx2 { text-anchor: middle; }#guQURosZAUxJ .fx2 {text-anchor: middle}#guQURosZAUxJ .fx3 { dominant-baseline: central; }#guQURosZAUxJ .fx3 {dominant-baseline: central}#guQURosZAUxJ .fx4 { stroke: none; }#guQURosZAUxJ .fx4 {stroke: none}#guQURosZAUxJ .fc0 { fill: var(--text-caption); }#guQURosZAUxJ .fc0 {fill: #646a73}#guQURosZAUxJ .fa2 { fill: var(--text-link-disabled); }#guQURosZAUxJ .fa2 {fill: rgb(187, 191, 196)}#guQURosZAUxJ .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#guQURosZAUxJ .fx5 {font-style: normal}#guQURosZAUxJ .fx6 { text-anchor: start; }#guQURosZAUxJ .fx6 {text-anchor: start}#guQURosZAUxJ .fx7 { dominant-baseline: alphabetic; }#guQURosZAUxJ .fx7 {dominant-baseline: alphabetic}#guQURosZAUxJ .fc1 { fill: rgb(0, 0, 0); }#guQURosZAUxJ .fc1 {fill: rgb(0, 0, 0)}#guQURosZAUxJ .fb1 { fill: var(--N900-FG, 0.15); }#guQURosZAUxJ .fb1 {fill: rgba(31,35,41, 0.15)}#guQURosZAUxJ .fb2 { fill: rgb(209, 217, 224); }#guQURosZAUxJ .fb2 {fill: rgb(209, 217, 224)}#guQURosZAUxJ .fa3 { fill: var(--bg-body); }#guQURosZAUxJ .fa3 {fill: #fff}AB12345方法Zero-shotFew-shot (8)Zero-shot CoTFew-shot CoTGPT-4~80%~82%~90%~92%

​

观察:CoT 的提升 > Few-shot 的提升,对于推理任务,推理方式比示例数量更重要​

说明:上述数字为不同公开报告整理后的趋势值(GPT-3.5/4 SST-2、GSM8K), 具体数字会因评测脚本、解析方式、提示版本而有 ±2pp 抖动。 建议在自己业务数据上用 lm-eval-harness / Inspect AI 现场跑,作为权威基准。 原始引用可见 OpenAI GPT-4 Technical Report (2023)、PromptArena leaderboard、HELM。​

决策流程图​

​

​

选型决策:任务简单模型强走 Zero-shot,要格式或稳定性走 Few-shot,要推理上 CoT,不确定先试 Zero-shot。​

常见误区 / 面试追问​

误区:"Few-shot 总是比 Zero-shot 好" — 不一定。(1) 在推理任务上,CoT 的提升远大于示例的提升;(2) 不好的示例可能误导模型(示例质量比数量更重要);(3) 强模型的 Zero-shot 已经接近人类水平。​

误区:"示例越多越好" — 超过 5-10 个示例后,边际收益递减且成本急增。更多示例 = 更多 input token = 更高成本 + 更少剩余空间给模型思考。​

追问:"如何选择 Few-shot 的示例?" — 三个原则:(1) 多样性——覆盖不同类型的输入;(2) 代表性——选典型案例而非极端案例;(3) 相关性——最好与待处理的输入相关。动态 Few-shot(检索最相关的示例)是生产中的最佳实践。​

追问:"One-shot(只给一个示例)有用吗?" — 有用,尤其在教模型特定输出格式时。一个精心选择的示例可能比三个普通示例更有效。但对于分类任务,一个示例可能引入偏差(模型倾向于输出示例中的标签)。​