返回 AICAP-180
B12 · Day 119RLVR + 模型策略 memo

Gap→数据构造

在 B1→B18 能力曲线上,今天是 B12 实验段从「评判」转向「改进」的拐点:前三天(Day 116-118)把 base/tuned 跑出来、求出 Δ±CI、下了显著性裁决。但裁决不是终点——尤其当结论是「方向性更优、不显著」时,真正有价值的产出是从失败样本里挖出能力缺口(gap),并把每个 gap 翻译成一条可执行的数据构造方案。这就是 eval 驱动的数据飞轮:eval→gap→data

阶段: B12 · RLVR + 模型策略 memo(Day 111-120) 标签: #eval-driven-data #failure-clustering #data-flywheel #gap-analysis

今日导引(由浅入深)

在 B1→B18 能力曲线上,今天是 B12 实验段从「评判」转向「改进」的拐点:前三天(Day 116-118)把 base/tuned 跑出来、求出 Δ±CI、下了显著性裁决。但裁决不是终点——尤其当结论是「方向性更优、不显著」时,真正有价值的产出是从失败样本里挖出能力缺口(gap),并把每个 gap 翻译成一条可执行的数据构造方案。这就是 eval 驱动的数据飞轮:eval→gap→data→eval。今天的最小可判定产出是 gap-to-data.md——3 个 gap × 各 1 条数据构造方案 × 各 1 个对应 eval 指标。明天(Day 120)才把这一切串成一页模型策略 memo 收口。

1. 机理精读

能力 gap 闭环三段式。 把模型变强的工程化路径不是「盲目堆数据」,而是一个闭环: (1) 从失败样本聚类定位 gap——把 base/tuned 任一答错的任务收集起来,按失败模式归类,找出反复出现的能力缺口; (2) 针对性构造数据——对每个 gap 造合成数据 / few-shot 示例 / 规则增强,专打这个缺口; (3) 配对应 eval 指标验证补齐——每个 gap 必须绑一个可度量指标(如 per-task recall),补完数据后用这个指标验收「缺口是否真的填上了」。 这就是 Anthropic Demystifying evals(2026-01)的「eval 驱动数据」范式:让 eval 既是诊断仪,也是验收单。 飞轮转一圈,eval 出现两次——开头定位 gap,结尾验收补齐——这不是巧合,是它叫「闭环」的原因。

为什么「每个 gap 绑一个指标」是不可省的纪律。 没有指标的 gap,数据构造无法验收——你造了一堆 structuring 样本,怎么证明模型在 structuring 上真的变好了? 答案只能是「这个 gap 对应的 per-task recall 从 X 升到 Y」。 指标是 gap 与数据之间的合同:它把「我觉得变好了」变成「这个数字升了」。 反过来,无指标地扩数据就是 data dredging(数据浚捞)——加数据、看总分偶尔涨了就归功于新数据,实则可能是噪声,甚至在别处退步而被总分掩盖。 更危险的是:盲目扩数据可能引入新失败模式(如把噪声样本喂进去诱发 context_pollution),没有 per-gap 指标就发现不了。

聚类要按「失败模式」而非「任务话题」。 把失败样本按表面话题分组(都是「转账类任务」)没用——同一话题可能因完全不同的原因失败。 真正有用的是按失败的归因维度聚类:是工具调用失败?是幻觉?是检索遗漏?是格式违规?是类型学误判? 同一类失败往往能用同一种数据构造手段一起修(如所有 format_violation 都靠加结构化 few-shot + 强化代码 grader 解决)。 本仓的 src/aml/failureTaxonomy.ts 提供了现成的 6 类失败归因框架,正好用来给 b12 的失败样本贴轴向编码标签。

与相邻概念的边界。 今天 ≠ Day 118(Day 118 下显著性判决,今天从样本反推数据需求); 今天 ≠ 真正去训练(造数据方案 ≠ 已训练,本批训练全部待 GPU); 今天 ≠ 一次性扩大盘数据(飞轮强调「针对性、带指标」,不是无差别扩库)。 今天只产出「gap × 构造方案 × 指标」的三列映射,是给明天 memo 的「该补什么数据」一栏供料。

