返回 AICAP-180
B17 · Day 163outcome 指标仪表盘 + A/B

M7 SAR 质量量化

昨天 Day 162 落地了 outcome 四指标里的 FPR(报得准不准)。

阶段: B17 · outcome 指标仪表盘 + A/B(Day 161-170) 标签: #sar-quality #rubric #llm-as-judge #cohens-kappa

今日导引(由浅入深)

昨天 Day 162 落地了 outcome 四指标里的 FPR(报得准不准)。

今天 Day 163 落地第二个——SAR 质量(报得好不好)。这是 4 个指标里唯一「主观但可结构化」的:FPR/cost/p95 都是硬数字,SAR 质量则要把一段自然语言 narrative 拆成可打分维度再聚合成 0-1 分。

在 B1→B18 曲线上,这一步把「写了 SAR」升级成「SAR 写得多好」,并把质量从 examiner 的口头质询变成可复跑的确定性聚合值。

最小可判定产出:sarQualityRubric.ts 的聚合器对 N 份合成 SAR 草稿逐维度打分输出均值,单测固定输入断言聚合数值。

1. 机理精读

质量不能只看「写了没」。

一份 SAR narrative 哪怕字数达标,也可能完整性缺项、引用悬空、用词臆断。

FFIEC BSA/AML 手册要求 narrative 覆盖 5W1H(who/what/when/where/why + how)、说清「为何可疑」。examiner 会因叙述含糊而质询。

所以质量必须拆成可分别打分的维度,再加权聚合成单值,才能进 outcome 仪表盘。

四维 rubric 的设计与权重逻辑。

src/aml/sarQualityRubric.tsSAR_RUBRIC 定义四个维度,权重不均匀,依据 AML 场景的错误严重性排序:

  • factual_faithfulness 事实忠实(权重 0.35,最高):金额/日期/对手/交易 id 是否全部来自证据清单,有无杜撰。AML 里杜撰具体事实是零容忍的最严重错误,故权重最高。
  • completeness 完整性 5W1H(权重 0.3):六要素是否齐全、可疑原因是否清晰。缺项直接被 examiner 质询。
  • typology_citation 类型学引用(权重 0.2):是否点名命中类型学并用 [Txxxx] 锚点把可疑事实回指证据,保证逐条可核对。
  • regulatory_language 监管语言(权重 0.15):是否用规范 BSA/AML 术语、口径中立、含 AI 生成披露 + 人工复核声明(EU AI Act Art.50,2026-08-02 生效)。

四维权重和 RUBRIC_WEIGHT_SUM ≈ 1(有专门常量供测试断言)。

双层评估:代码型子检查 + LLM judge。

这是落地 arXiv 2509.08380「Co-Investigator AI」(2025-09)的双管思路:

  • 代码型子检查(确定性)runRubricCodeChecks 跑格式/引用存在性/段落完整性/披露这些能用代码确定判定的项,不浪费 judge 的 token。
  • LLM judge(语义型):完整性/事实忠实/类型学引用/监管语言四维 1-5 分打分,由 buildSarJudgePrompt 构造四段式(RCAF)prompt。

诚实纪律:无 key 时降级、绝不伪造分。

judgeSarQuality 在无 judge 客户端时返回 judged=false, source='code-only',只跑代码型子检查 + 写明 degradedReason,绝不编造 LLM 维度分。

这是这套笔记的诚信底线在代码里的体现。

与相邻概念的边界。

今天产出的「均值」是合成集自测值(纯函数确定性),不是人评校准值

要让 judge 打分可信,还需与人工标注做 Cohen's kappa 一致性校验——那需要 ≥50 份手标,是 gated 的外部动作。

2. 推导 / 手算 / 代码走读

sarQualityRubric.ts 文件存在(423 行,已读)。关键符号走读:

  • SAR_RUBRIC:四维 + 1..5 分锚定数组;每维有 weightanchors(把分数映射到可判定行为描述,减少 judge 漂移)。

    • RUBRIC_WEIGHT_SUM = SAR_RUBRIC.reduce((s,d)=>s+d.weight, 0) ≈ 1,供测试断言权重自洽。
  • weightedScore(scores)Σ weight_d × (scores[d.id] ?? 0),结果 Math.round(s*1000)/1000,输出 0..5 的加权总分(这是 SAR 质量指标的聚合器核心)。

  • runRubricCodeChecks(c, sar, assessment):返回 5 条确定性子检查——

    • A rubric_min_sections(段落数≥5);
    • B rubric_5w1h_headings(Who/What/Why/How 标题齐全);
    • C rubric_anchors_resolve(锚点全部指向真实交易);
    • D rubric_citation_present(有判定就须有证据锚点);
    • E rubric_disclosure_present(AI 披露 + 人工复核声明);
    • 每条带 dimension 归属,便于把确定性证据并入对应维度。全程纯函数,可被 deep-equal 测试。
  • judgeSarQuality(c, assessment, sar, judge?, opts?)

    • judge 时返回 {judged:false, source:'code-only', degradedReason:'未配置 LLM judge 客户端…'}
    • 有 judge 时调 buildSarJudgePrompt 构造四段式 prompt、解析为 RubricScores、用 weightedScoreweightedOverall
    • 调用失败也降级为 code-only。
  • cohenKappa(judgeLabels, humanLabels):κ=(po−pe)/(1−pe),两序列须等长非空(否则 throw),用于 judge×人工一致性校准;κ<0.6 应回退人工或重做 rubric。

