第 28 篇最後留了一個問題:同一套 10 題,第三層 6 分、第六層 8 分、第七層還是 8 分。分數停住了,是代理到頂了,還是這 10 題已經量不出差別?
先講結論:是題目量不出來。 要說清楚為什麼,得先拆開一次代理評測是由哪些零件組成的,每個零件又會在哪裡壞掉。
評測一個模型,傳統做法是給一段輸入、比對一段輸出。代理不一樣:它會跑好幾圈、開工具、改檔案,結束時環境已經跟開始時不同了。Anthropic 在 2026 年 1 月的〈Demystifying evals for AI agents〉把代理評測拆成幾個零件:
| 零件 | 定義 | 在這個系列裡 |
|---|---|---|
| 任務(task) | 一道有固定輸入和成功標準的題目 | 10 題裡的一題 |
| 試次(trial) | 對一道任務的一次嘗試 | 第 28 篇每題跑了 3 次 |
| 評分者(grader) | 替代理表現的某一面打分的邏輯 | 我照標準判,或第 26 篇到第 28 篇的審查者 |
| 執行紀錄(transcript) | 一次試次的完整紀錄:輸出、工具呼叫、推理、中間結果 | token-inspectour 攔下來的每一個請求 |
| 結果(outcome) | 試次結束時環境的最後狀態 | 第 9 題的 changelog.md 有沒有真的存在 |
| 評測 harness | 從頭到尾把評測跑完的基礎設施 | 那支逐題呼叫 claude -p 的腳本 |
| 代理 harness | 讓模型能當代理的那套系統 | Claude Code(第 23 篇) |
最後兩列最容易混在一起:你評的是「模型加代理 harness」這一整包,換了 harness,分數就不是同一個東西。
評的是結果,不是路徑。 代理評測量的是環境最後變成什麼樣子:τ-bench 拿對話結束時資料庫的狀態跟標註好的目標狀態比對,SWE-bench 跑單元測試,OSWorld 每一題都附一支執行式的評測腳本。Anthropic 那篇也建議,與其逐步檢查代理開了哪些工具,通常不如評它產出了什麼,因為代理常常走出一條你沒想到、但一樣對的路。但它同時提醒:不讀執行紀錄,就不會知道評分者有沒有判對。結果拿來打分,執行紀錄拿來檢查打分。
Zhu et al.(2025)檢查了十個代理評測,提出一份檢查表(Agentic Benchmark Checklist),核心是兩種效度:
他們找到的例子:SWE-bench Verified 有些題的測試不夠多,錯的修法也能過。τ-bench 在故意設計成做不到的題目上,什麼都不回的代理也算成功。十個裡有七個結果效度有問題、七個任務效度有問題,高估或低估最多可以差到相對 100%。
拿這兩把尺回頭看這套 10 題,第 5、6 題就是任務效度壞掉的例子。它們考記憶,答案留在第一個對話裡,而我把第一個對話開在另一個資料夾。Claude Code 的自動記憶以專案資料夾為單位,所以不管代理有沒有記憶的能力,這兩題都解不出來,等於把記憶關掉再問記憶題。Anthropic 那篇有一句很實用:跑很多次都是 0%(例如 0% pass@100),通常代表題目壞了,不是代理不行。
同一篇也要求每次試次從乾淨的環境開始,因為殘留的檔案、快取會讓失敗彼此相關。隔離是對的,但這兩題需要的狀態剛好是跨對話的,隔離把它一起隔掉了。題目要什麼狀態、環境就要留什麼狀態,這得在出題時就想清楚。
資料污染(data contamination) 從另一邊破壞任務效度:模型沒有那項能力也解得出來,因為訓練時看過答案。Xu et al.(2024)的整理是,這會讓評測的表現不準、不可靠。這套題是 2026 年 9 月才在第 4 篇公開的,token-inspectour 攔到 Claude Code 告訴模型的知識截止時間是 2026 年 6 月,照理沒看過。
Anthropic 那篇把評測分成兩種用途。能力評測(capability eval) 問「這個代理能做好什麼」,應該從低分開始,留給它爬的空間。回歸評測(regression eval) 確認改了東西之後原本會的還會,應該接近 100%。代理把所有解得出來的題都過了,就叫飽和(saturation),分數從此不會再動。
Kiela et al.(NAACL 2021)講的是它的後果:模型很快在評測上拿到漂亮的分數,卻在簡單的挑戰題和真實情境裡出錯。
這套題的生命週期剛好走完一輪:
| 層 | 分數 | 這一層翻盤的題 | 10 題總詞元 | 10 題總費用(美元) |
|---|---|---|---|---|
| 第二層:只有提示詞 | 4 | 起點:第 1、2、7、10 題 | 217,805 | 0.9778 |
| 第三層:附上團隊筆記 | 6 | 第 3、4 題 | 216,585 | 0.9695 |
| 第四層:記憶 | 沒跑 | |||
| 第五層:工具與技能 | 沒單獨跑 | |||
| 第六層:代理迴圈,可以用工具 | 8 | 第 8、9 題 | 302,014 | 0.9953 |
| 第七層:寫審圖 | 8 | 沒有 | 707,790(三次平均) | 1.6070(三次平均) |
全部是 Claude Opus 5.5、effort medium。第二層是我寫這篇時照第 24 篇的設定重跑的(原本第 4 篇在 Opus 5 上跑,過的題一模一樣),第三、六層出自第 24 篇,第七層出自第 28 篇。
在第二到第六層,它是能力評測:每一層翻盤的題,剛好是那一層補上的能力,因為我就是照著每一層要補的洞出題的。到了第六層,剩下的八題全過,它就變成了回歸評測,只能告訴你第七層沒有把東西弄壞。第七層想換來的,是把拆得開的任務分給幾個窗口(第 25 篇引的 Kim et al.),這 10 題每一題都是單一的小問題,一題都沒考。
Kapoor et al.(2024)主張準確率和成本要一起看,所以費用那兩欄跟分數一樣重要:同樣 8 分,第七層貴了六成,詞元是 2.3 倍。
代理每次走的路都不一樣,所以一道題要跑好幾次,再決定怎麼把好幾次的結果合成一個數字:
k 越大,pass@k 越往上、pass^k 越往下,兩條線分得越開,就代表代理越不穩。
分數本身也有誤差。Miller(2024)建議把評測當成統計實驗,裡面有四條:
下面把這些式子寫成程式,資料是第 28 篇審查者「第一輪就放行」的次數,以及第三層到第六層的逐題差:
from math import comb, sqrt
def pass_at_k(n, c, k): # Chen et al. 2021:k 次裡至少一次對
return 1 - comb(n - c, k) / comb(n, k)
def pass_hat_k(n, c, k): # Yao et al. 2024:k 次全部都對
return comb(c, k) / comb(n, k)
def mean_se(xs): # Miller 2024:平均數與它的標準誤
m = sum(xs) / len(xs)
var = sum((x - m) ** 2 for x in xs) / (len(xs) - 1)
return m, sqrt(var / len(xs))
# 第 28 篇:審查者第一輪就放行的次數(每題跑 3 次)
c = [3, 3, 2, 3, 3, 3, 1, 1, 3, 3]
print(f"pass@3 = {sum(pass_at_k(3, x, 3) for x in c) / 10:.2f}")
print(f"pass^3 = {sum(pass_hat_k(3, x, 3) for x in c) / 10:.2f}")
# 第三層 → 第六層:同樣 10 題逐題相減(只有第 8、9 題從錯變對)
m, se = mean_se([0, 0, 0, 0, 0, 0, 0, 1, 1, 0])
print(f"差 {m:+.1f},95% 信賴區間 {m - 1.96 * se:+.2f} ~ {m + 1.96 * se:+.2f}")
pass@3 = 1.00
pass^3 = 0.70
差 +0.2,95% 信賴區間 -0.06 ~ +0.46
第一組數字是不穩的樣子:每題至少有一次被直接放行,但只有七題每次都放行。最後的答案三次都一樣,路徑卻每次不同。
第二組更值得看:第三層到第六層多了 2 分,但只有 10 題,信賴區間跨過了 0,光看統計,連這 2 分都不能說是確定的進步。(10 題用常態近似本來就粗,這裡只是示意。)我還是相信那 2 分,理由不在統計裡:執行紀錄裡看得到第六層真的開了 shasum、真的寫了檔。題目少的時候,執行紀錄能補上統計補不了的那一塊,但它是另一種證據,不能拿來假裝樣本變大了。
Anthropic 那篇把評分者分成三種:
| 評分者 | 優點 | 缺點 |
|---|---|---|
| 程式(code-based) | 快、便宜、客觀、可重現 | 對「對但寫法不同」的答案很脆,判不了細節 |
| 模型(model-based) | 有彈性、可擴展、抓得到細節 | 不確定、比程式貴,要先跟人類評分校準 |
| 人 | 品質的標準答案,最接近專家的判斷 | 貴、慢 |
第 4 篇引過 Zheng et al.:模型當評審跟人類的一致率超過八成,但有偏好自己答案之類的偏誤。代理評測還多一個問題:評分者看得到什麼。第 28 篇的審查者只拿到最後的文字,寫手查過的時間、算過的雜湊都沒傳過去,它就把對的答案判成「無法驗證」。Zhuge et al.(2024)的 Agent-as-a-Judge 走的是反方向:讓評審本身也是代理,可以自己去翻工作區和執行過程。他們在自建的 55 個開發任務上,量到這樣的評審比只看文字的 LLM 評審好得多,跟他們的人類評分一樣可靠。
評分者也會錯在另一邊。Anthropic 那篇記了一個例子:在 τ2-bench 的訂機票任務裡,Opus 4.5 找到政策裡的一個漏洞,照評測的寫法算失敗,實際上卻替使用者找到更好的解法。這是結果效度的另一面:評分邏輯沒想到的對答案,也會被判錯。
我的順序是:能寫成測試的就交給程式。寫不成的,先由人照固定標準判一批,拿來校準模型評分者。模型評分者要拿到執行紀錄,不能只看最後的文字。
這些都有論文,也都量多步、會動手的代理:
| 評測 | 量什麼 | 怎麼評 |
|---|---|---|
| SWE-bench(Jimenez et al., ICLR 2024) | 真實的 GitHub issue,改程式碼 | 單元測試,第 23 篇介紹過 |
| terminal-bench(Merrill et al., 2026) | 89 道命令列任務,每題一個獨立環境 | 跑測試檢查最後的狀態 |
| GAIA(Mialon et al., 2023) | 需要推理、看圖、瀏覽網頁和用工具的真實問題 | 比對一個簡短的標準答案 |
| τ-bench(Yao et al., 2024) | 模擬使用者和要守規則的代理之間的多輪對話 | 比對資料庫最後的狀態,用 pass^k |
| OSWorld(Xie et al., 2024) | 真的作業系統上 369 個開放式的電腦操作任務 | 每題一支執行式評測腳本,人類 72.36%,論文當時最好的模型 12.24% |
如果要量第七層,GAIA 這種需要同時查好幾個來源的題目,比較接近 Kim et al. 說多代理會贏的那一類。這是我的判斷,我還沒跑過。
第一,多跑幾次要錢。 k 次試次就是 k 倍的費用,第 28 篇三次的 10 題就花了 4.82 美元,而題目少的時候,跑再多次也縮不了題目數造成的誤差。
第二,評分者本身要被評。 程式評分要確認測試夠嚴,模型評分要先跟人校準,兩邊都要有人回頭讀執行紀錄。
第三,評測會飽和,也會壞。 能力評測過關之後只剩回歸的用途,要量新的能力就得出新的題,而新的題要先過兩種效度那一關。
多了什麼能力:拆得開一次代理評測的零件(任務、試次、評分者、執行紀錄、結果、兩種 harness),用兩種效度檢查題目本身,分得清能力評測和回歸評測、pass@k 和 pass^k,知道分數要附誤差,也知道三種評分者各適合什麼。回頭看這個系列的成績單,知道 8 分為什麼停住。
多付了什麼代價:k 倍的評測費用、一套要被校準和抽查的評分者,以及一套到頂之後就得換掉的題目。
七層都走過了。第 1 篇那個只有模型名稱、長度上限和一個訊息陣列的請求,現在長成了什麼樣子?那三個洞又各補在哪一層?
文章與論文