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.ts 的 SAR_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 分锚定数组;每维有weight与anchors(把分数映射到可判定行为描述,减少 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 测试。
- A
-
judgeSarQuality(c, assessment, sar, judge?, opts?):- 无
judge时返回{judged:false, source:'code-only', degradedReason:'未配置 LLM judge 客户端…'}; - 有 judge 时调
buildSarJudgePrompt构造四段式 prompt、解析为RubricScores、用weightedScore算weightedOverall; - 调用失败也降级为 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:
0.3 × 4 = 1.20.35 × 5 = 1.750.2 × 4 = 0.80.15 × 3 = 0.45- 合计 =
1.2 + 1.75 + 0.8 + 0.45 = 4.2(满分 5)
若换算成 0-1 分则 4.2/5 = 0.84。这是确定性手算,可作单测断言。
3. 今日实战
- 在
src/aml/sarQualityRubric.ts基础上,用weightedScore+runRubricCodeChecks写一个 sarQuality 聚合器:对 N 份合成 SAR 草稿(src/aml/sarDraft.ts/src/aml/sarNarrative.ts产)逐维度打分,输出均值。 - 无 key 路径走
judgeSarQuality(..., undefined)的 code-only 降级,确保不伪造 LLM 分。 - 写单测:固定输入草稿,断言
weightedScore与聚合均值的确定性数值(如上面手算的 4.2)。 - 跑
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(单位经济性与时延尾部)。