Few-shot Learning #

什么是 Few-shot Learning? #

基本概念 #

Few-shot Learning(少样本学习)是一种通过在提示词中提供少量示例来引导模型输出的技术。它属于 In-context Learning(上下文学习)的一种形式。

text
┌─────────────────────────────────────────────────────────────┐
│                  In-context Learning 类型                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Zero-shot(零样本)                                        │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  不提供示例,直接提问                                 │   │
│  │  "翻译:Hello World"                                 │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  One-shot(单样本)                                         │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  提供一个示例                                         │   │
│  │  "Hello → 你好                                       │   │
│  │   World → ?"                                         │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  Few-shot(少样本)                                         │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  提供多个示例                                         │   │
│  │  "Hello → 你好                                       │   │
│  │   World → 世界                                       │   │
│  │   Good → 好                                          │   │
│  │   Morning → ?"                                       │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Few-shot 的优势 #

text
1. 格式引导
   └── 明确输出格式,减少格式错误

2. 风格统一
   └── 保持输出风格一致

3. 任务理解
   └── 帮助模型理解复杂任务

4. 质量提升
   └── 提高输出的准确性和相关性

5. 减少歧义
   └── 通过示例消除理解歧义

Few-shot 基本用法 #

基本结构 #

text
提示词结构:
─────────────────────────────────────────────────
[任务说明]

示例 1:
输入:[示例输入1]
输出:[示例输出1]

示例 2:
输入:[示例输入2]
输出:[示例输出2]

示例 3:
输入:[示例输入3]
输出:[示例输出3]

现在请处理:
输入:[实际输入]
输出:
─────────────────────────────────────────────────

简单示例 #

text
提示词:
请判断以下句子的情感倾向:

示例 1:
输入:这部电影太精彩了!
输出:正面

示例 2:
输入:服务态度很差,不会再来了。
输出:负面

示例 3:
输入:产品一般,没有特别的感觉。
输出:中性

请判断:
输入:这家餐厅的菜品很美味,环境也很舒适。
输出:

格式化示例 #

text
提示词:
将以下信息转换为 JSON 格式:

示例 1:
输入:张三,28岁,工程师
输出:{"name": "张三", "age": 28, "job": "工程师"}

示例 2:
输入:李四,35岁,医生
输出:{"name": "李四", "age": 35, "job": "医生"}

请转换:
输入:王五,42岁,教师
输出:

Few-shot 设计原则 #

原则一:示例代表性 #

text
❌ 缺乏代表性的示例:
示例 1:
输入:苹果
输出:水果

示例 2:
输入:香蕉
输出:水果

示例 3:
输入:橙子
输出:水果

问题:示例过于相似,模型可能无法处理其他类别

✅ 有代表性的示例:
示例 1:
输入:苹果
输出:水果

示例 2:
输入:西红柿
输出:蔬菜

示例 3:
输入:牛肉
输出:肉类

示例覆盖不同类别,帮助模型理解分类逻辑

原则二:示例多样性 #

text
❌ 单一模式:
示例 1:
输入:高兴
输出:正面情绪

示例 2:
输入:快乐
输出:正面情绪

示例 3:
输入:开心
输出:正面情绪

✅ 多样化示例:
示例 1:
输入:高兴
输出:正面情绪

示例 2:
输入:难过
输出:负面情绪

示例 3:
输入:平静
输出:中性情绪

示例 4:
输入:又喜又忧
输出:复杂情绪

原则三:示例顺序 #

text
建议顺序:
1. 简单示例在前
2. 复杂示例在后
3. 最相似的示例放在最后

示例:
─────────────────────────────────────────────────
简单示例:
输入:1 + 1
输出:2

中等示例:
输入:15 + 27
输出:42

复杂示例:
输入:156 + 289
输出:445

当前任务:
输入:1234 + 5678
输出:
─────────────────────────────────────────────────

原则四:示例数量 #

text
示例数量建议:

简单任务:1-2 个示例
├── 格式转换
├── 简单分类
└── 基础翻译

中等任务:3-5 个示例
├── 复杂分类
├── 信息提取
└── 文本改写

复杂任务:5-10 个示例
├── 复杂推理
├── 专业领域任务
└── 需要特定风格的任务

注意:
├── 示例过多会消耗 Token
├── 示例过少可能引导不足
└── 需要在效果和成本之间平衡

Few-shot 高级技巧 #

技巧一:负样本示例 #

text
通过展示错误示例来避免特定问题:

提示词:
请修改以下代码中的问题:

正确示例:
输入:
def add(a, b):
    return a + b
输出:
代码正确,无需修改。

错误示例:
输入:
def add(a, b):
    result = a + b
输出:
问题:变量 result 定义后未使用
修改:def add(a, b): return a + b

请修改:
输入:
def multiply(x, y):
    z = x * y
输出:

技巧二:渐进式示例 #

text
从简单到复杂逐步引导:

提示词:
请计算以下表达式的值:

示例 1(简单):
输入:2 + 3
输出:5
解释:直接相加

示例 2(中等):
输入:2 + 3 × 4
输出:14
解释:先算乘法 3×4=12,再算加法 2+12=14

示例 3(复杂):
输入:(2 + 3) × 4 - 5
输出:15
解释:先算括号 2+3=5,再算乘法 5×4=20,最后减法 20-5=15

请计算:
输入:10 - 2 × 3 + 4
输出:

技巧三:思维链示例 #

text
在示例中展示思考过程:

提示词:
请解决以下数学问题:

示例:
问题:小明有 5 个苹果,给了小红 2 个,又买了 3 个,现在有几个?
思考过程:
1. 小明最初有 5 个苹果
2. 给了小红 2 个,剩下 5 - 2 = 3 个
3. 又买了 3 个,现在有 3 + 3 = 6 个
答案:6 个

