2.4 少样本学习与示例设计

如果把编写 System Prompt 比作编写“职位描述”,那么 Few-Shot Prompting (少样本提示) 就是在进行“岗前培训”。

通过向 Claude 展示几个“完美案例”,无需费力解释抽象规则,就能让模型迅速领悟意图。这被称为 In-Context Learning (上下文学习)

2.4.1 原理:从模仿到泛化

LLM 是强大的模式识别引擎。当提供示例(Shots)时,Claude 实际上在做两件事:

  1. 格式模仿:识别输入和输出的结构(JSON, Markdown, XML)。

  2. 逻辑泛化:分析从 Input 变到 Output 的潜在逻辑规则。

Shot 的数量级

类型
数量
适用场景

Zero-Shot

0

简单任务,通用常识("把这段话翻译成英文")

One-Shot

1

需要强制规定特定格式 / 风格

Few-Shot

3-5

复杂任务,边缘情况多,需要很难用语言描述清楚的逻辑

Many-Shot

50+

极高难度的分类任务、微调级别的风格模仿(Feature available in Claude 2/3

2.4.2 标准构造范式

推荐使用 XML 标签 <examples> 包裹示例。

基础结构

<system_prompt>
    ...
</system_prompt>

<examples>
    <example>
        <input>苹果</input>
        <output>红色,圆形,水果</output>
    </example>
    <example>
        <input>天空</input>
        <output>蓝色,广阔,自然现象</output>
    </example>
</examples>

<user_input>
    消防车
</user_input>

黄金法则:多样性覆盖

示例集必须覆盖任务的边界情况 (Corner Cases)

  • Bad Set: 3个示例全是简单的正面情况。

  • Good Set:

    • Ex 1: 简单标准情况。

    • Ex 2: 复杂情况(输入很长)。

    • Ex 3: 异常情况(输入缺损,输出报错)。

    • Ex 4: 干扰情况(输入包含无关信息,输出需忽略)。

2.4.3 进阶技巧

格式强化

有时即使写了 "Output valid JSON",模型还是会啰嗦 "Here is the JSON..."。 通过 Few-Shot,直接展示 JSON Only 的输出,Claude 就会乖乖闭嘴。

思维链演示

如果希望 Claude 在推理时必须展示步骤,不要只在 System Prompt 里说。在示例里直接写出来。

负面示例

告诉 Claude “不要做什么”往往很难,不如直接演示“错误的做法”以及“如何修正”。

(注:这种写法需要配合说明,明确告诉模型哪个是错的。)

2.4.4 Many-Shot Prompting

这是 Claude 长上下文能力的特有玩法。 如果你的任务很难(例如:将自然语言转为一种极其晦涩的内部 DSL 查询语言),提供 3 个例子根本不够。 可以利用 Claude 的 200k 窗口,一次性塞入 50-100 个 高质量的 Input-Output 对。

效果惊人:根据 Anthropic 的研究,Many-Shot 在某些复杂任务上的表现可以媲美经过 Fine-tuning(微调)的模型,但无需任何训练成本。

2.4.5 动态示例库

在生产环境中,可能有 1000 个完美的示例,但不能每次都全部发给模型(Token太贵)。 最佳实践是建立一个动态示例库

  1. Embed: 将 1000 个示例的 input 转化为向量并存入向量数据库。

  2. Retrieve: 当用户发来新问题 Q 时,先去库里搜最相似的 5 个示例。

  3. Construct: 将这 Top-5 示例动态插入 System Prompt 的 <examples> 插槽中。

  4. Generate: 发送给 Claude。

这种方法大大提升了针对特定问题的回复准确率。


掌握了 Few-Shot,已经能够解决 90% 的格式和风格问题。但面对复杂的逻辑推理难题,还需要一把更锋利的武器 —— 让 AI “慢下来思考”。

➡️ 链式思维 (Chain of Thought)

最后更新于