| name | confidence-system |
| tier | meta |
| description | Design and calibrate confidence scoring for extraction and verification results. Use when building any workflow that needs to quantify trust in its output, when setting up quality control sampling thresholds, or when calibrating existing confidence scores against actual accuracy. Confidence is the bridge between workflows and quality control. Also use when the quality control skill reports that confidence scores do not correlate with actual correctness. |
置信度系统
置信度不是模型的自信程度,而是系统准确率的预测值。一个置信度分数应该回答这个问题:"当系统给出这个分数时,结果正确的概率是多少?"如果你的 0.90 置信度结果实际准确率为 90%,说明系统校准良好。
为什么需要置信度
没有置信度,你只有两个选择:
- 全量审查——成本高昂,自动化的意义荡然无存。
- 不审查——风险高,错误会漏过。
有了置信度,你可以智能审查:把有限的审查资源投入到最可能出错的地方。高置信度的结果抽样审查,低置信度的结果全量审查。这是自动化与质量之间的桥梁。
经济账
假设一批 1000 份文档,每份人工审查成本 50 元:
- 全量审查:50,000 元
- 有置信度系统:高置信度 700 份(抽样 10%)+ 中置信度 200 份(抽样 50%)+ 低置信度 100 份(全量审查)= 70×50 + 100×50 + 100×50 = 13,500 元
- 节省 73%,同时覆盖了所有高风险结果。
复合评分信号
单一信号不足以可靠预测准确率。置信度应该综合多个信号。
信号一:提取方法先验
提取方法本身的固有可靠性。
| 提取方法 | 先验置信度 | 理由 |
|---|
| 正则匹配 + 格式验证通过 | 0.90-0.95 | 格式正确的结构化数据,正则提取几乎不会出错 |
| LLM 结构化输出 | 0.75-0.85 | LLM 理解上下文后提取,有一定幻觉风险 |
| LLM 自由格式输出 | 0.60-0.75 | 输出格式不受约束,解析可能出错 |
| 回退/推断值 | 0.40-0.50 | 非直接提取,有猜测成分 |
这是一个先验值——反映方法的一般可靠性,不是这次提取的具体可靠性。
信号二:源文本匹配
提取的值是否能在源文本中找到?
- 精确字符串匹配:提取值 "12.5%" 在源文本中以 "12.5%" 形式出现 → 高信号。
- 近似匹配:提取值 "12.5%" 在源文本中以 "12.50%" 或 "一二点五" 形式出现 → 中信号。
- 无匹配:源文本中找不到 "12.5" 这个数字 → 低信号,可能是幻觉。
这个信号专门用于捕获幻觉。如果 LLM 声称"资本充足率为 12.5%",但 "12.5" 在源文档章节中根本不存在,这是一个严重的红旗。
信号三:历史准确率
该规则、该文档类型、该提取方法的历史正确率。
- 首轮迭代(无历史数据):仅使用方法先验。
- 经过质控审查后:计算实际准确率,纳入评分。
这是最有价值的长期信号。它反映的是真实表现,而非假设。随着质控数据积累,历史准确率应逐渐成为主导信号。
信号四:边缘案例距离
文档是否匹配已知的边缘案例模式?
- 精确匹配:文档触发了已知边缘案例 → 降低置信度(标准工作流可能不适用)。
- 近似匹配:文档与某个边缘案例有相似特征但未完全匹配 → 略微降低置信度。
- 无匹配:正常文档 → 不调整。
信号五:格式模式吻合度
抽取出来的值是否符合该规则隐含的"可正则化"格式?很多字段都有可识别的形状 —— 电话号、身份证号、日期、金额、监管编码 —— 都能用正则便宜地校验一遍,独立于 LLM 自己对结果的信心。
- 值匹配预期的格式模式:正信号。
- 值违反格式模式(比如电话字段里出现字母):强负信号,常是幻觉的指示。
- 字段没有适用的格式模式:中性。
这能抓住一种常见失败:LLM 正确定位了"值在哪里"但把格式弄错了(少一位数、漏国家码、返回了"详见附录"之类的占位词)。
信号六:统计离群
对数值类字段,这个值是否远离其他文档中同字段的典型范围?
- 在均值的 1 个标准差内:中性 / 轻微正向。
- 2–3 个标准差:轻微负向。
- 超出 3 个标准差,或落在领域上不可能的区间:强负信号 —— 经常是单位错误(元 vs. 万元)、小数点错位、或多/少一位的幻觉。
对金额、百分比、比率类字段尤其有用。参考区间从 QC 已确认的历史数据计算得出,周期性刷新即可。对分类字段,对应做法是"值不在已观测的值集合内" —— 见到新值就送审。
信号组合
把上面的信号合成单个置信度分数。常用形式是加权求和:
confidence = w_method × method_prior
+ w_source × source_match
+ w_history × historical_accuracy
+ w_corner × corner_case_adj
+ w_format × format_conformance
+ w_outlier × outlier_check
权重怎么定 是你自己针对每条规则、每个项目要做的判断。下面是几条定向原则,不是规定值:
- 历史准确率在有数据之后是最有预测力的信号 —— 跑了几轮 QC 后该加大权重。
- 方法先验和源文本匹配始终可用 —— 在历史数据还没有的早期,它们撑着场子。
- 格式吻合度和统计离群信号不依赖 LLM —— LLM 过度自信时它们还在工作,这正是你需要它们的时候。
- 边缘案例调整的权重通常较小,但一旦匹配到已知边缘案例就要果断生效。
历史数据还没攒起来时,把 w_history 的权重重新分配给其他信号。最合适本条规则、本套语料的权重会在校准循环里慢慢显形 —— 那是下一节描述的过程。
历史数据不可用时的处理
在系统运行初期,没有历史准确率数据。此时将 w3 的权重重新分配给其他信号:
# 初期(无历史数据)
confidence = 0.40 × method_prior + 0.40 × source_match + 0.20 × corner_case_adj
# 中期(有部分历史数据)
confidence = 0.30 × method_prior + 0.30 × source_match + 0.25 × historical_accuracy + 0.15 × corner_case_adj
# 成熟期(充足历史数据)
confidence = 0.25 × method_prior + 0.25 × source_match + 0.35 × historical_accuracy + 0.15 × corner_case_adj
随着历史数据积累,逐步过渡到完整权重。不要一开始就把权重给到没有数据支撑的信号上。
阈值分带
将连续的置信度分数映射为离散的审查行动:
| 分带 | 置信度范围 | 审查行动 | 典型比例 |
|---|
| 高置信度 | > 0.85(自动接受阈值) | 仅抽样审查(5-10% 随机抽样) | ~70% |
| 中置信度 | 0.60 - 0.85 | 按 MONITOR_FREQUENCY 频率抽样 | ~20% |
| 低置信度 | < 0.60(全量审查阈值) | 每条结果都审查 | ~10% |
起始阈值:自动接受 = 0.85,全量审查 = 0.60。这些是默认值,每条规则可以有不同的阈值。
阈值调整原则
- 高风险规则(如资本充足率、不良贷款率等核心监管指标):提高自动接受阈值到 0.90 或 0.95。宁可多审查,不可漏判。
- 低风险规则(如格式检查、日期格式):可降低自动接受阈值到 0.80。
- 初期保守:系统刚上线时,建议将自动接受阈值设为 0.90,全量审查阈值设为 0.70。随着校准数据积累再逐步放宽。
校准
校准是验证置信度分数是否真正预测准确率的过程。
校准方法
每次质控审查周期结束后:
- 分组:按置信度区间(如 0.0-0.2、0.2-0.4、0.4-0.6、0.6-0.8、0.8-1.0)对已审查结果分组。
- 统计:对每个区间,计算实际准确率(质控确认正确的比例)。
- 比较:将实际准确率与置信度区间中点进行对比。
区间 样本数 实际准确率 期望准确率 偏差
0.8-1.0 150 92% 90% +2% ✓ 校准良好
0.6-0.8 80 73% 70% +3% ✓ 校准良好
0.4-0.6 30 35% 50% -15% ✗ 置信度偏高
0.2-0.4 10 40% 30% +10% ✗ 置信度偏低
0.0-0.2 5 0% 10% -10% ✓ 样本太少
校准偏差的处理
- 置信度偏高(实际准确率低于置信度区间):系统过于乐观。增加 w2(源文本匹配)的权重,或降低方法先验值。
- 置信度偏低(实际准确率高于置信度区间):系统过于保守。可以适当提高先验值,但保守偏差的危害小于乐观偏差——多审查几条比漏掉错误好。
- 样本不足:某个区间的样本太少(<20),不具有统计意义。等待更多数据。
何时重新校准
- 首次质控审查完成后(建立初始校准基线)。
- 工作流版本变更后(新代码可能有不同的可靠性特征)。
- 调整置信度阈值后。
- 质控报告显示置信度与正确率不相关时。
集成点
置信度系统不是孤立运行的,它与核查流程的每个环节对接:
实体提取阶段
提取完成后立即分配初始置信度,基于方法先验和源文本匹配两个信号。
{
"value": 12.5,
"confidence": 0.92,
"confidence_signals": {
"method_prior": 0.95,
"source_match": 0.90
}
}
合规判定阶段
判定可能调整置信度:
- 确定性判定(Python 阈值比较)→ 不改变置信度。
- 语义判定(LLM)→ 根据 LLM 的判定确定性调整。
- 值在阈值边界附近 → 降低置信度(即使提取很可靠,边界值的判定本身不确定)。
质量控制阶段
质控使用置信度分带决定审查策略:
- 高置信度 → 低采样率。
- 低置信度 → 全量审查。
- 审查结果反馈到校准流程。
演进循环
演进循环监控置信度趋势:
- 平均置信度持续下降 → 可能有系统性退化。
- 某条规则的置信度突然下降 → 可能文档格式发生变化。
- 置信度与准确率的相关性下降 → 需要重新校准。
仪表板展示
在开发者用户的仪表板中展示:
- 置信度分布直方图(当前批次)。
- 各规则的平均置信度。
- 校准曲线(置信度 vs 实际准确率)。
- 低置信度结果列表(需要优先关注的项目)。
保持简单
不要在一开始就构建复杂的置信度系统。遵循渐进式复杂度:
第一阶段:方法先验
只用提取方法分配置信度:
跑质控,看这些分数是否预测准确率。如果预测得不错,先维持不变。
第二阶段:加入源文本匹配
当发现 LLM 幻觉是一个实际问题时(质控发现 LLM 提取的值在原文中找不到),加入源文本匹配信号。
第三阶段:加入历史准确率
积累了 3-5 轮质控数据后,有足够的样本计算历史准确率。此时纳入这个信号。
第四阶段:加入边缘案例距离
当边缘案例注册表有了一定规模后(>10 条活跃记录),加入边缘案例距离信号。
每一步都要验证:新信号的加入是否确实提高了置信度与准确率的相关性。如果没有,不要加。置信度系统应该挣得自己的复杂度,而不是一开始就复杂。