示例太多反而压住任务:4 个原因 + 对症修复

塞 8 个示例覆盖每种情况,输出反而像示例拼贴或挑最像的去抄而不推理——示例有甜点位是 1-3 个。本文讲为什么多反而坏,并教你怎么挑代表性示例钉住输出。

你塞了 8 个示例”覆盖每种情况”。输出现在挑一个最像你输入的示例去抄,哪怕任务需要推理。更糟:输出像 8 个示例的拼贴,把本不该同框的短语揉一起。示例多了听起来应该更准。过了某个点反而相反:示例挤掉指令、风格漂走、边界情况误导常态、占掉本该给任务的 token。有个甜点,通常是 1-3 个。

本文讲为什么”示例多”不等于”输出好”,以及怎么挑 1-3 个有代表性的示例真正钉住输出。

常见原因

1. 为”覆盖所有”堆

你为边界 A 加一个、为边界 B 加一个、“以防万一”再加 C 到 H。集合范围比真实输入还宽。

如何判断:5+ 个示例,每个对应一种边界。

2. 示例风格 / 结构漂

示例 1 简洁、4 啰嗦、7 有 bullet。模型平均后不一致。

如何判断:示例之间长度、语域、结构不同。

3. 示例含误导边界

你加了个边界示例。模型把那个边界当常态,用边界处理套到日常输入。

如何判断:边界处理对、常见情况错。

4. 示例 token 超过任务

2000 字 prompt 里 1600 字是示例,任务占 20%。模型锚定主导内容——示例——把任务当脚注。

如何判断:示例 token 数 > 任务 + 约束 + 输出规范之和。

5. 示例后没明确指令

最后一个示例后没”现在为以下输入做 X”。模型以为你要第 9 个示例,产出又一个示例而不是任务答案。

如何判断:prompt 结尾是示例,不是任务动词。

动手前先确认

  • 数示例数。超 4 个就过甜点了。
  • 标典型 vs 边界。
  • 决定哪 1-3 个真正有代表性。
  • 确认示例风格、结构一致。
  • 计划把任务指令放在示例正后面。

需要收集的信息

  • 含全部示例的当前 prompt。
  • 漂向某示例或拼贴的输出。
  • 你的典型输入 vs 边界。
  • 示例 token 数 vs 任务 token 数。
  • 模型 + system prompt。

最短修复路径

Step 1:砍到 1-3 个代表性示例

挑能:

  • 覆盖典型(不是边界)
  • 风格、结构一致
  • 清晰展示输出形态

每个保留的示例用一句话说为什么留。说不出就砍。

Step 2:按代表性排序

最典型的放第 1 个。第 1 个锚定最强。最后 1 个近期锚定。

示例 1(最典型):……
示例 2(典型范围内的变体):……
示例 3(典型边界):……

Step 3:示例显式标号

示例 1:
输入:<输入 1>
输出:<输出 1>

示例 2:
输入:<输入 2>
输出:<输出 2>

现在为以下输入做:
输入:<真实输入>
输出:

显式”现在为……做”防止模型续示例序列。

Step 4:任务指令紧贴示例之后

任务动词应该是模型生成前读到的最后一样东西。近期偏好为你所用。

Step 5:边界单独处理

真需要边界覆盖就别塞进主 few-shot。用路由:

主 prompt:处理典型(1-3 个典型示例)。

输入匹配 <边界条件> 时路由到独立子 prompt,
带边界示例 + 边界规则。

边界处理和主路径分开。

Step 6:审示例预算

示例超 1000 token 就剪。每个示例只保留展示模式的最小内容,不要完整真实样本。

怎么确认已经修好

  • 示例数在 1-3 之间。
  • 所有示例风格、结构、语气一致。
  • 最典型的在第 1 位。
  • “现在为……做”或等价标签紧贴真实输入。
  • 输出对典型处理好,边界走单独路径。
  • 同 prompt 跑 3 次结果一致。

如果还是没修好

  1. 你的典型可能没定清——写 1 个理想示例,只用它。
  2. 示例还在漂——逐行审一致性。
  3. 任务可能根本不需要示例——干脆全删。
  4. 输入很多样切到 RAG,按输入动态拉相关示例。

预防建议

  • 默认:多数任务 1-3 个示例上限。
  • 每季度审示例库;漂走的剔除。
  • 示例预算控制在总 token 30% 以内。
  • 任务指令永远紧贴示例之后,不放前面。
  • 多样输入优先动态示例选择(检索),不要静态 many-shot。
  • 示例数不确定时 A/B 测:1、3、5 个;选达标的最少数。

相关阅读

标签: #排查 #Prompt #Prompt 质量 #Prompt 工程