Few-shot 学习
给模型看几个例子
有时候,再怎么描述你想要的输出格式,都不如直接给模型看几个例子。
这就是 Few-shot Learning(少样本学习)——在 Prompt 中提供几个输入-输出示例,让模型"学会"你期望的模式,然后应用到新的输入上。
Zero-shot vs One-shot vs Few-shot
Zero-shot(零样本)
不给例子,直接提问:
将以下句子的情感分类为"正面"或"负面":
"这家餐厅的菜品让我非常失望。"
模型通常能给出正确答案,但格式可能不稳定(比如有时回答"负面",有时回答"这是一个负面评价")。
One-shot(单样本)
给一个例子:
将以下句子的情感分类为"正面"或"负面"。
句子:"今天天气真好,心情很愉快。"
分类:正面
句子:"这家餐厅的菜品让我非常失望。"
分类:
Few-shot(少样本)
给多个例子:
将以下句子的情感分类为"正面"或"负面"。
句子:"今天天气真好,心情很愉快。"
分类:正面
句子:"快递又延误了,真烦人。"
分类:负面
句子:"这本书写得非常精彩,强烈推荐。"
分类:正面
句子:"这家餐厅的菜品让我非常失望。"
分类:
通过多个例子,模型可以更准确地理解:
- 任务是什么——情感分类
- 输出格式——只回答"正面"或"负面"
- 判断标准——什么算正面,什么算负面
如何选择好的示例
示例的质量直接影响效果。几个原则:
1. 覆盖不同情况
✅ 包含正面和负面的例子
✅ 包含简单和复杂的例子
✅ 包含边界情况
如果你的例子全是正面的,模型可能倾向于把所有输入都分类为正面。
2. 示例要和目标输入相似
如果你要处理的是技术文档,示例也应该是技术文档,而不是社交媒体帖子。领域匹配很重要。
3. 格式统一
所有示例的格式应该完全一致:
❌
输入:苹果 → 水果
输入:狗 → 这是一种动物
猫 → 动物
✅
输入:苹果
类别:水果
输入:狗
类别:动物
输入:猫
类别:
4. 数量不是越多越好
通常 3-5 个例子就够了。太多例子会:
- 占用宝贵的上下文窗口
- 引入噪声
- 增加 token 成本
示例顺序的影响
研究表明,Few-shot 示例的排列顺序会影响模型输出。一些实用建议:
- 把最相关的例子放在靠近目标输入的位置(模型对最近的上下文更敏感)
- 多样化排列,不要把同一类别的例子连续放在一起
- 如果效果不好,尝试打乱顺序——有时这就能解决问题
Few-shot 的实际应用
数据转换
将自然语言日期转换为 ISO 格式。
输入:明年三月十五号
输出:2027-03-15
输入:上个月最后一天
输出:2026-02-28
输入:下周三
输出:
代码风格转换
将以下 JavaScript 代码转换为 TypeScript,添加类型注解。
JavaScript:
function add(a, b) { return a + b; }
TypeScript:
function add(a: number, b: number): number { return a + b; }
JavaScript:
function greet(name) { return "Hello, " + name; }
TypeScript:
文本提取
从以下文本中提取公司名称和融资金额。
文本:"字节跳动在最新一轮融资中获得了 50 亿美元。"
结果:{"company": "字节跳动", "amount": "50 亿美元"}
文本:"SpaceX 完成了 21 亿美元的新一轮融资。"
结果:{"company": "SpaceX", "amount": "21 亿美元"}
文本:"蔚来汽车宣布获得 11 亿美元战略投资。"
结果:
什么时候 Few-shot 最有用
Few-shot 特别适合以下场景:
- 需要特定输出格式——示例比描述更直观
- 分类任务——展示每个类别的例子
- 数据转换——输入到输出的映射模式
- 模型理解困难的任务——用例子"教"模型理解你的意图
什么时候不要用 Few-shot
- 任务描述已经足够清晰——不需要例子模型就能做好的任务,加例子只是浪费 token
- 每个例子都很长——会快速占满上下文窗口
- 任务太复杂,需要推理——这时候 Chain of Thought(下一章)更合适
要点总结
- Few-shot = 在 Prompt 中给模型看几个例子。 这是最直观、最有效的让模型理解你意图的方式之一。
- 示例质量 > 数量。 3-5 个高质量、多样化、格式统一的例子通常就够了。
- 示例顺序影响效果。 把最相关的例子放在靠近目标输入的位置。
- Few-shot 最适合格式化输出、分类和数据转换任务。 对于需要复杂推理的任务,考虑 Chain of Thought。