我先构造了一组确定性最小实验。1000 条回归样本中,关键切片只有 20 条。基线版本总体通过 910 条,其中关键切片通过 16/20,普通样本通过 894/980;候选版本总体仍通过 910 条,但关键切片只剩 4/20,普通样本则升到 906/980。关键切片少通过的 12 条,恰好被普通样本多通过的 12 条抵消。
于是两版总体通过率都是 91.0%,可关键切片已经从 80.0% 跌到 20.0%。若流水线只有“总体不低于 90%”这一条规则,候选版本会显示 passed。数据来源仅限本地构造脚本;它不对应生产事故,也不能作为厂商 benchmark。脚本每次运行都会得到同一结果。

总分保持不动,不等于每一类用户都被保护。
平均值没有撒谎,发布对象却错了
总体通过率按样本数量加权。980 条普通样本稍有改善,当然可以在算术上抵消 20 条关键样本的断崖式退化;平均值忠实回答了“全部样本合起来通过多少”,却没有回答“代价最高的失败是否仍在承诺范围内”。
这两个问题不能混用。闲聊回答不够自然,用户也许重问一次;多币种退款、管理员权限或不可逆工具调用一旦出错,补救成本可能高几个数量级。流量占比描述的是出现频率,不是失败价格。允许普通样本为关键切片补分,等于用多数人的低风险进步,为少数人的高风险失败买单。
因此,总分适合描述版本的大致方向,不适合单独签发上线许可。平均值没有撒谎,错误发生在发布规则把流量权重误当成风险权重。
发布决策必须跟着失败代价走,不能跟着流量权重走。
发布门应跟着失败代价走
一套三道门已经足够。第一道是总体底线,防止系统普遍退化;第二道是关键切片绝对门,保证高风险任务至少维持可接受水平;第三道是相对退化门,即使候选仍高于绝对值,只要相对基线跌幅超过容忍范围,也要阻断发布。
三道门全部满足,结果才是 passed;任一道失败,结果就是 blocked。在进入判断前还要核对关键切片的样本量。样本不足不意味着风险不存在,只表示无法作出可靠结论,此时应返回 insufficient_evidence,补充定向样本或转人工复核,而不是把缺少证据涂成绿灯。

发布门需要三种答案:通过、阻断,以及尚无足够证据。
本次实验把关键切片绝对门设为 70%,相对退化最多 10 个百分点,最低样本量设为 20。候选版本在绝对门处就被阻断。这里的数值只是实验参数,不能原样复制进生产;真正需要复用的是决策结构。
切片应成为风险合同
关键切片应按失败代价定义,而不是按用户多少定义。影响范围、可逆性和发现延迟,通常比流量更接近真实风险。团队可以先挑一个最不允许失守的任务,把人群边界、基线、样本规则和阈值随评测版本保存;定义发生变化,就建立新的可比基线。
切片也不应无限增加。它的目的在于把业务承诺变成发布条件;让仪表盘长满格子没有意义。每次事故可以补充同一失败机制的相邻样本,但不能只把那一道错题塞回测试集,假装系统已经学会了整类问题。
这组构造实验最终只证明一件事:91% 可以完全正确,却不足以决定能否发布。可靠的回归门不问“多数样本能否把总分补回来”,而问“失败代价最高的用户,是否仍然处在我们承诺的边界内”。证据不够就继续取证,关键切片失守就阻断;普通样本的进步,不能替关键用户的失败买单。
