核心 · Key Idea
一句话:Few-Shot 就是在 prompt 里塞几个「输入 → 输出」示例,模型靠模式匹配照着做。不用训练、不改模型,零成本地让输出对齐你的格式和风格。
是什么#
根据给多少示例分:
- Zero-Shot —— 一个示例都不给,直接问。
- One-Shot —— 给一个示例。
- Few-Shot —— 给 2–5 个(再多性价比下降)。
分类下面邮件为 [spam / personal / work]:
邮件: "恭喜中奖! 点击领取..."
类别: spam
邮件: "明天项目会改到下午 3 点"
类别: work
邮件: "周末去爬山吗?"
类别: personal
邮件: "iPhone 限时优惠,仅剩 3 小时"
类别:模型会接着吐出 spam。
打个比方#
打个比方 · Analogy
Few-Shot 像给新员工三份模板:「以后的合同都按这种格式来写」。他照着模板改改字段就能交稿,根本不用重新培训。
关键概念#
In-Context Learning上下文学习
模型不更新权重,仅靠 prompt 里的示例推断任务 —— LLM 最强能力之一。
Schema Inference格式推断
给几个 JSON 示例,输出自然就按这个 JSON 来。
Order Bias顺序偏见
示例的顺序会轻微影响输出倾向,最后一个示例影响最大。
Shot 数量上限边际递减
一般 3–5 个示例够了。再多收益少、上下文浪费。
什么时候用#
实操要点#
- 示例要多样:3 个例子全是「spam」就把模型带偏。每个类别都给代表。
- 放对位置:系统性格式约束放 system;具体例子放 user 的第一次消息更自然。
- 和 CoT 组合:示例里把「推理过程」也写出来(Few-Shot + CoT),模型会照着也写推理 —— 比单独用任何一个都强。
- 格式就是契约:示例里写
{"label": "spam"},模型几乎永远会返回同样结构。 - 注意 Token 成本:示例会吃掉每次请求的上下文。高频调用可考虑 fine-tune 把模式烧进权重。
易混点#
Few-Shot (运行时)
**每次请求**都塞示例。
零设置成本,但上下文占用。
零设置成本,但上下文占用。
Fine-tuning (训练时)
**训练一次**,示例烧进权重。
有训练成本,但长期 Token 省。
有训练成本,但长期 Token 省。
Zero-Shot
全靠 prompt 描述 + 模型的世界知识。
格式复杂时输出容易飘。
格式复杂时输出容易飘。
Few-Shot
示例当**强形式约束**。
输出格式稳定性直线上升。
输出格式稳定性直线上升。
延伸阅读#
- CoT —— Few-Shot + CoT 是「最猛组合」
- System Prompt —— 示例该放 system 还是 user
- Fine-tuning / SFT —— 示例多到一定程度就该训练了