繁

从性能工程测验的迭代案例理解评估设计:怎样确定能力目标、识别测试饱和,区分难度与新颖性,并在真实任务、有效区分和完成成本之间取舍。

Evaluation Design:模型变强后,测试怎样保持区分度?
24 分钟
4800 字

上一篇讨论了怎样从执行轨迹定位行为问题。但即使记录完整、评分准确,还有一个前提需要检查:这组题目是否仍然能区分我们关心的能力?

当不同方案都轻松通过,继续比较通过率很难看出改进;把题目换得更难,也可能只是让所有方案一起失败。评估设计要解决的,不只是题目难不难,而是成绩差异能不能支持我们想作出的判断。

Anthropic 的《Designing AI-resistant technical evaluations》记录了一项性能工程招聘测验的迭代。它是一个具体的设计案例:当允许 AI 辅助,而模型不断变强,原先有用的题目怎样逐渐失去筛选信号,又怎样重新调整。

本文从三个层次整理这件事:

  • 测量目标: 先确定要区分哪种能力,怎样理解一份有信息量的成绩。
  • 区分度变化: 模型能力、任务熟悉度、时间与工具条件,怎样影响题目的作用。
  • 任务重设计: 怎样保留多条改进路径,并权衡真实工作、新颖挑战和完成成本。

下面以“在保持结果正确的前提下,优化一段模拟机器上的程序”为贯穿场景。原文案例用于说明背景,自拟的分数与任务变体用于解释设计方法,不作为真实实验结果。

一、评估设计先要明确什么h2

一道题可以有明确输入、正确答案和可靠评分,却仍然不适合当前的评估目标。设计之前,先确定想凭它区分什么,再决定提供怎样的任务和条件。

1. 能力目标:把要作出的判断写清楚h3

“测试编程能力”范围太大。读懂陌生系统、识别性能瓶颈、设计正确的优化、建立调试工具,以及验证修改结果,都是不同能力。

对于性能优化任务,可以把目标进一步写成:

在规定时间与工具条件下,理解程序和机器约束,定位主要开销,通过有依据的修改降低执行成本,并保持输出正确。

这样,成绩才有明确解释。只会套一个熟悉技巧,与能够根据新约束调整方法,不一定应当得到同样的评价;直接修改校验逻辑,更不属于目标能力。

原文采用模拟加速器,而不是要求候选人预先掌握某款真实硬件。这种设计的意义,是用可提供的规则承载相关能力,不把特定背景知识变成不必要的入口门槛。

由这个目标出发,可以继续检查:任务是否给了足够说明,评分有没有关注正确性,是否留出了定位、修改和验证的时间。它们不是题目写完之后的附加项,而是测量目标的组成部分。

2. Signal:成绩差异怎样对应目标能力h3

这里的 Signal,可以理解为测试提供的有效判断依据。不是分数分布越散越好,而是差异应当尽量对应要考察的能力,而不是偶然猜中、隐藏条件或无关经验。

考虑一个自拟例子:三份方案处理相同输入,使用相同模拟规则。评分先检查输出正确,再统计执行周期,低于 8000 个周期算达标。

方案输出正确执行周期达标结果
A是7900通过
B是4100通过
C否1000不通过

A、B 在二元结果上没有区别,但性能仍然相差明显。若目标只是确认“能否达到基础要求”,通过与否就有用;若目标是比较优化能力,还需要保留周期数和相应方案,而不能只留下一个通过标签。

C 虽然周期最低,却没有完成正确计算。性能成绩必须建立在正确性约束上,否则评分会奖励做错事情但做得很快的程序。

这也说明,同一个成绩是否有用,取决于它要支持什么判断。二元评分不是天然粗糙,连续分数也不是天然高信号;关键在于指标有没有保留目标所需的差异。

二、测试的区分度为什么会变化h2

任务不会因为代码没有改动,就永远测量同样的东西。被测对象的能力、可使用的工具和运行条件发生变化,题目原先提供的区分也可能随之改变。

3. Saturation:已有标准怎样失去改进空间h3

在 Agent 能力评估中,Saturation 常表现为大量任务已经通过,新的提升难以在现有指标上体现。原文中的情况更具体:在规定时间内,模型逐渐达到强候选人的表现,原题越来越难区分它想识别的人类贡献。

这不等于所有优化空间都已穷尽,也不等于原题从此毫无用途。它失去的是对当前目标群体、在当前条件下的区分能力。

把原文的几次调整放在一起,可以看到目标如何移动:

阶段调整方向暴露的设计问题
早期性能题从串行实现逐步挖掘并行与调度空间如何让不同水平都有发挥机会
加深后的性能题从更高起点继续优化更强模型也能继续推进,难度增加没有长期保住信号
后来的受限指令谜题增加不熟悉的约束和独立子问题取得新信号,同时付出工作真实性的代价

对于已有 Agent 评估,也可以作类似区分:一组稳定通过的任务仍能防止回归,但未必还能测出能力提升。应当保留它的已有用途,再为新的目标补充任务,而不是为了让分数重新变低就丢掉全部旧题。

4. Difficulty 与 Novelty:难题和陌生题测量什么h3

“人觉得很难”不代表“模型也缺少可用经验”。一道涉及复杂硬件优化的题,可能确实要求扎实知识,但其中常见的优化手法也可能被模型很好地掌握。

原文尝试过更棘手的数据转置问题。这个尝试提醒我关注的,是难度来源:复杂约束究竟要求重新分析,还是主要调用已有的成熟技巧?不能只根据题目的技术名词或代码规模判断它有没有区分度。

可以用两种自拟任务变体理解:

  • 增加熟悉工作的规模: 把数组变大、分支变多,核心仍然是常见的向量化与调度。
  • 改变关键约束: 提供一套很小但不熟悉的指令规则,要求根据这些规则重新设计状态表达与执行顺序。

前者可能需要更多工程工作,后者可能更关注在新规则下建模和推理。两者都可能有价值,但考察的侧重点不同。

新颖性也不是质量保证。规则故意含糊、依赖冷僻知识,或者只剩一个偶然灵感,并不会因此成为好题。需要判断的是:任务是否把目标能力放在了一个仍有解释力的位置。

如果目标只是优化结果,合法的熟悉技巧也应按相同标准评分。要进一步考察在新约束下的分析能力,应当通过任务变化取得证据,而不是事后因为解法“太熟悉”就扣分。

5. 时间与 AI 辅助:明确测的是谁的表现h3

原文的测验允许 AI 辅助。这意味着要识别的不是隔离工具后的人类表现,而是候选人在这种工作方式下,是否还能作出有价值的判断。

当模型能够很快产出不错的方案,候选人可能需要先花时间理解它,再决定是否调整。单纯提高分数门槛,不一定能识别这种贡献,也可能让“把任务交给模型等待”成为更有利的策略。

对于自己的测试,可以先区分三种对象:

  • 模型或 Agent 本身: 固定任务、工具与预算,比较自主执行的结果。
  • 人使用 AI: 看是否能发现问题、指导修改并验证产物。
  • 完整协作系统: 比较人在何时介入、工具怎样提供反馈,以及整体结果。

这三种目标不应该共用一个模糊的“技术能力”解释。若允许人给额外提示,也需要记录提示内容;否则“自主找到方案”和“知道关键线索后完成实现”会被混在一起。

时间条件同样如此。在短时间里达到某个水平,与不限制时间继续优化,不是同一种表现。这里首先要明确的是题目要测哪种工作条件,而不是把不同条件下的成绩直接排成一个能力榜单。

三、任务怎样重新设计,才能继续提供有效信号h2

提高门槛只是可能的调整之一。还可以改变起点、分解问题、补充新的约束,或者重新安排评分,让目标能力有机会表现出来。

6. 任务深度与子问题:给能力留下多条表现路径h3

一项优化任务如果只靠发现一个技巧,成绩就容易被“有没有碰到这条思路”主导。更有深度的任务,可以让不同方案通过多个有意义的步骤继续改进。

在模拟机器的例子里,可以围绕这些问题组织工作:

  • 是否理解了程序的主要依赖,找到了真正影响周期数的部分。
  • 是否能够利用允许的并行或调度方式,减少空闲与等待。
  • 修改是否保持不同输入下的正确性。
  • 是否建立了能解释开销的观测或调试办法。

这些不是必须逐项加权的通用评分表,而是帮助检查:题目有没有给目标能力足够的表现机会。评分仍应依据任务目的确定,不必把每项活动都变成强制步骤。

多个相对独立的子问题,也可以减少整场测试被单个卡点支配的程度。一个人在某一题上没有找到方法,仍有机会通过其他题展示分析能力。但如果所有子题都依赖同一个冷门知识,它们表面上独立,实际并没有增加多少覆盖。

任务更深也不能无限增加参与成本。足够清楚的起点、较快的验证反馈和有边界的工作量,能够把时间留给理解与改进,而不是环境准备和无关排错。

7. Realism 与 Novelty:同时检查相关性和区分价值h3

贴近真实工作,容易说明题目为什么值得做;引入不熟悉的约束,则可能让现有能力差异重新显现。原文的取舍说明,这两个目标并不总能同时最大化。

