4.2 Few-shot 学习与示例构建

Few-shot 学习是一种通过示例引导 AI 理解任务的技术。你不需要用大量数据训练模型,只需提供几个精选的输入-输出示例,AI 就能快速掌握任务模式。

4.2.1 示例选择策略

示例的质量直接决定 Few-shot 学习的效果。好的示例应满足三个原则:

Few-shot 学习示例选择策略

质量原则

示例必须准确、清晰、典型:

  • 准确无误:示例的输入-输出映射必须正确
  • 清晰明确:避免模糊或有歧义的表述
  • 典型代表:能够反映任务的核心特征
  • 格式一致:所有示例使用统一的格式

多样性原则

示例应覆盖任务的不同方面:

  • 类别平衡:分类任务中,各类别应有相等的示例数
  • 边界案例:包含一些非典型或边界情况
  • 复杂度层次:从简单到复杂的示例组合

相关性原则

示例应与目标任务高度相关:

  • 领域匹配:金融任务使用金融领域的示例
  • 任务类型匹配:分类任务用分类示例,生成任务用生成示例
注记知识卡片

Few-shot 学习利用了大语言模型的「上下文学习」(In-Context Learning)能力。研究发现,当模型参数量超过某个临界点,模型就能从提示词中的示例归纳出任务规则,无需额外训练。

4.2.2 示例格式设计

示例格式的选择取决于任务类型。以下是四种常用格式:

基本输入-输出对格式(适合简单映射任务):

输入:苹果公司发布了新款 iPhone,市场反应热烈。
输出:积极

输入:公司第四季度亏损扩大,裁员 10%。
输出:消极

带解释的格式(帮助模型理解判断逻辑):

输入:虽然一季度利润下滑 10%,但公司表示已采取成本控制措施。
分析:虽然短期利润下滑是负面消息,但有明确的改善计划。
输出:中性偏积极

思维链格式(适合复杂推理任务,详见 4.2.3):

问题:某公司营收 100 亿,今年增长 20%,其中海外增长 50%。
      已知海外占总营收 40%,计算海外市场营收。

让我们一步步思考:
步骤 1:今年总营收 = 100 × 1.2 = 120 亿
步骤 2:今年海外营收 = 120 × 40% = 48 亿
答案:48 亿元

结构化提取格式(适合多字段提取任务):

文本:特斯拉 2024 年 Q3 营收 251.8 亿美元,同比增长 8%,净利润 21.7 亿。

提取结果:
- 公司名称:特斯拉
- 时间周期:2024 年 Q3
- 营收:251.8 亿美元
- 营收增长率:8%
- 净利润:21.7 亿美元

4.2.3 动态示例构建与思维链推理

在实际应用中,示例并非总是静态预设的。动态示例构建根据用户输入的特征,实时选择或生成最相关的示例,从而提升 Few-shot 学习的效果。

动态示例构建的核心思路

  1. 语义相似度匹配:根据用户输入,从示例库中检索语义最相近的示例
  2. 类别感知选择:如果已知输入的可能类别,选择该类别的典型示例
  3. 难度适配:根据问题复杂度选择相应难度的示例

示例检索流程

用户输入 → 语义编码 → 相似度计算 → 选取 Top-K 示例 → 组装提示词

在 Opencode 的 Skill 中,可以通过以下方式实现动态示例:

## 示例库

本技能包含 20 个预设示例,按以下类别组织:
- 简单分类(5 个)
- 复杂推理(5 个)
- 边界案例(5 个)
- 混合类型(5 个)

## 示例选择规则

1. 如果用户问题简短明确,选择 2 个简单分类示例
2. 如果用户问题涉及多步骤分析,选择 2 个复杂推理示例
3. 始终包含 1 个边界案例作为参考

思维链:一种特殊的动态示例技术

思维链(Chain of Thought, CoT)是动态示例构建的重要技术。它通过展示推理过程来引导 AI 解决复杂问题,可以显著提升复杂任务的准确率。

为什么 CoT 有效?

CoT 模拟了人类解决复杂问题的方式:将大问题分解为小步骤,逐步推进。研究表明,CoT 可将某些数学推理任务的准确率提升 4-400%。

Zero-shot CoT(最简单的实现):

只需在提示末尾添加「让我们一步一步思考」:

问题:小明有 15 本书,借给朋友 3 本,捐给图书馆 4 本。
后来又买了 7 本,卖掉 2 本。小明现在有多少本书?

请一步一步思考后回答。

AI 会自动展开推理过程:

让我一步步计算:
1. 小明最初有 15 本书
2. 借给朋友后:15 - 3 = 12 本
3. 捐给图书馆后:12 - 4 = 8 本
4. 买了新书后:8 + 7 = 15 本
5. 卖掉后:15 - 2 = 13 本

答案:小明现在有 13 本书。

Few-shot CoT(通过示例演示推理过程):

对于复杂任务,提供包含推理过程的示例效果更好:

示例:
问题:一个班有 32 名学生,女生比男生多 4 人。女生有多少人?

推理过程:
- 设男生有 x 人,则女生有 (x + 4) 人
- 男生 + 女生 = 总人数:x + (x + 4) = 32
- 2x + 4 = 32,解得 x = 14
- 女生人数 = 14 + 4 = 18

答案:女生有 18 人。

现在请解决:[新问题]
提示CoT 使用建议
  • 适用场景:数学计算、逻辑推理、多步分析
  • 不适用场景:简单查询、创意生成
  • 示例数量:2-5 个示例通常足够

4.2.4 示例数量与质量权衡

示例数量的选择需要权衡多个因素:

任务复杂度 建议示例数 说明
简单分类 2-3 个 每个类别至少 1 个示例
中等复杂度 3-5 个 覆盖主要情况和边界案例
复杂推理 5-10 个 展示完整的推理过程

增加示例的好处

  • 提供更多模式供模型学习
  • 覆盖更多边界情况
  • 减少歧义

增加示例的代价

  • 消耗更多 token(增加成本和延迟)
  • 可能超出上下文窗口限制
  • 存在边际收益递减

研究表明(Brown et al., 2020, “Language Models are Few-Shot Learners”),主要性能提升发生在添加第 2 个示例之后,超过 5 个示例后收益显著递减。

实践建议

  1. 从 2-3 个高质量示例开始
  2. 测试效果,不理想再增加
  3. 优先提升示例质量而非数量
  4. 注意示例的多样性和平衡性