2. 代码走读:failureTaxonomy 的归因框架

Read 了 src/aml/failureTaxonomy.ts(确定性分类 schema,非 LLM),它是 Hamel Husain + Shreya Shankar 的 evals 工作流「轴向编码」产物。关键符号与行为:

  • FAILURE_TAXONOMY(6 个稳定类别,id 进 CI/看板勿改名):
    • tool_failure(critical)——下游工具抛错/超时/返回结构非法,产物结构本身不可用,不论语义对错。
    • hallucination(critical)——SAR 引用了不存在的交易 id/金额/对手,由 cited_tx_exist 检查捕获。
    • context_pollution(high)——把良性噪声交易(工资/刷卡/账单代扣)当证据,或串入他案上下文;与 hallucination 的区别是「交易真实存在但不该被引用」。
    • retrieval_miss(high)——构成类型学的核心交易未被召回(recall@k 偏低)。
    • format_violation(medium)——SAR 段落数 <5、金额渲染非两位、缺诚实标注等,纯代码型检查兜底
    • typology_misjudge(high)——topTypology 与金标 label 不一致;带 exampleCaseId: 'C049'(已知会被规则误报为 structuring 的现金密集型商户)。
  • SEVERITY_WEIGHT(critical=3 / high=2 / medium=1)——排错优先级权重,给 top-3 gap 排序用。
  • suggestFailureClasses(c, assessment, sar)——给一条案件+评估+SAR,按各类 decisionRule 串出「可能命中哪些 classId」的建议列表(hallucination 看 citedTxIds 是否含不存在 id;context_pollution 看是否引用 isBenignNoise 交易;format_violation 看 sections<5;typology_misjudge 看 predicted≠label)。注释明确:这只是给标注者的建议,真正的 critical 判定走 evalChecks 的确定性检查——不能把建议当自动判决。
  • FailureLabel(caseId/classId/note/annotator)——open coding 阶段一行标注的落盘契约,annotator 区分 'human' / 'llm-judge'。

走读结论:failureTaxonomy.ts 归因工具已存在可复用,正好把 b12 的失败样本按这 6 类聚类。注意它面向 AML Copilot 的失败(SAR/typology),用于 b12 通用任务时需把类别映射到任务语境(如把 typology_misjudge 类比为「分类层语义错」)。

gap-to-data 三列表的形状(示意,数字待真跑回填)

gap(按失败模式聚类)severity数据构造方案验收 eval 指标
结构化输出不达契约(format_violation 类)medium加 N 条「正确格式」few-shot + 强化代码 grader 断言该子集 format-pass rate ↑
关键证据漏召回(retrieval_miss 类)high合成「核心交易链完整」样本,覆盖漏召回模式该子集 per-task recall ↑
分类层语义误判(typology_misjudge 类)high针对易混类对造对比样本(如 normal vs structuring 边界)该子集 completionRate / 混淆对错误率 ↓

SEVERITY_WEIGHT(critical=3 > high=2 > medium=1)排序,先锁两个 high、再补 medium,凑齐 top-3。表里每一行都满足「gap → 方案 → 指标」三段闭环,缺一行即不合格。

3. 今日实战

  1. 从 Day 117 的配对结果里筛出失败样本——base/tuned 任一答错(pass=0)的任务集合。
  2. src/aml/failureTaxonomy.ts 的 6 类归因框架给每条失败贴标签(用 suggestFailureClasses 取建议,再人工定夺),按 SEVERITY_WEIGHT 加权聚类出 top-3 gap
  3. 每个 gap 配 1 条数据构造方案:合成数据 / few-shot 示例 / 规则增强,三选一并写清具体造法。
  4. 每个 gap 配 1 个对应 eval 指标(如 per-task recall、该 gap 子集的 completionRate),作为补齐后的验收口径。
  5. 落盘 gap-to-data.md(3 gap × 构造方案 × 指标的三列表)。

4. 今日实测 / 产出

  • 产出物gap-to-data.md(3 gap × 构造方案 × 指标)。
  • 状态:基于 b12 失败样本的具体聚类 = 待跑(需 key 跑出 b12-base/tuned 失败集)——失败样本要先有 b12-base/b12-tuned 真跑结果才能筛出来。
  • 可复用src/aml/failureTaxonomy.ts 归因工具已存在可复用(6 类 + severity 权重 + suggestFailureClasses),不需新建。