但不能把它简化成“真实题必然容易,陌生题必然有效”。现实工作也会出现新约束;一道虚构谜题,也可能只是在考与实际目标无关的技巧。

可以分别提出两个检查问题:

  • 相关性: 在这项任务中表现好,为什么能支持我们对目标能力的判断?
  • 区分价值: 当前要比较的对象,是否仍会产生有意义、可解释的差异?

例如,受限指令任务可以考察状态建模与约束推理,但不能仅凭这项成绩,就宣称某人已经具备真实加速器项目的全部工程能力。任务对某些能力有信号,不代表能覆盖整个岗位或系统。

图 1 · 从能力目标设计任务,用试测检查相关性、区分价值与完成成本
能力目标、任务设计与试测反馈 从要区分的能力出发,同时检查任务与真实工作的相关性,以及它对当前对象的区分价值。把这些要求落实到任务、评分和条件中,再通过试测观察成绩差异、解题过程与完成成本,并据此调整设计。 要区分的能力明确对象与判断目的 工作相关性为什么能反映目标能力区分价值能否识别有意义的差异 任务、评分与条件约定输入、要求、时间与工具 试测与核对成绩差异 · 解题过程 · 完成成本 在约定条件下运行 依据证据调整设计

因此,任务设计不是从“真实”和“陌生”里选一个标签,而是解释清楚:哪些工作特征需要保留,哪些约束值得改变,这些变化会让成绩代表什么。

8. 试测与版本管理:验证题目是否仍在测量目标能力h3

设计者能做出题目,不代表其他人能在约定时间内理解它;模型失败,也不自动证明题目已经拥有了好的区分度。需要让目标对象实际尝试,检查预期是否成立。

试测时可以重点观察:

  • 分数是否集中在门槛以上或以下,是否还有有意义的差异。
  • 高分来自目标能力,还是来自题意歧义、额外提示或熟悉同类题。
  • 不同解法能否在相同约束下验证,高低分是否主要受一个偶然卡点支配。
  • 完成成本是否合理,主要时间花在目标工作,还是无关准备上。

这些观察不必全部压成一个数字。最终产物、过程记录与参与者反馈可以相互补充,帮助发现题目实际考到了什么。

修改题目后,也要保存版本差异。换了起始实现、增加提示、改变时间条件,原始分数就未必能够直接横向比较。它们可能是合理的重设计,但需要说明改变了哪个测量条件。

原文配套的公开仓库也区分了发布任务与历史版本的起点。因此,阅读其中的成绩时,不能只看周期数,还要看比较对象从哪里开始、获得了多少时间和帮助。

对 Agent 评估而言,维护题目与维护 Grader 同样重要。旧任务可以继续承担回归保障;新任务则应针对尚未充分测量的能力加入,而不是仅仅追求让模型失败。

我从这个案例中提取的判断标准是:评估应当能够说明表现差异与目标能力之间的关系。 难度、新颖性、真实性和时间条件,都是帮助建立这条关系的设计手段,不是单独值得追求的成绩。

几个关键问题,串起目标、区分度与任务设计h2

一套测试通过率很高,就没有价值了吗?

不一定。它可能仍然适合确认基础要求和防止回归,只是不再适合识别新的能力提升。应先看它承担什么用途,再决定是否补充挑战任务。

题目越难,区分度就越好吗?

不是。如果所有对象都失败,或者差异主要来自无关背景与偶然灵感,难度并没有带来有效信号。题目需要让目标能力的不同水平有机会表现出来。

把题换成陌生指令集,就能证明通用推理能力吗?

不能直接证明。它可以提供在特定新规则下分析和求解的证据,但仍需检查任务覆盖、完成条件和与目标的关联。陌生本身不是有效性的保证。

为什么允许 AI 辅助后,需要重新解释成绩?

因为产物来自人与工具的共同作用。需要区分候选人如何指导、验证和改进,以及模型独立就能完成什么。只比较最终分数,可能无法识别关心的人类贡献。

同一个任务,不同时间条件下的成绩能直接比较吗?

不能默认这样比较。额外时间会改变可以探索和验证的范围,提示与工具也会改变信息条件。比较前应明确这些差异,避免把条件变化解释成纯粹的能力差异。

增加独立子问题,为什么可能比继续堆大单题更有用?

它让不同能力有更多表现机会,减少一个卡点决定全部结果的情况。但前提是子问题确实提供不同的有效证据,而不是反复考同一个知识点。

模型做不出来,能不能据此认定题目设计成功?

不能。还要确认任务清楚、目标对象能够合理完成、评分可靠,以及成绩确实对应所需能力。让模型失败只是观察结果,不能代替这些设计判断。

参考资料h2