评估集拥挤问题:为什么更大的测试套件捕获的回归反而更少
你的 AI 评估测试集(eval suite)有 800 个测试用例。你又增加了 200 个。现在你的模型在评估中得分 94%,你满怀信心地发布了。三天后,一名用户发现了一个回归(regression)问题,而你那 1000 个测试用例中没有一个捕获到它。
这不是运气不好 —— 而是结构性问题。回归问题的存在恰恰是因为你扩充测试集的方式,而不是尽管你扩充了测试集才存在。当出现故障时增加更多评估指标(evals)的本能在理论上是正确的,但在实践中却适得其反。更多的测试并不自动意味着对重要事项的覆盖率更高。它们意味着对那些易于测试的事项有了更好的覆盖,而这完全是两回事。
评估测试集如何偏离生产环境的现实
失效模式始于激励机制 。当一个 AI 功能发布并出现 Bug 时,最直接的反应是增加一个覆盖该特定输入的测试用例。当增加新能力时,你会为常规路径(happy path)和少数边缘案例(edge cases)编写评估。六个月后,测试集增长到数百个案例 —— 每个案例的加入在局部看都是合理的,但整体上却偏离了生产环境中真正重要的失效分布。
三种力量驱动了这种偏离:
自动化引力 (Automation gravity)。 能够自动评分的测试 —— 如精确匹配比较、代码执行结果、Schema 验证 —— 运行和维护成本都很低。而需要人工判断质量、语气或有用性的测试则非常昂贵。随着时间的推移,团队会下意识地针对可自动化的内容进行优化。评估集里充满了容易评分的案例,而不是难以做对的案例。
边缘案例堆积 (Edge case accumulation)。 工程师受过的训练是进行对抗性思考。他们寻找极端情况、边界条件和失效模式,然后为其编写测试。这些案例虽然真实但很罕见。它们在评估集中堆积,而最常见的用户路径 —— 尽管更可预测、测试起来不那么令人兴奋 —— 在每个失效模式下分配到的案例反而较少。
覆盖率剧场 (Coverage theater)。 评估测试集通常以数量来汇报。一个拥有 2000 个评估用例的团队听起来比只有 200 个的团队更严谨。这产生了一种压力,使人们将扩大测试集规模作为严谨性的代名词,而不考虑新案例是否真正能预测生产环境中的失败。
结果是,当你增加用例时,评估测试集在每一项指标上都在提升,但它预测发布是否会导致用户可见的回归的能力却停滞不前甚至下降。