注:seed 把一致性校验函数记作 cohensKappa.ts,本仓实际把 cohenKappa() 实现在 sarQualityRubric.ts 内(无独立 cohensKappa.ts 文件)。引用时以仓内真实符号 cohenKappa 为准。

手算聚合:

设某份草稿四维分 completeness=4、factual_faithfulness=5、typology_citation=4、regulatory_language=3。

weightedScore

  1. 0.3 × 4 = 1.2
  2. 0.35 × 5 = 1.75
  3. 0.2 × 4 = 0.8
  4. 0.15 × 3 = 0.45
  5. 合计 = 1.2 + 1.75 + 0.8 + 0.45 = 4.2(满分 5)

若换算成 0-1 分则 4.2/5 = 0.84。这是确定性手算,可作单测断言。

3. 今日实战

  1. src/aml/sarQualityRubric.ts 基础上,用 weightedScore + runRubricCodeChecks 写一个 sarQuality 聚合器:对 N 份合成 SAR 草稿(src/aml/sarDraft.ts / src/aml/sarNarrative.ts 产)逐维度打分,输出均值。
  2. 无 key 路径走 judgeSarQuality(..., undefined) 的 code-only 降级,确保不伪造 LLM 分。
  3. 写单测:固定输入草稿,断言 weightedScore 与聚合均值的确定性数值(如上面手算的 4.2)。
  4. pnpm test 验证。

4. 今日实测 / 产出

  • sarQualityRubric.ts 文件存在
  • 聚合器对合成草稿打分均值 = 确定性测量(纯函数,固定输入固定输出),可跑 pnpm test 验。
  • 真实人评对照(judge-human κ,需 ≥50 手标)= 待跑(需手标)
  • 当前均值为合成集自测值,非人评校准值。不产生人评校准过的质量分。

5. 常见误区 / 陷阱

  • 拿合成集自测均值当「经人评校准的质量分」:没过 Cohen's kappa 校验前,judge 打分只是未校准代理。
  • LLM judge 越权打确定性项:引用存在性/段落数这类能用代码判的,应留给 runRubricCodeChecks,别让 judge 浪费 token 还引入漂移。
  • 权重和不为 1:改 rubric 权重后忘了让 RUBRIC_WEIGHT_SUM ≈ 1,聚合分会失真——必须有测试守住。
  • 无 key 时伪造维度分:必须走 code-only 降级 + degradedReason,绝不编造 LLM 分。

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

  • IBM AMLworld dataset(2024-04)——SAR narrative 质量基准的公开数据底座。
  • arXiv 2509.08380「Co-Investigator AI」——SAR 叙述 Agent-as-a-Judge 双层(语义 + 规则)评估(2025-09)。
  • FFIEC BSA/AML 手册 Appendix L「SAR 质量指引」+ FinCEN SAR 叙述指引(2003-11 底稿;2026 审查口径「质量优于数量」)。
  • LLM-as-judge RCAF 四段式(Role + rubric Context + scoring Actions + output Format)prompt 可靠性指南(Aman Khan 2026-04;SurePrompts 2026)。
  • 本仓代码:src/aml/sarQualityRubric.ts(rubric + judge prompt + code checks + cohenKappa)。

SOTA检查 (2026-06 更新)

  • 当前主流:rubric-based SAR 打分仍主流;LLM-as-judge 打分需配 κ 一致性校验(仓内 cohenKappa)才可信,κ<0.6 回退人工。
  • 过时黑名单:不要把未经 κ 校验的 judge 分对外宣称为「质量分」。
  • 下次复查点:AMLworld 2024-04 仍是公开 AML narrative 基准,但已超 24 个月——长文里须标历史性并补 2025-2026 公开集复查。2026-08-02 EU AI Act Art.50 透明度义务生效,复查 regulatory_language 维度的 AI 披露要求是否升级。

衔接

  • 昨天:Day 162 — M7 FPR 与 normalFalsePositiveRate(独立金标算 FPR)。
  • 今天:把 SAR narrative 拆四维 rubric 加权聚合成质量分;代码型子检查确定性、judge 语义打分无 key 降级。
  • 明天:Day 164 — M7 cost-per-case + p95(单位经济性与时延尾部)。