AI Agent 实战避坑 03|AI 的"我修好了"不能信:置信度校准入门

让 Developer Agent 修 100 个 bug。每次修完它都会说一句结论,分三档:

  • “已修复,问题解决了。”
  • “应该修好了,建议验证一下。”
  • “我做了修改,但不确定是否完全解决。”

直觉上你会觉得:第一档最靠谱,第三档最不靠谱。但实际跑完 Reviewer 验证后,数据长这样:

AI 自我评估           总次数    实际通过    通过率
──────────────        ──────    ────────    ──────
"已修复"              62        38          61%
"应该修好了"          27        19          70%
"不确定"              11        8           73%

发现了吗?最谦虚的那组反而通过率最高。

AI 的自信程度和它的正确率之间,几乎没有正相关关系。这不是个别模型的问题,而是当前 LLM 的结构性缺陷。


为什么 AI 的自信不等于准确

三个根因:

1. 模型在生成时看不到真实世界反馈

当 AI 写完代码说"已修复"时,它既没有跑测试,也没有编译代码,更没有在真实环境验证。它对"修好了没有"的判断,纯粹基于文本层面的推理:“我改了相关的代码行,改动看起来合理,所以应该修好了。”

这相当于一个外科医生闭着眼睛做完手术,然后根据"手感不错"来判断手术是否成功。

2. RLHF 训练奖励自信

在训练阶段,标注者倾向于给确定性的回答打高分。"已修复"听起来比"我不确定"更 helpful、更 professional。于是模型学到:表达确定 → 高分表达不确定 → 低分

训练时的隐含 reward:
  "我已经完成了修复" → 标注者觉得 helpful → 高分
  "我不太确定改对没有" → 标注者觉得不可靠 → 低分

模型学到的策略:
  不管修没修对,都说"已修复" → 期望 reward 最大化

3. 模型不会区分"我知道"和"我觉得我知道"

人在不确定时会有"元认知"——知道自己不知道。当前的 LLM 没有可靠的元认知能力。它无法准确评估自己输出的正确概率。


置信度校准:让 AI 的"把握"变得可信

既然 AI 的自我评估不可靠,我们需要从外部建立一套置信度体系。

方法一:基于检查命令的硬置信度

不问 AI “你确定吗”,用命令输出做客观判定:

confidence_checks = {
    "syntax":    "python -m py_compile {file}",      # 能编译 = +20%
    "import":    "python -c 'import {module}'",       # 能导入 = +20%
    "test":      "pytest {test_file} -x",             # 测试过 = +30%
    "no_stub":   "grep -c 'pass$\\|TODO' {file}",    # 无空壳 = +15%
    "type":      "mypy {file} --no-error-summary",    # 类型对 = +15%
}

def calculate_confidence(file_path, test_path):
    score = 0
    for name, cmd in confidence_checks.items():
        exit_code = run(cmd.format(file=file_path, ...))
        if exit_code == 0:
            score += weights[name]
    return score  # 0-100 的硬置信度

这种置信度不依赖 AI 的自我评估,完全基于可观测的事实。一个文件能编译、能导入、测试通过、没有空壳、类型检查过——它"被修好了"的概率确实高于一个只能编译的文件。

方法二:基于 Eval 历史的统计置信度

如果你的系统跑了足够多的 eval,可以建立统计模型:

历史数据告诉你:
  当 Agent 修改 < 5 行时,一次通过率 = 85%
  当 Agent 修改 5-20 行时,一次通过率 = 62%
  当 Agent 修改 > 20 行时,一次通过率 = 34%
  当任务涉及并发/异步时,一次通过率 = 28%
  当任务是纯逻辑 bug 时,一次通过率 = 76%

基于这些历史分布,你可以在 Agent 完成任务时,根据任务特征自动标注预期置信度——不需要问 Agent 本身。

方法三:多路投票

同一个任务让 N 个 Agent(或同一个 Agent 跑 N 次)独立完成,看结果一致性:

3 次运行结果:
  Run 1: 修改了 line 45, 52
  Run 2: 修改了 line 45, 52
  Run 3: 修改了 line 45, 52, 78

投票结果:
  line 45, 52 的修改 → 3/3 一致 → 高置信
  line 78 的修改 → 1/3 → 低置信,需要人工审查

多路投票的成本是 N 倍 token,但在高风险场景(比如生产环境的配置变更评估),这个成本完全值得。


校准实战:配置表风险评估系统

举一个真实场景。配置表风险评估系统需要判断一次配置变更是"高风险"还是"低风险"。AI 给出判断后,我们怎么知道这个判断靠不靠谱?

第一版:让 AI 自己打分

Prompt: "评估以下配置变更的风险等级(高/中/低),并给出你的置信度(0-100%)。"

结果:
  AI 标"低风险, 95%置信" → 实际引发线上事故 × 2
  AI 标"高风险, 90%置信" → 实际完全无害 × 8
  
  结论:AI 的自标置信度没有参考价值

第二版:基于规则的客观置信度

def assess_config_risk(change):
    risk_signals = {
        "touches_money_field":  change.affects(["price", "cost", "reward"]),
        "changes_threshold":    change.modifies_numeric_threshold(),
        "affects_all_users":    change.scope == "global",
        "has_rollback_plan":    change.rollback_steps is not None,
        "similar_change_safe":  history.similar_changes_were_safe(change),
        "change_size_small":    change.diff_lines < 5,
    }
    
    risk_score = sum(
        weight * signal 
        for signal, weight in risk_signals.items()
    )
    
    return {
        "risk_level": "high" if risk_score > 0.7 else "medium" if risk_score > 0.4 else "low",
        "confidence_basis": risk_signals,  # 透明展示判断依据
    }

关键区别:第二版的"置信度"不是 AI 说的,而是基于可枚举的客观信号计算的。用户看到的不是"AI 觉得风险低",而是"这次变更不涉及金额字段、影响范围是局部、历史类似变更都是安全的——因此风险低"。

效果对比:

                     误报率    漏报率    用户信任度
第一版(AI自评)     35%       12%      "不太敢信"
第二版(规则信号)   15%       8%       "至少知道它为什么这么判断"

置信度的 UX 设计

有了可靠的置信度,还需要设计用户怎么看到它。

坏的展示方式:

⚠️ 风险评估:低风险(置信度 87%)

用户心想:“87% 是高还是低?我该信吗?”

好的展示方式:

⚠️ 风险评估:低风险

判断依据:
  ✅ 不涉及金额相关字段
  ✅ 影响范围:仅 activity_config 表
  ✅ 历史 12 次类似变更均无事故
  ⚠️ 变更行数 8 行(中等)
  
建议:可直接发布,建议灰度 10% 观察 30 分钟

把黑盒的"87%"拆解成用户能理解的信号列表。用户不需要相信一个数字,他们需要看到判断的理由,然后自己决定是否认同。


什么时候可以信 AI 的判断

也不是说 AI 的输出永远不能信。信任的前提是你能回答三个问题:

┌───────────────────────────────────────────────────┐
│ 信任三问:                                         │
│                                                   │
│ 1. 这个判断有独立验证手段吗?                       │
│    有 → 验证后再信                                 │
│    没有 → 当参考,不当决策依据                      │
│                                                   │
│ 2. 历史上同类判断的准确率是多少?                    │
│    > 90% → 可以半自动(AI判断 + 人抽检)            │
│    70-90% → 必须人工确认                           │
│    < 70% → 只能当线索,不能当结论                   │
│                                                   │
│ 3. 判断错误的代价是什么?                           │
│    低(格式问题)→ 可以容忍一定误差                  │
│    中(代码风格)→ 需要抽检                         │
│    高(安全/资金)→ 必须独立验证                     │
└───────────────────────────────────────────────────┘

不要让做手术的人自己判断手术成功了没有。AI 的输出需要外部验证体系——它的自信不是你的置信。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