5. 常见误区 / 陷阱

  • 无指标盲目扩数据(data dredging):加数据看总分偶尔涨就归功,实则可能是噪声或别处退步被掩盖。每个 gap 必须绑一个可度量指标。
  • 按任务话题而非失败模式聚类:同话题可能因完全不同原因失败,按话题分组修不动。要按归因维度(tool/hallucination/retrieval/format/typology…)聚。
  • suggestFailureClasses 的建议当自动判决:它只给候选类别,critical 判定走 evalChecks 的确定性检查 + 人工定夺。
  • gap 数失控:一次只锁 top-3(按 severity 加权),贪多则每个都修不透。
  • 造数据时引入新失败模式:补 retrieval_miss 的样本若夹带良性噪声,可能诱发 context_pollution——补完必须看「目标指标升」且「其他指标不降」。
  • 把 b12 失败集当成已有:失败样本要先有 b12-base/b12-tuned 真跑结果才能筛,未跑出前 gap-to-data.md 的具体聚类只能标待跑。

6. 学习资源(每条带 YYYY-MM)

  • Anthropic — Demystifying evals(2026-01):eval→gap→data→eval 闭环、eval 驱动数据范式。
  • Hamel Husain + Shreya Shankar — Evals workflow(人工错误分析 → open coding → axial coding → LLM-as-judge → 代码检查;Lenny's Newsletter 2025-09 / hamel.dev evals-faq):失败聚类与轴向编码方法论(failureTaxonomy.ts 出处)。
  • 本仓代码:src/aml/failureTaxonomy.ts(6 类失败归因 + suggestFailureClasses,已 built+tested)。

7. 面试视角 / 关键要点

  • 「模型不够好怎么办?」 → 不是盲目堆数据,而是 eval→gap→data→eval 闭环:从失败样本定位 gap、针对性造数据、用 per-gap 指标验收。
  • 「怎么决定先补哪个 gap?」 → 按失败 severity 加权(critical>high>medium)排 top-3,先修高严重度、高频复现的。
  • 「怎么证明补的数据有效?」 → 每个 gap 预先绑一个 eval 指标(如 per-task recall),补完看该指标是否上升;没有指标就是 data dredging。
  • 「失败样本怎么分类?」 → 按失败模式(tool/hallucination/context_pollution/retrieval_miss/format/typology)而非任务话题,用 failureTaxonomy.ts 的 6 类做轴向编码。

一句话总结:失败样本是金矿,但要按失败模式聚类、每个 gap 绑指标,才挖得出可验收的数据计划——这是 gap-to-data.md 的全部价值。

SOTA检查 (2026-06 更新)

  • 现役主线:「eval→gap→data→eval」闭环是 2026 数据飞轮主线;按失败模式做轴向编码聚类、每个 gap 绑可度量指标,是 eval 驱动数据的现役范式。
  • 避免/禁用:避免无指标的盲目扩数据(data dredging);避免按表面话题而非失败模式聚类。
  • 下次复查点:复查 Demystifying evals 是否有 2026 更新版的飞轮指南;b12 失败集需待 key 跑出 b12-base/tuned 后才能落地具体聚类。

8. 产出状态速查

状态备注
gap-to-data.md(3 gap × 方案 × 指标)待跑(需 key 跑出 b12-base/tuned 失败集)失败样本要先有真跑结果才能筛
failureTaxonomy.ts 归因工具已存在可复用6 类 + SEVERITY_WEIGHT + suggestFailureClasses
闭环验收指标随方案绑定每个 gap 必带 1 个可度量指标(如 per-task recall)

衔接

  • 昨天:Day 118 — 结果显著性裁决(CI 跨 0 + Cohen's κ 复核,写 verdict.md)。
  • 今天:从失败样本按 6 类归因聚类 top-3 gap,每个绑构造方案 + eval 指标,写 gap-to-data.md
  • 明天:Day 120 — 模型策略 memo(把 Δ±CI、裁决、gap→数据→指标串成一页可执行决策 memo,B12 收口)。