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