S4.2.1 Task 4.2

配对的 REPORT + SKIP 示例:67% → 94% 边界准确率

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% 误报率的类别可能不需要。

优先级排序:

  1. 找到误报率最高的类别
  2. 为该类别中最常见的误报模式创建一个 SKIP 示例
  3. 与已有的 REPORT 示例配对(或两个都创建)
  4. 测量效果后再处理下一个类别

推理过程不可省略

每个示例中的推理不是可选的装饰,是教学机制本身。

“SKIP — 关闭期间的有意静默”告诉 Claude 这个模式为什么是可接受的。没有推理,Claude 看到的是两个矛盾的示例(同一模式,不同判断),无法泛化到新的上下文。有了推理,Claude 学到的是决策逻辑:“安全上下文中的空 catch → 标记;清理上下文中的空 catch → 跳过。”

不要为了塞进更多示例而缩减推理。两个有完整推理的示例优于四个推理被截断的示例。

与 CLAUDE.md 和 CI 结合

在 CI 流水线中,配对示例和审查标准一起放在 CLAUDE.md 里。每次 claude -p 审查运行时自动加载。示例校准判断;文字标准提供框架;--json-schema 保证输出结构。三种机制,各处理审查质量的不同维度。

对于 agentic 系统中的升级设计,同样的原则适用:同时包含”应该升级”和”应该自主处理”的示例。Few-shot 示例应该强化升级规则(比如”客户请求人工 → 立即升级”),绝不能教模型绕过规则。


一句话总结: 每个 REPORT 示例都配一个针对同一模式的对比 SKIP 示例——对比教会的边界判断是单类型示例做不到的,误报率从 38% 降到 9%。