Few-shot / Zero-shot

少样本 / 零样本

在 Prompt 里给几个示例(few-shot)比纯指令(zero-shot)效果通常更好。

详解

Zero-shot 和 Few-shot 是两种截然不同的「教模型干活」的方式。Zero-shot 是直接下指令,不给任何例子,靠模型在训练时学到的知识自行理解任务——简单省事,但遇到格式特殊或任务定义模糊时容易跑偏。Few-shot(也叫 in-context learning,上下文学习)则是在 Prompt 里附上 1–5 个「输入 → 期望输出」的例子,让模型从中推断出你想要的格式、风格和逻辑,无需修改模型权重。研究显示,同一个模型,few-shot 比 zero-shot 在分类、推理等任务上准确率提升 10–50%。选例子有三个关键:①例子要多样(覆盖不同情况,避免模型只学到单一模式)②格式要统一(输入和输出的分隔符、结构保持一致)③质量高于数量(三个好例子胜过十个模糊例子)。One-shot 是 few-shot 的特殊情况,只给一个例子——有时足够,适合格式固定的任务。

一个类比
Zero-shot 就像告诉新厨师「做一道川菜」,全靠他自己理解「川菜」是什么。Few-shot 就像给他看三道菜的菜谱和成品照片再让他做——他不需要去厨师学校重新培训(不改模型),但看完例子就能大致明白你要的口味和摆盘风格。
举个例子
# Zero-shot vs Few-shot 情感分类对比
# Zero-shot:只给指令,没有例子
zero_shot_prompt = "判断以下评论的情感(正面/负面):\n评论:这款耳机音质很差,戴久了耳朵疼。"

# Few-shot:先给 3 个示例,再提问
few_shot_prompt = """判断评论情感(正面/负面)。

评论:电池续航超过预期,非常满意。
情感:正面

评论:做工粗糙,按钮松动,不值这个价。
情感:负面

评论:外观漂亮,但连接时有延迟。
情感:负面

评论:这款耳机音质很差,戴久了耳朵疼。
情感:"""

import anthropic
client = anthropic.Anthropic()

for label, prompt in [("zero-shot", zero_shot_prompt), ("few-shot", few_shot_prompt)]:
    resp = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=16,
        messages=[{"role": "user", "content": prompt}]
    )
    print(f"{label}: {resp.content[0].text.strip()}")
# few-shot 输出格式更稳定,更精准匹配期望格式
PYTHON 示例
相关概念