将LLM评判者校准至κ 0.80:视觉检查实战方法

要让 LLM 评判者用于付款决策,必须先与人类校准到 κ≥0.80 并持续监控。
文章介绍 AutoKon 如何在建筑付款流程中用 Claude Opus Vision 生成现场照片描述,再用独立的 LLM-as-judge 流水线评估描述的接地性与完整性,并要求评判者与人工复审的一致性达到 κ≥0.80 才能用于付款。作者强调先定义评分标准、再写评判提示词,质量拆分为接地性与完整性两个维度分别评分,初期优先使用二元标签,并把图像交给评判者。校准依赖按覆盖度采样、过采样失败案例、双人独立标注并测量人与人的一致性作为上限。文章用代码示例说明准确率在类别不平衡时会误导,懒惰评判者准确率 90% 但 kappa 为零。校准循环强调一次只改一个变量、留出集确认、冻结评判者并在 CI 中监控漂移,还列出提示词过拟合、冗长偏见、共享盲区等常见陷阱。
在建筑平台 AutoKon 上,承包商的付款只有在现场照片通过 AI 检查后才会释放。Claude Opus Vision 配合 Pinecone 检索上下文来描述每张照片的内容,随后一个独立的 LLM-as-judge 流水线在 Arize AX 中对这些描述进行打分,评估其接地性(groundedness)和完整性(completeness)。评判者必须在与人工复审的一致性达到 κ ≥ 0.80 后,其结果才能用于付款决策。整个评估体系存放在版本控制的仓库中,通过 phoenix-evals 和 GitHub Actions 在 CI 中运行。
本文作者、AutoKon 创始 CTO 兼唯一工程师 Faishal Wahiduddin 明确说明,出于隐私与商业考虑,他不会分享数据集规模、提示词原文、标签数量或逐轮分数。下文描述的是他推荐的通用的方法论,读者可以将其迁移到自己的视觉任务中。

