Few-shot 原则的实际应用:配对示例展示同一模式下的不同判断。纯文字规则达到 67% 的边界准确率。加一个 REPORT 示例推到 72%。再加一个针对同一模式类型的对比 SKIP 示例,到 94%。对比才是决定性因素。
REPORT/SKIP 技巧
以代码审查发现”空 catch 块”为例:
REPORT 示例:
模式:认证处理器中的空 catch
判断:REPORT — 安全关键路径,吞掉的异常隐藏了认证失败
严重等级:HIGH
SKIP 示例:
模式:优雅关闭清理中的空 catch
判断:SKIP — 关闭期间的有意静默,无用户影响
推理:关闭期间的清理错误是预期中的且无害
这对示例教会 Claude 同一代码模式(空 catch)在不同上下文下需要不同判断。没有 SKIP 示例,Claude 会不分上下文地标记每一个空 catch——产出全正例示例集带来的 35-45% 误报率。
对误报的影响
在已有的纯 REPORT 集合中加入 2 个 SKIP 示例:
| 指标 | 之前 | 之后 |
|---|---|---|
| 误报率 | 38% | 9% |
| 漏检真 bug | 基线 | +1% |
误报减少 76%,漏检只增加 1%。SKIP 示例教会了克制但没教会视而不见。
什么时候用配对示例
优先给误报率最高的类别加配对的 REPORT/SKIP 示例。40% 误报率的类别从 SKIP 示例中获益巨大。5% 误报率的类别可能不需要。
优先级排序:
- 找到误报率最高的类别
- 为该类别中最常见的误报模式创建一个 SKIP 示例
- 与已有的 REPORT 示例配对(或两个都创建)
- 测量效果后再处理下一个类别
推理过程不可省略
每个示例中的推理不是可选的装饰,是教学机制本身。
“SKIP — 关闭期间的有意静默”告诉 Claude 这个模式为什么是可接受的。没有推理,Claude 看到的是两个矛盾的示例(同一模式,不同判断),无法泛化到新的上下文。有了推理,Claude 学到的是决策逻辑:“安全上下文中的空 catch → 标记;清理上下文中的空 catch → 跳过。”
不要为了塞进更多示例而缩减推理。两个有完整推理的示例优于四个推理被截断的示例。
与 CLAUDE.md 和 CI 结合
在 CI 流水线中,配对示例和审查标准一起放在 CLAUDE.md 里。每次 claude -p 审查运行时自动加载。示例校准判断;文字标准提供框架;--json-schema 保证输出结构。三种机制,各处理审查质量的不同维度。
对于 agentic 系统中的升级设计,同样的原则适用:同时包含”应该升级”和”应该自主处理”的示例。Few-shot 示例应该强化升级规则(比如”客户请求人工 → 立即升级”),绝不能教模型绕过规则。
一句话总结: 每个 REPORT 示例都配一个针对同一模式的对比 SKIP 示例——对比教会的边界判断是单类型示例做不到的,误报率从 38% 降到 9%。