從性能工程測驗的迭代案例理解評估設計:怎樣確定能力目標、識別測試飽和,區分難度與新穎性,並在真實任務、有效區分和完成成本之間取捨。
上一篇討論了怎樣從執行軌跡定位行為問題。但即使記錄完整、評分準確,還有一個前提需要檢查:這組題目是否仍然能區分我們關心的能力?
當不同方案都輕鬆通過,繼續比較通過率很難看出改進;把題目換得更難,也可能只是讓所有方案一起失敗。評估設計要解決的,不只是題目難不難,而是成績差異能不能支持我們想作出的判斷。
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
貼近真實工作,容易説明題目為什麼值得做;引入不熟悉的約束,則可能讓現有能力差異重新顯現。原文的取捨説明,這兩個目標並不總能同時最大化。
但不能把它簡化成“真實題必然容易,陌生題必然有效”。現實工作也會出現新約束;一道虛構謎題,也可能只是在考與實際目標無關的技巧。
可以分別提出兩個檢查問題:
- 相關性: 在這項任務中表現好,為什麼能支持我們對目標能力的判斷?
- 區分價值: 當前要比較的對象,是否仍會產生有意義、可解釋的差異?
例如,受限指令任務可以考察狀態建模與約束推理,但不能僅憑這項成績,就宣稱某人已經具備真實加速器項目的全部工程能力。任務對某些能力有信號,不代表能覆蓋整個崗位或系統。
因此,任務設計不是從“真實”和“陌生”裏選一個標籤,而是解釋清楚:哪些工作特徵需要保留,哪些約束值得改變,這些變化會讓成績代表什麼。
8. 試測與版本管理:驗證題目是否仍在測量目標能力h3
設計者能做出題目,不代表其他人能在約定時間內理解它;模型失敗,也不自動證明題目已經擁有了好的區分度。需要讓目標對象實際嘗試,檢查預期是否成立。
試測時可以重點觀察:
- 分數是否集中在門檻以上或以下,是否還有有意義的差異。
- 高分來自目標能力,還是來自題意歧義、額外提示或熟悉同類題。
- 不同解法能否在相同約束下驗證,高低分是否主要受一個偶然卡點支配。
- 完成成本是否合理,主要時間花在目標工作,還是無關準備上。
這些觀察不必全部壓成一個數字。最終產物、過程記錄與參與者反饋可以相互補充,幫助發現題目實際考到了什麼。
修改題目後,也要保存版本差異。換了起始實現、增加提示、改變時間條件,原始分數就未必能夠直接橫向比較。它們可能是合理的重設計,但需要説明改變了哪個測量條件。
原文配套的公開倉庫也區分了發佈任務與歷史版本的起點。因此,閲讀其中的成績時,不能只看週期數,還要看比較對象從哪裏開始、獲得了多少時間和幫助。
對 Agent 評估而言,維護題目與維護 Grader 同樣重要。舊任務可以繼續承擔迴歸保障;新任務則應針對尚未充分測量的能力加入,而不是僅僅追求讓模型失敗。
我從這個案例中提取的判斷標準是:評估應當能夠説明表現差異與目標能力之間的關係。 難度、新穎性、真實性和時間條件,都是幫助建立這條關係的設計手段,不是單獨值得追求的成績。
幾個關鍵問題,串起目標、區分度與任務設計h2
一套測試通過率很高,就沒有價值了嗎?
不一定。它可能仍然適合確認基礎要求和防止迴歸,只是不再適合識別新的能力提升。應先看它承擔什麼用途,再決定是否補充挑戰任務。
題目越難,區分度就越好嗎?
不是。如果所有對象都失敗,或者差異主要來自無關背景與偶然靈感,難度並沒有帶來有效信號。題目需要讓目標能力的不同水平有機會表現出來。
把題換成陌生指令集,就能證明通用推理能力嗎?
不能直接證明。它可以提供在特定新規則下分析和求解的證據,但仍需檢查任務覆蓋、完成條件和與目標的關聯。陌生本身不是有效性的保證。
為什麼允許 AI 輔助後,需要重新解釋成績?
因為產物來自人與工具的共同作用。需要區分候選人如何指導、驗證和改進,以及模型獨立就能完成什麼。只比較最終分數,可能無法識別關心的人類貢獻。
同一個任務,不同時間條件下的成績能直接比較嗎?
不能默認這樣比較。額外時間會改變可以探索和驗證的範圍,提示與工具也會改變信息條件。比較前應明確這些差異,避免把條件變化解釋成純粹的能力差異。
增加獨立子問題,為什麼可能比繼續堆大單題更有用?
它讓不同能力有更多表現機會,減少一個卡點決定全部結果的情況。但前提是子問題確實提供不同的有效證據,而不是反覆考同一個知識點。
模型做不出來,能不能據此認定題目設計成功?
不能。還要確認任務清楚、目標對象能夠合理完成、評分可靠,以及成績確實對應所需能力。讓模型失敗只是觀察結果,不能代替這些設計判斷。