为什么评判者必须校准
生成模型负责写描述,评判模型负责给描述打分。这样做的价值在于,你可以对每一个输出评分,而不是只靠人工抽检。但问题也很直接:评判者本身也是一个模型,在与人类对比之前,你根本不知道它有多好。
校准的含义是:测量评判者与认真的人类复审者之间的一致率,调整它直到一致率足够高,然后把它维持在那个水平。跳过这一步,仪表盘上满满当当的评判分数就是一堆没人验证过的数字。
先定义评分标准,再写评判提示词
大部分工作量其实在这一步。如果两个人类都无法就“好”的定义达成一致,任何评判者都做不到。
对于照片描述,作者将质量拆分为两个独立维度:
- 接地性(Groundedness):描述中的每一项主张是否都能在照片中看到?如果描述说“东墙抹灰完成”,但东墙根本不在画面里,即使这个主张碰巧为真,也应该判定为失败。
- 完整性(Completeness):描述是否覆盖了当前施工阶段真正重要的项目?一个接地但含糊的描述(如“可以看到一面墙”)对于付款决策来说仍然是无效的。
有助于提升一致性的评分标准习惯:
- 初期优先使用二元标签。通过/不通过比 1 到 5 分的量表更容易让人类达成一致。只有当二元标签确实丢失了必要信息时,才转向序数量表。
- 每个维度使用独立的评判提示词。让一个提示词同时给两个维度打分,会导致一个维度的强势分数渗入另一个维度。
- 把每条标准写成一个仅凭图像和描述就能回答的问题。如果复审者需要外部知识,评判者也需要,所以要么把知识放进提示词,要么去掉这条标准。
- 包含通过与失败的示例,尤其是边界案例。边界案例正是评分者分歧最大的地方。
- 把图像给评判者。纯文本评判者给视觉模型输出打分时,只能判断文本听起来是否合理;视觉评判者才能将文本与像素进行比对。
构建人工标注集
通用方法如下:
- 按覆盖度采样。从不同光照条件、角度、施工阶段、模糊照片,以及生成器已知表现不佳的场景中采样。
- 过采样失败案例。如果 95% 的描述都没问题,随机采样能得到的失败案例极少,kappa 会变得不稳定。
- 让两个人独立标注,使用书面评分标准,互相看不到对方的标签。
- 先测量人与人之间的一致性。这个数字是你的实际上限。如果两个人之间只能达到 0.70,那么评判者对着其中任何一个人达到 0.80,更可能是偶然而非胜利,说明评分标准本身需要改进。
- 将分歧裁决为单一金标签,并在分歧揭示歧义时更新评分标准的措辞。
- 将数据集拆分为校准集和留出集。校准集用于迭代,留出集只在确认时使用。
为什么用 kappa 而不是准确率
准确率会奖励评判者在容易的多数类上达成一致。Cohen's kappa 则校正了随机一致的可能性:
κ = (p_o - p_e) / (1 - p_e)
其中 p_o 是观察到的致率,p_e 是如果两个评分者按照各自的标签频率随机标注时预期的一致率。对于两个评分者和分类标签,Cohen's kappa 是标准选择。对于序数量表,加权 kappa 对接近命中给予部分分数。
在常用的 Landis 和 Koch 量表上,0.61 到 0.80 属于“实质性一致”,0.81 到 1.00 属于“几乎完美”,因此 0.80 的门槛正好位于这个边界上。
作者给出了一个无依赖的小实现,用来展示为什么准确率会误导:
def cohens_kappa(rater_a, rater_b):
"""Cohen's kappa for two raters labeling the same items."""
if len(rater_a) != len(rater_b) or not rater_a:
raise ValueError("need two equal-length, non-empty label lists")
n = len(rater_a)
labels = set(rater_a) | set(rater_b)
p_o = sum(a == b for a, b in zip(rater_a, rater_b)) / n
p_e = sum((rater_a.count(k) / n) * (rater_b.count(k) / n) for k in labels)
if p_e == 1:
return float("nan")
return (p_o - p_e) / (1 - p_e)
human = ["pass"] * 18 + ["fail"] * 2
lazy_judge = ["pass"] * 20
better_judge = ["pass"] * 17 + ["fail"] + ["fail"] * 2
for name, judge in [("lazy", lazy_judge), ("better", better_judge)]:
accuracy = sum(h == j for h, j in zip(human, judge)) / len(human)
print(f"{name}: accuracy={accuracy:.2f} kappa={cohens_kappa(human, judge):.2f}")
输出:
lazy: accuracy=0.90 kappa=0.00
better: accuracy=0.95 kappa=0.77
懒惰的评判者全部判通过,准确率仍有 90%,kappa 却为零。更好的评判者抓住了两个真实失败,犯了一个误拒,准确率 95%,但仍未达到 0.80。在类别极不平衡的数据上,漂亮的准确率数字和诚实的 kappa 之间的差距,正是必须使用 kappa 的全部理由。
LLM-as-Judge 指的是用一个大语言模型充当自动评测者,对另一个模型(这里是视觉描述模型)的输出打分或判定通过与否,从而替代或减少昂贵的人工抽检。它的核心优势是可在每次推理时同步评分,但风险在于评分标准只存在于提示词中,模型可能系统性地偏向某些表面特征。因此业界共识是:评判模型本身必须先经过校准,与人类标签达成可量化的一致性,其分数才具备决策价值。
κ ≥ 0.80 中的 κ 即 Cohen's kappa 系数,取值通常在 0 到 1 之间,0 表示与随机猜测无异,1 表示完全一致。设定 0.80 门槛的原因是:校准集上达到 0.80 意味着评判者与人工复审在扣除偶然一致后仍有很高稳定性,此时其分数用于付款触发等业务动作时可容忍的误判风险较低。门槛本身不是绝对标准,应结合业务对误拒与误放的容忍度调整,但一旦选定,就应在留出集上验证而非仅在校准集上达成。
Arize AX 与 Pinecone 在本流程中承担可观测性与检索支撑。Pinecone 是向量数据库,存放历史照片描述与上下文,供 Claude Opus Vision 在描述新照片时检索相似案例,从而让描述更贴合项目语境;Arize AX 则是 LLM 可观测与评估平台,用于记录每次评判调用的输入输出、运行 LLM-as-judge 流水线并追踪指标漂移。二者结合使整个评测过程可回溯、可对比版本,满足“把评判者当作代码来管理”的要求。
校准循环
- 在校准集上运行评判者。
- 按维度分别计算 kappa。合并分数会掩盖哪个维度薄弱。
- 阅读每一个分歧。构建混淆矩阵,查看实际照片。评判者对模糊图片是否过于严格?对长描述是否过于宽松?
- 一次只改一个变量:评分标准措辞、示例、关于不确定情况的指令,或评判模型。
- 重新运行并重新评分。
- 校准集通过 0.80 后,在留出集上确认。如果留出集明显下降,说明你把提示词调到了眼前那些例子上。
- 冻结评判者:将提示词、模型版本和评分标准固定在版本控制中,并在 CI 中设置当其中任何一项变化时,自动重新运行一致性检查。
常见陷阱
- 提示词过拟合校准集。留出集存在的意义就是防范这一点。
- 共享盲区。如果评判者与生成器看到完全相同的上下文,它们可能以相同方式失败。给评判者原始图像并要求其对照检查,可以减少这种情况。
- 冗长偏见。评判者倾向于将更长的描述评为更完整。在少样本示例中加入简短但完整的例子,以及冗长但不完整的例子。
- 静默漂移。模型版本变更或微小的提示词编辑都可能改变一致性。要把评判者当作代码来管理。
- 失败率过低。失败案例极少时,kappa 在运行之间波动很大。过采样失败案例,并报告每个分数背后的案例数量。
- 人类的标签漂移。复审者的标准会随时间变化。刷新标签时,重新测量人与人之间的一致性。
- 将 kappa 视为唯一信号。kappa 衡量的是与人的一致性,因此仍需让领域专家参与评分标准的制定。
冗长偏见(verbosity bias) 是 LLM-as-Judge 中反复被记录的失效模式:评分模型倾向于给更长的输出更高评价,即使长文本包含更多无关或重复内容。在视觉描述任务中,这会让评判者误把堆砌细节的描述判为更完整,从而奖励“啰嗦”而非“准确”。缓解手段包括在少样本示例中显式放入短而完整的正例,以及长而遗漏关键项的反例,让模型学会将长度与完整性解耦。
共享盲区(shared blind spots) 指评判者与生成器如果接收相同的上下文或同源信息,可能以相同方式犯错,此时一致性虽高却不代表正确。视觉任务中尤其常见:生成器漏看某处细节,评判者若只读文本也可能同样漏判。作者的对策是把原始图像直接交给评判者,要求其把文本主张与像素逐一比对,这样评判者的错误模式就与生成器解耦,才能发现生成器的真实遗漏。
评判者在流程中的位置
在 AutoKon,AI 检查只是五角色审批流程(现场工人、现场经理、项目经理、财务、业主)的一个输入,付款前还有两轮照片证据:Opname 和 BASTP。校准后的评判者让 AI 的描述变得可度量。但最终批准付款的仍然是有责任的人,作者表示任何涉及资金的系统他都会这样设计。
相关推荐

零成本搭建AI超级员工系统:智能体自动工作流全解析
深度拆解B站演示的AI超级员工系统:Agent智能体编排、数字人口播、地图与企业获客、24小时智能客服及法务模块全覆盖。分析零成本开户背后的商业逻辑与合规风险,帮助创业者判断这套AI数字员工系统的真实投产比。

Chatbot与AI Agent的本质区别:从对话到执行的跨越
Chatbot和AI Agent有什么区别?本文基于Learn Tech频道的MCP系列讲解,用订机票、笔记摘要等实例说明:Chatbot只给答案,Agent通过思考-行动-观察循环真正完成任务,并拆解模型、工具、记忆、目标四大部件及MCP的桥梁作用,同时讨论Agent的适用边界与权限风险。

免费GitHub仓库:342小时AI课程,从数学到MCP服务器
一个免费GitHub仓库提供342小时AI课程,包含523节课、20个阶段,覆盖数学基础到Agent构建和MCP服务器。支持目标驱动学习,每节课产出可留存的prompt、skill或agent,已有近10万人开始学习。