4.2 Few-shot 学习与示例构建
Few-shot 学习是一种通过示例引导 AI 理解任务的技术。你不需要用大量数据训练模型,只需提供几个精选的输入-输出示例,AI 就能快速掌握任务模式。
4.2.1 示例选择策略
示例的质量直接决定 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 学习的效果。
动态示例构建的核心思路:
- 语义相似度匹配:根据用户输入,从示例库中检索语义最相近的示例
- 类别感知选择:如果已知输入的可能类别,选择该类别的典型示例
- 难度适配:根据问题复杂度选择相应难度的示例
示例检索流程:
用户输入 → 语义编码 → 相似度计算 → 选取 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 人。
现在请解决:[新问题]- 适用场景:数学计算、逻辑推理、多步分析
- 不适用场景:简单查询、创意生成
- 示例数量: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 个示例后收益显著递减。
实践建议:
- 从 2-3 个高质量示例开始
- 测试效果,不理想再增加
- 优先提升示例质量而非数量
- 注意示例的多样性和平衡性