Block 收口 + SOTA 检查
Day 161-169 把 B17 的两条主线都铺完了:outcome 指标(定义 → 独立金标 FPR → SAR 质量 → cost/p95 → 聚合 → 可视化)和 A/B(设计 → 显著性 → 落仪表盘)。
阶段: B17 · outcome 指标仪表盘 + A/B(Day 161-170) 标签: #block-recap #outcome-metrics #eval-rigor #sota-review
今日导引(由浅入深)
Day 161-169 把 B17 的两条主线都铺完了:outcome 指标(定义 → 独立金标 FPR → SAR 质量 → cost/p95 → 聚合 → 可视化)和 A/B(设计 → 显著性 → 落仪表盘)。 今天是 block 收口——在 B1→B18 能力曲线上,收口的价值不是「再做一件事」,而是「把这十天的方法论结论和诚实边界钉死」,为下一个 block(B18 · OSS 收口 + 英文 + 全局 SOTA 复核)交接一份干净的状态清单。 今天的最小可判定产出是:全量跑 161-169 测试(本仓 423 tests green),跑仪表盘 demo 出含 4 指标 + A/B 结论的完整 snapshot(真值部分待 key)。
1. 机理精读
B17 最本质的一次范式切换:从「循环自评」到「独立金标 + 真实成本/时延 + 配对 A/B」。 旧做法(Day 162 批判的 evalBaseline.ts 的 normalFalsePositiveRate)是「同一套规则既当预测又当裁判」——FPR 必然偏乐观,因为预测和真值同源。
B17 的修复是三件事叠加:
- 独立金标(Day 162):FPR 用人工 labels(
agent-evals/labels)算,预测与真值来源分离,groundTruthEval.ts的binaryEval输出 recall/precision/FPR + bootstrap CI。 - 真实成本/时延(Day 164):cost-per-case 用真实 token × 单价,p95 用
stats.ts的summarizeLatency,而非拍脑袋。已测真值 V4-Flash $0.0139/run。 - 配对 A/B(Day 167-169):同任务对照消除难度方差,Δ + bootstrap CI 判显著。
这三件事把 AML 系统的「自我感觉良好」换成了「能被外部检验的 outcome 数字」。
本 block 最大的方法论教训:N=29 的 A/B 方向性正(Δ+10.3pp)但不显著(CI 触 0)。 这条教训值得反复钉:点估计 +10.3pp 看着像「V4-Pro 明显更强」,但 95% CI = [0, 20.7],下界触 0,统计上排除不了「两者无差」。 原因是 N=29、26 个 tie,有效区分信号只有 3 个 win。 诚实的结论是「directionally better,需 ~70 task 才有 power」,而不是把方向性差包装成「赢」。 这是 eval-rigor 的底线,也是收口时必须留给 B18 的待办(扩任务集取 power)。
收口要同时盘点「已测真值」与「gated 待办」,两类边界不能混。 这是这套笔记的诚信核心:
- 已测真值(可对外引用):V4-Pro 89.7% vs V4-Flash 79.3%、Δ+10.3pp CI[0,20.7] not-sig@N=29、cost $0.0139/run,以及全套纯函数(abCompare/dashboard/groundTruthEval/sarQualityRubric/stats)在 423 绿测内。
- gated 待办(不得升级为已完成):含真值的完整 snapshot(FPR/SAR 质量/p95 需 eval run 填)= 待跑(需 key);judge-human κ = 待手标(≥50);公开集(AMLworld/Elliptic)FPR = 待数据;更大 N = 待跑/待数据。
outcome 指标的合规叙事仍锚在 FinCEN effectiveness rule 与 AMLA。 B17 立 4 指标骨架的理由(Day 161)是 FinCEN 2026 effectiveness rule + AMLA「value to law enforcement」——把「SAR 数量」重述为「报得准/好/贵/快」。 收口时重申:这条叙事是 2026 主线,不能回退到「SAR 数量越多越好」的旧 KPI。
把 B17 的十天压成一张「指标 ↔ 修复 ↔ 状态」对照表,便于交接 B18:
| 指标 | 旧做法的病 | B17 的修复 | 当前状态 |
|---|---|---|---|
| FPR | 循环自评(规则既预测又裁判,偏乐观) | 独立金标 labels + binaryEvalWithCI | 引擎已 built;公开集 FPR 待数据 |
| SAR 质量 | 只看「写没写」 | rubric 多维加权 + judge | 聚合器已 built;judge-human κ 待手标 |
| cost-per-case | 拍脑袋估 | 真实 token×单价 | 已测真值 $0.0139/run(单 run) |
| p95 时延 | 只看均值掩盖长尾 | summarizeLatency p50/p95/p99 | 已 built;20 案件聚合待 key |
| A/B(选模型) | 非配对 / 只看方向 | 配对 + bootstrap CI + 显著判据 | 真值 Δ+10.3pp CI[0,20.7] N=29 不显著 |
这张表把「方法论修复」与「诚实状态」一行行钉死,B18 不必回看十天笔记就能接手 gated 待办。
为什么 B17 是整套作品集的「可信度地基」而不只是又一个 block。 AISA 作品集面试时 hiring manager 的四问之一是「你怎么知道它好(评测)」。 B1-B16 造的是能力(AML Copilot 三屏、Agent 架构、自建平台),B17 造的是「对能力的可信度量」——没有独立金标 + 配对 A/B + 诚实显著性,前面所有功能都只是「我觉得它行」。 所以 B17 的真正交付不是某个 UI,而是一套「能把『我觉得行』翻成『Δ+10.3pp CI[0,20.7] N=29 不显著,需扩到 ~70』」的评测纪律。 这套纪律 + 诚实标注,正是把「会做 demo 的人」和「能对生产系统负责的架构师」区分开的东西。
2. 推导 / 手算 / 代码走读
收口日走读「哪些是已测纯函数(绿测内)、哪些是待接线」,对齐真实仓库状态:
src/agent/eval/abCompare.ts:abCompare已 built+tested,配对对齐 +pairedBootstrap+ win/loss/tie。已测真值的来源函数。src/agent/eval/dashboard.ts:buildDashboard已 built,NSM + leaves 聚合,纯函数(无 fs,bundler-safe)。当前 snapshot 无 experiment / delta 字段(Day 165/169 规划项),含真值的完整 snapshot 待 key 填。src/agent/eval/stats.ts:pairedBootstrap/percentile/requiredNForDelta/summarizeLatency全部已 built+tested。p50/p95/p99 可直接出。src/aml/groundTruthEval.ts:binaryEval/binaryEvalWithCI已 built+tested(Day 162),是独立金标 FPR 的引擎;真实公开集 FPR 待数据。src/aml/sarQualityRubric.ts:sarQuality聚合器已 built(Day 163),对合成草稿打分是确定性测量;judge-human κ 校准待手标。scripts/ab-compare.ts:pnpm eval:ab已 built,verdict 用「CI 跨 0」判显著,写agent-evals/ab.json,并打QUOTABLE一句可引用结论。src/aml/observability/attributeMap.ts:toSemconvAttributes把本仓 trace 映射成 OTelgen_ai.*属性形状,当前不真正上报(注释明确需后端 collector + 真实 LLM 元数据),仅为指标/span 命名提供规范——这是 cost/p95 采集的命名底座,但实际 OTel wiring 仍 gated。
这六个文件都落在「423 tests green」里——收口的可判定动作就是 pnpm test 全绿,它证明纯函数层(统计/聚合/金标/rubric)确定性可重放,与「需 key 跑真模型」的 gated 层清晰分离。
手算复核 A/B 真值的内部一致性:完成率 89.7% vs 79.3%,朴素差 = 10.4pp ≈ 配对 deltaMean +10.3pp(配对按对齐任务算,与朴素差略有出入属正常); 3 wins / 0 losses / 26 ties,29 个任务里只有 3 个提供区分信号 → bootstrap CI 下界落到 0 完全合理。 这组数字自洽,可放心对外引用。
进一步交叉验证「不显著」的内部逻辑:A/B 真正提供区分信息的只有非 tie 任务(3 wins + 0 losses = 3 个)。 bootstrap 在重采样时,绝大多数样本会抽到一堆 0(tie 的成对差),少数抽到 1(win)——重采样均值的下尾很容易触及 0。 所以 CI 下界 = 0.0 不是巧合,而是「26/29 是 tie」这个结构的必然结果。 要把下界顶离 0,唯一的办法是增加非 tie 任务的数量(更难的、更能区分两模型的任务),这正是「扩到 ~70 task」的实质——不是简单堆数量,而是堆「有区分力的任务」。
3. 今日实战
- 全量跑
pnpm test,确认 161-169 涉及的模块(abCompare/dashboard/groundTruthEval/sarQualityRubric/stats)都在 423 tests green 内。 - 跑仪表盘 demo:
pnpm eval:ab(需先有两份run-*.json)+ dashboard 聚合,出含 4 指标(FPR/SAR 质量/cost-per-case/p95)+ A/B 结论的完整 snapshot。 - 把 gated 待办写成清单交接给 B18:扩任务集到 ~70 取 power、补公开集(AMLworld/Elliptic)FPR、接 judge-human κ 校准。
- 复盘 outcome 指标 vs 旧循环自评的差异,落进 block 收口记录(与
docs/AML_GOVERNANCE_MAP.md交叉引用)。
收口的「诚实清单」要分三档写,别混成一锅。
- 已测真值(可对外、可进作品集):V4-Pro 89.7% / V4-Flash 79.3% / Δ+10.3pp CI[0,20.7] / cost $0.0139/run / 423 测试绿。
- 待跑(需 key):含真值的完整 snapshot(FPR/SAR 质量/p95 需 eval run)、A/B 的 end-to-end 接线。这些是「代码就绪、缺一次带 key 的运行」。
- 待数据 / 待手标:公开集(AMLworld/Elliptic)FPR、judge-human κ(需 ≥50 手标)、更大任务集(~70 取 power)。这些是「缺外部数据/人工,不是缺代码」。
把「缺一次运行」和「缺数据/人工」分清,B18 才能正确排期:前者一拿到 key 就能补,后者需要下载/标注的前置工作。混在一起写「待跑」会让人误判工作量。
4. 今日实测 / 产出
- 已 built 部分测试绿(abCompare / dashboard / groundTruthEval / sarQualityRubric / stats 均在 423 绿测内)。
- 完整含真值的 snapshot = 待跑(需 key) 出 FPR / SAR 质量 / p95。
- 已测真值:V4-Pro 89.7% vs V4-Flash 79.3%、Δ**+10.3pp** CI**[0,20.7]** not-sig@N=29、cost $0.0139/run。
- judge-human κ、公开集 FPR、更大 N = 待跑 / 待数据。
5. 常见误区 / 陷阱
- 把 gated 待办说成已完成:含真值 snapshot、κ 校准、公开集 FPR、更大 N 全是待跑/待数据,收口时不得升级状态。
- 循环自评 FPR 对外:
evalBaseline自评 FPR 偏乐观,对外数字必须用独立金标(groundTruthEval)。 - SAR 数量当 KPI:已被 FinCEN effectiveness rule 取代,回退即过时。
- N<30 只报方向不报 CI:本 block 的 CI[0,20.7] 正是反例,收口要把「需 ~70 task」写清。
- 把「待跑」和「待数据」混成一档:前者拿到 key 就能补,后者需下载/手标,混写会让 B18 误判工作量与排期。
- 以测试绿冒充 outcome 达标:423 测试绿只证明纯函数层确定性可重放,不等于 FPR/SAR 质量/p95 已有真值——真值仍 gated。
收口的一句话总结:B17 把 AML 系统从「自我感觉良好(循环自评 FPR、SAR 数量)」升级为「能被外部检验(独立金标 + 真实成本/时延 + 配对 A/B + 诚实显著性)」。最大的可链接资产不是某个 UI,而是 V4-Pro 89.7% vs V4-Flash 79.3%、Δ+10.3pp CI[0,20.7] not-sig@N=29 这串带诚实状态标签的数字,以及生成它的可重放评测纪律。
给 B18 的一句交接:本 block 的代码层(统计/聚合/金标/rubric)已在 423 测试里固化,剩下的全是「需 key 跑一次」或「需外部数据/手标」。 B18 在做 OSS 收口和英文化时,务必把这套「已测真值 vs gated 待办」的诚实分层一并搬进对外材料——对外讲故事时绝不能把 gated 的 FPR/κ 包装成已达标,否则前面十天攒下的可信度一次清零。
6. 学习资源(每条带 YYYY-MM)
- FinCEN AML/CFT National Priorities / effectiveness rule(2026)——4 个 outcome 指标骨架的合规依据。
- Anthropic, "Demystifying evals"(2026-01)——独立金标 vs 循环自评、bootstrap CI 的核心论点。
- IBM AMLworld dataset(2024-04)——SAR narrative 公开基准;已超 24 个月,长文需标历史性并补 2025-2026 公开集复查。
- 本仓
src/agent/eval/{abCompare,dashboard,stats}.ts+src/aml/{groundTruthEval,sarQualityRubric}.ts(AICAP-180 B17)——收口走读的源码(2026-06)。 - 交叉引用
docs/AML_GOVERNANCE_MAP.md+ Day 161-169 笔记(本仓docs/notes/aicap/)——治理映射与十天 outcome/A/B 全链路,B18 接手 gated 待办的索引(2026-06)。
SOTA检查 (2026-06 更新)
- 当前主流:FinCEN effectiveness rule / AMLA「value to law enforcement」仍是 2026 主线;bootstrap CI / 配对 A/B / 独立金标仍 SOTA。
- 复查点:2026-08-02(EU AI Act Art.50 透明度义务生效)——核对披露要求是否影响 outcome 指标对外口径。AMLA 自 2025 起逐步生效,「value to law enforcement」叙事在此期内稳定。
- 数据集时效:IBM AMLworld(2024-04)已超 24 个月,B18 长文须标历史性并复查 2025-2026 是否有更新版公开 AML narrative 基准。
- 模型 id:用
deepseek-v4-pro/deepseek-v4-flash;legacydeepseek-chat/-reasoner2026-07-24 退役,成本模型/A/B 禁引旧 id。 - 避免:循环自评 FPR 对外;SAR 数量当 KPI;N<30 只报方向不报 CI。
- 下步(交接 B18):扩任务集到 ~70 取 power,补公开集 FPR,接 judge-human κ 校准;AMLworld 2024-04 需在长文标历史性并复查 2025-2026 更新版。
衔接
- 昨天:Day 169 — A/B 落仪表盘(把 winner/Δ/CI/N/significant 接进 dashboard snapshot 的 experiment 字段,诚实记录「不显著」)。
- 今天:B17 收口——全量 423 测试绿,复盘 outcome 指标 vs 循环自评,钉死已测真值 vs gated 待办边界,交接 ~70 task 取 power。
- 明天:Day 171 — smolagents v1.26.0 入口扫描(进入 B18,OSS 收口 + 英文 + 全局 SOTA 复核;CodeAgent vs ToolCallingAgent 对照本仓 in-process MCP mock)。