请解决:
问题:一本书有 200 页,小明第一天读了 30 页,第二天读了 40 页,还剩多少页没读?

技巧四:格式模板示例 #

text
使用模板化的示例:

提示词:
请按照以下格式生成产品描述:

示例 1:
输入:iPhone 15
输出:
【产品名称】iPhone 15
【产品类型】智能手机
【核心卖点】A17 芯片、钛金属边框、USB-C 接口
【目标用户】追求高性能和品质的用户
【价格定位】高端

示例 2:
输入:小米手环 8
输出:
【产品名称】小米手环 8
【产品类型】智能穿戴设备
【核心卖点】150+ 运动模式、16 天续航、轻盈舒适
【目标用户】健身爱好者和日常用户
【价格定位】中端

请生成:
输入:戴森吸尘器 V15
输出:

Few-shot 应用场景 #

场景一:文本分类 #

text
提示词:
请对以下新闻进行分类:

示例 1:
输入:苹果公司发布新款 iPhone,搭载最新 A17 芯片
输出:科技

示例 2:
输入:中国队在世界杯预选赛中取得胜利
输出:体育

示例 3:
输入:央行宣布下调存款准备金率
输出:财经

示例 4:
输入:某明星官宣结婚喜讯
输出:娱乐

请分类:
输入:特斯拉自动驾驶技术取得重大突破
输出:

场景二:信息提取 #

text
提示词:
请从文本中提取人物信息:

示例 1:
输入:张明是一位来自北京的软件工程师,今年32岁,毕业于清华大学。
输出:
姓名:张明
城市:北京
职业:软件工程师
年龄:32
毕业院校:清华大学

示例 2:
输入:李华,女,上海人,现任某互联网公司产品经理,28岁。
输出:
姓名:李华
性别:女
城市:上海
职业:产品经理
年龄:28

请提取:
输入:王强,男,35岁,杭州人,阿里巴巴高级算法工程师,博士毕业于浙江大学。
输出:

场景三:代码生成 #

text
提示词:
请根据描述生成 Python 函数:

示例 1:
输入:计算两个数的和
输出:
def add(a: int, b: int) -> int:
    """计算两个数的和"""
    return a + b

示例 2:
输入:判断一个数是否为偶数
输出:
def is_even(n: int) -> bool:
    """判断一个数是否为偶数"""
    return n % 2 == 0

示例 3:
输入:获取列表中的最大值
输出:
def get_max(numbers: list) -> int:
    """获取列表中的最大值"""
    return max(numbers) if numbers else None

请生成:
输入:计算列表中所有偶数的和
输出:

场景四:文本转换 #

text
提示词:
请将口语化表达转换为正式书面语:

示例 1:
输入:这个东西挺好的,我觉得可以买
输出:该产品质量优良,建议购买

示例 2:
输入:这个问题我也不太清楚,你问问别人吧
输出:关于此问题,建议您咨询其他相关人员

示例 3:
输入:这事儿挺急的,麻烦快点处理
输出:此事较为紧急,请尽快处理

请转换:
输入:这个方案我觉得还行,但是还需要再改改
输出:

Few-shot 最佳实践 #

实践一:示例质量检查 #

text
检查清单:
□ 示例是否准确无误?
□ 示例是否具有代表性?
□ 示例之间是否有冲突?
□ 示例格式是否一致?
□ 示例是否覆盖主要情况?

实践二:示例优化流程 #

text
优化流程:
1. 收集初始示例
   └── 从实际数据中选取

2. 测试示例效果
   └── 使用示例测试输出质量

3. 分析失败案例
   └── 找出模型处理不好的情况

4. 补充/修改示例
   └── 针对失败案例优化示例

5. 迭代验证
   └── 重复测试直到满意

实践三:Token 优化 #

text
优化策略:
1. 精简示例描述
   └── 删除不必要的信息

2. 选择关键示例
   └── 保留最有代表性的示例

3. 压缩格式
   └── 使用简洁的输入输出格式

示例:
❌ 冗长格式:
示例 1:
输入文本:苹果
输出结果:水果

✅ 精简格式:
苹果 → 水果

Few-shot 常见问题 #

问题一:示例冲突 #

text
问题:示例之间存在矛盾

示例 1:
输入:苹果
输出:水果

示例 2:
输入:苹果
输出:科技公司

解决方案:
├── 添加上下文区分
├── 使用不同示例
└── 明确分类标准

改进后:
示例 1:
输入:苹果(食物)
输出:水果

示例 2:
输入:苹果(公司)
输出:科技公司

问题二:示例过拟合 #

text
问题:模型过度模仿示例,无法泛化

示例:
输入:今天天气很好
输出:今天天气很好,适合出门散步。

问题:模型对所有输入都添加"适合出门散步"

解决方案:
├── 增加示例多样性
├── 明确任务边界
└── 添加反例示例

问题三:示例数量不足 #

text
问题:示例太少,引导效果不佳

解决方案:
1. 增加示例数量
2. 提高示例质量
3. 添加任务说明

改进:
─────────────────────────────────────────────────
任务:将句子改写为更正式的表达

示例 1:
输入:这个东西挺好的
输出:该产品质量优良

示例 2:
输入:我不太清楚
输出:我对此不太了解

示例 3:
输入:麻烦帮我看一下
输出:请您帮忙查看

请改写:
输入:这个方案我觉得还行
输出:
─────────────────────────────────────────────────

下一步 #

现在你已经掌握了 Few-shot Learning,接下来学习 Chain of Thought,深入了解思维链推理技术!

最后更新:2026-04-05