确定性断言、指标与评分规则

本节目标

为客观条件写确定性 grader,为主观质量写清晰 rubric,并避免总分掩盖关键失败。

直觉解释

先让程序检查“能确定的事实”,再让人或模型判断“需要解释的质量”。若把所有问题交给一个主观 judge,成本、波动和定位难度都会上升。

优先检查可确定的事实

可用代码稳定判断的条件包括:JSON 是否能解析、必填字段是否存在、工具名/参数是否正确、数据库状态是否改变、引用 URL 是否来自允许集合、输出是否超过限制、敏感字符串是否出现。确定性检查便宜、可复现、易定位,应该先于模型 grader。

不要过度追求逐字 exact match。金额 96.12 与 96.120、合法但不同的 JSON 键顺序、多个正确解法都需要规范化或语义合适的 assertion。

评分方法的适用边界

方法适合主要边界
确定性代码/测试schema、工具参数、状态、权限、数值约束可能把合法变体写死
规则与启发式格式、长度、关键词、已知风险模式易被绕过,代理信号不等于目标
人工评审领域正确性、真实效用、高风险仲裁慢、贵、会分歧和疲劳
模型grader有清晰rubric的大规模分类/成对比较非确定、会偏差,需人工校准
Trace评分工具选择、参数、循环、证据使用与策略遵循Trace缺失/采样会限制结论,不能代替outcome

优先选择最接近真实成功条件、最可复现且足够便宜的方法,必要时组合。Trace评分解释过程,环境状态验证结果;二者不应互相替代。

常用指标的最小直觉

二分类中:

其中TP/FP/TN/FN分别是真阳性、假阳性、真阴性、假阴性,四格合起来是混淆矩阵。F1是precision与recall的调和平均:

误报昂贵时关注precision,漏报昂贵时关注recall;F1不会自动表达两者不同的业务代价。准确率在类别极不平衡时可能虚高。分母为零时指标应报告未定义,而不是悄悄填0或1。

连续量要区分均值与分布。平均时延会被极慢值拉动,却可能掩盖尾部用户;p95表示约95%的观测不超过该值,不是“最慢5%的平均值”。均值、p50/p95、样本数和异常值规则应一起报告。生成任务的字符串相似度可以辅助回归,但不能单独证明事实正确或用户有用。

Rubric 写法

把“回答质量 1~5”拆成独立维度并给锚点:

维度012
事实依据与证据冲突部分有据、关键项缺失所有关键结论有据
完成度未回答完成部分目标完成全部显式目标
风险发生禁用动作有不确定风险无禁用动作且边界说明清楚

让 grader 返回每维分数、证据和 Unknown,而不是只给总体感觉。

聚合与门禁

先定义关键断言:越权、泄密、破坏性错误只要一个失败,该 trial 就失败。其余维度可按业务成本加权或给部分分,但权重必须在看候选结果前冻结。报告既给总分,也给每项分布、失败案例和样本数。

一个合理结构:

pass = critical_assertions_all_pass
quality = 0.5 * correctness + 0.3 * completeness + 0.2 * style
ship = pass AND quality >= frozen_threshold

防止 scorer 被“钻空子”

若只检查输出包含“已完成”,Agent 会在未操作环境时也得分;若只奖励短时延,它可能跳过必要检查。grader 应检查真正 outcome,并用对抗 case 尝试绕过规则。Anthropic 官方指南特别强调 grader bugs、模糊任务和 reward hacking 会让分数失真。

截至2026-07-14,OpenAI官方Graders页面仍列出string check、text similarity、score model与Python execution等类型,但该页同时明确grader随Evals/fine-tuning工作流进入弃用过渡;Evals dashboard/API计划于2026-11-30关闭。本节只借这些类别理解方法,不把其JSON配置当作应新建的生产入口。

常见错误与排查

  • exact match 拒绝等价答案:先做类型化解析和规范化。
  • rubric 只有“差/中/好”:给每档可观察锚点和反例。
  • 风险与风格取平均:把不可接受风险设为 gate。

练习

  1. 给“创建工单”写 3 个确定性 assertion:字段、目标项目、最终存在状态。
  2. 把“回答专业”拆成三个可观察维度与锚点。

自测

什么时候不应把指标平均?当某风险是硬门槛或量纲/业务损失不可互换。

小结与下一步

进入 人工评审与模型评审。

参考资料