你塞了 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 个理想示例,只用它。
- 示例还在漂——逐行审一致性。
- 任务可能根本不需要示例——干脆全删。
- 输入很多样切到 RAG,按输入动态拉相关示例。
预防建议
- 默认:多数任务 1-3 个示例上限。
- 每季度审示例库;漂走的剔除。
- 示例预算控制在总 token 30% 以内。
- 任务指令永远紧贴示例之后,不放前面。
- 多样输入优先动态示例选择(检索),不要静态 many-shot。
- 示例数不确定时 A/B 测:1、3、5 个;选达标的最少数。