Few-shot Examples

Few-shot Examples 是在 Prompt 中注入示例输入-输出对,让 LLM 学习期望的行为模式。它是 Prompt Engineering 中最有效的技术之一。

#type / concept #status / evergreen #tech / ai

[!info] related notes

Few-shot Examples

一句话定义

Few-shot Examples 是在 Prompt 中注入示例输入-输出对,让 LLM 学习期望的行为模式。“给模型看几个例子”比”写一堆规则”更有效。

核心原理

Zero-shot vs Few-shot

Zero-shot (无示例):
  "请将以下文本分类为正面/负面/中性"
  → 模型可能理解不一致

One-shot (一个示例):
  "示例: '很好吃' → 正面"
  → 模型理解了格式

Few-shot (多个示例):
  "示例1: '很好吃' → 正面"
  "示例2: '太难吃了' → 负面"
  "示例3: '还行吧' → 中性"
  → 模型理解了分类标准

示例注入位置

messages = [
    {"role": "system", "content": "你是一个情感分类器"},
    # Few-shot 示例
    {"role": "user", "content": "很好吃"},
    {"role": "assistant", "content": '{"sentiment": "positive"}'},
    {"role": "user", "content": "太难吃了"},
    {"role": "assistant", "content": '{"sentiment": "negative"}'},
    # 真实输入
    {"role": "user", "content": "今天的天气怎么样"},
]

动态示例选择

class FewShotSelector:
    def __init__(self, examples: list[dict]):
        self.examples = examples

    def select(self, input_text: str, k: int = 3) -> list[dict]:
        """选择与输入最相关的 k 个示例"""
        # 方式 1: 随机选择
        return random.sample(self.examples, min(k, len(self.examples)))

        # 方式 2: 按相似度选择(需要 Embedding)
        # input_embedding = embed(input_text)
        # similarities = [cosine_sim(input_embedding, ex.embedding) for ex in self.examples]
        # top_k = sorted(range(len(similarities)), key=lambda i: similarities[i])[-k:]
        # return [self.examples[i] for i in top_k]

常见坑

  1. 示例太多: 占用太多上下文窗口
  2. 示例不典型: 选择的示例不能代表真实场景
  3. 示例有偏: 所有示例都是正面的,模型偏向正面
  4. 不做动态选择: 固定示例不适应不同输入

参考资料

创建于 2026/6/30 更新于 2026/7/15