Eval 差异分析作为分支保护:交付分数变化,而非分数下限
我曾合作过的一个团队拥有一套看起来很清爽的评估门禁(eval gate):每个 prompt PR 都必须在黄金测试集(golden set)上获得 0.85 以上的评分,否则合并按钮就会保持灰色。他们为此感到自豪。但在六周后,平均质量已从 0.93 悄然滑落至 0.87 —— 每个 PR 都通过了门槛,每个 PR 都成功上线,而且没有任何一个改动需要为这种质量回退负责,因为它们都没有违反规则。这个门槛是根据上个季度的质量快照设定的,而不是根据上周的质量。
这就是绝对阈值评估门禁的失效模式:一个将评分从 0.92 降低到 0.86 的 PR 可以绿灯通过,而一个将评分从 0.80 提升到 0.84 的 PR 却会被挡在门外。团队学到的是“只要过线就能发布” —— 这是一个关于质量的故事。但你真正需要的信号是“如果这个改动在重要的切片(slices)上没有发生回退就发布” —— 这是一个关于回退检测的故事。
测试覆盖率工具在十年前就解决了这个问题。它们报告相对于父提交(parent commit)的差异,并将其细化到每个文件。评估门禁还没赶上这个进度。
得分底线是过时的门禁
得分底线通常在 AI 功能上线冲刺期间被写入 CI 流水线一次,然后大约在十分钟后就停止重新校准了。当模型处于 0.88 时合理的数字,在模型达到 0.94 时看起来依然合理 —— 但事实并非如此,因为 0.85 的底线现在允许 9 个点的质量回退在悄无声息中发生。
更深层的问题在于团队从门禁中学到了什么。底线教育的是“这个 PR 质量合格了吗”这样一个“是/否”问题。而差异(diff)教育的是“这个 PR 是否改变了质量,在哪个切片上,向哪个方向改变”。前者的框架是为“过线”而优化;后者的框架是为“不让情况变糟”而优化。这是不同的文化默认设置,并会体现在代码审查中。审查者不再询问“得分下降了吗?”,因为绿色的勾号已经替他们回答了 —— 即使这个勾号仅仅确认了“仍然高于 0.85”。
你有时可以通过在每次发布后提高底线、使其向当前得分靠拢来修补这个问题。但这比听起来更糟糕。现在,你已经将门槛与上周评估运行的噪声底线耦合在了一起。一旦某个 PR 触及样本量(N)较小且方差较高的切片,它就会产生误报性质的失败,团队为了解锁会降低阈值,于是你教会了所有人:评估门禁是可以讨价还价的筹码,而不是可以信任的准则。
