简

從 Task、Trial、Transcript 與 Outcome 理解一次 Agent 評估,梳理 Grader 的選擇與組合、pass@k 與 pass^k 的區別,以及能力評估、迴歸評估和評估集的持續維護。

Agent Eval:怎樣衡量任務結果、執行過程與穩定性?
30 分鐘
5956 字

前一篇討論了怎樣為 Agent 準備可理解、可操作、可驗證的工程環境。接下來要回答的是:修改模型、提示詞或工具以後,怎樣知道這套系統真的做得更好了?

對會調用工具的 Agent 來説,回答寫得像完成了任務,與任務實際完成,是兩件事。它可能正確解釋了退款政策,卻沒有創建退款記錄;也可能完成了操作,但向用户報告了錯誤金額。只讀最後一句回答,很難判斷整個任務的質量。

結合 Anthropic 的《Demystifying evals for AI agents》,本文圍繞四個問題展開:

  • 評什麼: 怎樣定義任務,記錄一次嘗試的執行過程與實際結果。
  • 怎麼評分: 程序、模型和人工分別適合判斷什麼,多個標準怎樣組合。
  • 怎麼看穩定性: 同一個任務為什麼要重複運行,pass@k 與 pass^k 分別説明什麼。
  • 怎樣持續使用: 能力評估與迴歸評估怎樣分工,真實失敗怎樣成為可重複的測試。

下面用一個假設的售後任務貫穿説明:用户要求退回一筆已取消訂單的 50 元付款。訂單、退款系統和檢查標準都是教學示例,不涉及真實交易。

一、一次 Agent Eval 需要哪些材料h2

一次評估不只是“給問題、看回答、打分”。先把任務條件、執行記錄和完成標準分開,才知道後面的分數究竟在衡量什麼。

1. Task 與 Trial:任務條件和一次具體嘗試h3

Task 是一項有明確輸入與成功標準的測試任務;Trial 是 Agent 對這項任務的一次嘗試。 同一項 Task 可以運行多個 Trial,而每個 Trial 內部又可以包含多次模型調用和工具執行。

在退款例子裏,只寫“幫用户退款”還不夠。任務至少要交代這些條件:

  • 用户身份已經驗證,訂單屬於當前用户。
  • 訂單已取消,付款為 50 元,當前不存在退款記錄。
  • 測試政策允許全額退款,用户已明確確認。
  • Agent 可以查詢訂單、讀取政策和提交退款,不能修改其他訂單。
  • 成功意味着指定訂單隻產生一筆 50 元的成功退款,且答覆與實際狀態一致。

這些約定把自然語言請求連接到可以檢查的結果。否則,“已經提交申請”究竟算不算完成,兩位評審者都可能給出不同答案。

第一次 Trial 可能先查詢政策,再查詢訂單;第二次可能先讀取訂單,發現取消狀態後再核對政策。只要這些順序沒有違反任務要求,就不必因為路徑不同判其中一次失敗。

Task 固定需要完成什麼,Trial 記錄某一次實際怎樣做。 這也解釋了為什麼一條工具調用不是一個 Trial:查詢訂單只是嘗試中的一步,退款和最終答覆可能還在後面。

2. Transcript 與 Outcome:執行記錄和環境終態h3

Transcript,也常稱 Trace 或 Trajectory,記錄一次嘗試中能夠採集到的交互:用户消息、模型輸出、工具請求、工具返回等。Outcome 則是這次嘗試結束後,環境實際處於什麼狀態。

對於退款任務,可以分別檢查:

檢查對象能取得的證據能説明什麼
Transcript查詢了哪個訂單,提交了什麼金額,工具返回了什麼,最後怎樣答覆Agent 做過什麼、依據什麼繼續行動
Outcome退款記錄、訂單餘額、其他訂單是否被改動請求的變化是否真的發生,是否產生額外影響

假設 Agent 説“50 元已經退回”,但退款工具返回失敗,數據庫裏也沒有成功記錄。答覆出現在 Transcript 中,卻不能代替 Outcome。

反過來,數據庫確實存在正確退款,也不能證明整個過程都合格。如果 Agent 同時告訴用户“退回了 500 元”,溝通仍然有問題;如果它還試圖修改另一位用户的訂單,單看目標訂單的終態也會漏掉重要行為。

因此,結果檢查回答“事情有沒有做成”,過程記錄提供“做了什麼”的證據。 兩者可以參與同一項評估,但不是同一份材料。

這裏的執行記錄也不是模型全部內部活動的快照。能評估的是系統實際記錄到的信息,不能把不可見的推理當成已經採集的證據。

3. Evaluation Harness:組織運行、採集與評分h3

Agent Runtime負責把模型、工具和交互連接成工作過程。Evaluation Harness 在外面組織測試:準備任務環境、啓動一次嘗試、收集證據、運行 Grader,再彙總結果。

可以把兩者的職責分開看:

  • Agent Harness: 接收請求,組織推理與工具執行,讓 Agent 能夠行動。
  • Evaluation Harness: 安排用什麼任務測試、從什麼起點運行、怎樣檢查和比較結果。

被測對象通常是模型與 Agent Harness 的組合。模型沒換,但工具定義、上下文組織或退出邏輯變了,評估結果同樣可能變化。

一組圍繞某種能力組織的 Task,構成 Evaluation Suite。例如,售後評估集可以包含正常退款、重複申請、信息缺失和需要人工處理的任務。Suite 是任務的集合,不是運行完以後生成的一份分數表。 分數表是對這組任務的執行結果進行彙總。

圖 1 · 同一 Task 的多次 Trial:分別取得證據,再評分與彙總
一個評估任務的多次獨立嘗試與評分 同一任務從相同的初始條件開始運行三次。每次嘗試各自產生執行記錄和環境終態,由評分器分別檢查。最後彙總各次結果,衡量完成率與穩定性。評估集在這個層次之外組織多個任務。 Task · 退款任務明確輸入、初始狀態與成功標準 Trial 1Trial 2Trial 3恢復起點 · 運行 Agent恢復起點 · 運行 Agent恢復起點 · 運行 AgentTranscript · 執行記錄Transcript · 執行記錄Transcript · 執行記錄Outcome · 環境終態Outcome · 環境終態Outcome · 環境終態 Graders · 分別檢查每次證據任務結果、行為要求與回答質量 彙總結果與穩定性保留各項得分,不只留下一個平均數

二、任務的不同部分怎樣評分h2

有了記錄與終態,還需要把“做得好”變成具體判斷。Grader 就是負責檢查某個方面的評分邏輯:它可以檢查一條記錄,也可以依據明確標準評價一份回答。

4. Grader:程序、模型與人工各自判斷什麼h3

三類 Grader 的區別,主要在於怎樣作出判斷,而不只是返回布爾值還是分數。

Code-based:檢查可以明確驗證的條件

退款金額、訂單 ID、成功記錄數量,都可以由程序檢查。例如,讀取測試環境,驗證目標訂單存在且只有一筆成功退款,金額為 5000 分,其他訂單沒有變化。這裏金額採用最小貨幣單位,是示例自己的約定。

程序檢查清楚、便於重複,但檢查範圍也由代碼決定。只檢查 status == succeeded,就可能放過退錯金額或退錯訂單。確定性不等於標準完整。

Model-based:按明確標準評價開放輸出

“是否解釋清楚退款結果”“有沒有作出工具結果不支持的承諾”,很難用幾個關鍵詞可靠判斷。可以把實際證據與回答交給另一個模型,按 Rubric 逐項評價。

在本例中,一份簡短標準可以是:

  • 答覆中的訂單、金額和退款狀態是否與證據一致。
  • 是否區分提交、處理和完成,而不是把它們混為一談。
  • 用户能否看懂當前結果,以及是否仍需要補充信息。

評價模型的判斷也會波動。應當用人工已經判過的樣本核對它:哪些情況容易誤判,標準是否含糊,缺少證據時是否允許返回“無法判斷”。不能因為評審者也是模型,就把它當成自動正確的裁判。

Human:校準標準與處理複雜判斷

人工適合確定質量標準、核對模型評分,以及審閲有爭議的結果。比如一句“退款完成”在模擬系統裏可能對應成功記錄,但真實產品應當怎樣向用户表達到賬狀態,需要結合產品語義確定。

人工也不是沒有分歧。兩位評審者對同一條回答判斷不同,可能需要補充標準,而不是簡單挑一位作為正確答案。

這三類方法可以配合:金額和狀態交給程序,表達質量交給模型,標準制定和抽查交給人工。關鍵是每項判斷都能説清它檢查了什麼證據。

5. Scoring:硬性條件、部分得分與組合h3

一項任務可以有多個 Grader,組合規則決定什麼算整體通過。常見方式有三種:

方式怎樣組合在退款例子中的用法
Binary必須滿足全部指定條件訂單、金額、退款筆數和操作範圍都正確才通過
Weighted各維度加權,按總分或閾值判斷對説明是否清楚、信息是否完整分別評分
Hybrid必須條件先過關,再評價其他維度退款正確是前提,再比較溝通質量與執行代價

退款任務更適合把關鍵狀態設為硬性條件。不能用“語氣很好”的高分抵消“退錯錢”,也不能把越權操作平均進一個看起來尚可的總分。

同時,可以保留部分得分幫助理解表現。Agent 已正確定位訂單、核對政策,卻沒有完成退款,與一開始就查錯訂單的表現不同。兩者都可能整體失敗,但失敗分佈不應被一個零分完全抹平。

因此,結果可以同時包含整體是否通過、各項檢查結果、質量分數與成本指標。調用次數、耗時和 token 消耗有助於比較效率,卻不是脱離任務質量的成功證明。

過程要求也要區分兩類。核實身份、取得確認等任務要求可以檢查;“必須先調用 A 再調用 B”若只是設計者習慣,就不應該成為隱藏的唯一正確路徑。

6. Agent 類型:按任務選擇完成證據h3

同樣的評估框架可以用於不同 Agent,但完成證據不能照搬。退款任務重視業務狀態,寫代碼、做研究和操作界面則需要各自的檢查入口。

Agent 類型主要檢查什麼容易遺漏的部分
Coding補丁、相關測試與已有行為新測試通過,卻破壞舊功能;修改了測試而不是修復實現
Research答案依據、關鍵內容覆蓋與來源質量有引用,卻不支持結論;資料版本不一致
Computer Use頁面、文件或後端的實際狀態到達確認頁,卻沒有真正保存或提交
Conversational業務結果與交互質量話説得合理,卻沒有執行;執行了,卻誤報結果

對話任務還可能需要模擬用户補充訂單號、確認操作或改變表達方式。模擬器要遵循明確的用户情境,不能把評分器期待的解法直接提示給被測 Agent。

這些差別會影響 Grader 的選擇,但不改變基本原則:先確定完成任務需要什麼證據,再安排怎樣採集和判斷。

三、同一個任務的執行穩定性怎樣衡量h2

一次通過説明這一次做成了,卻不能直接説明同樣條件下能穩定做成。模型採樣、工具選擇和多輪交互,都可能讓不同嘗試走向不同結果。

7. Multiple Trials:在可比較的起點重複運行h3

假設同一退款任務運行五次,其中三次正確,兩次沒有完成。這與只展示一次成功演示提供的信息不同:前者至少暴露了任務存在不穩定的執行結果。

重複運行必須從可比較的初始狀態開始。在本例中,每個 Trial 都應恢復“尚未退款”的測試訂單,而不是讓第二次接着第一次已退款的數據庫繼續操作。否則測到的已經不是同一項任務。

環境也不能無意間留下前一輪的結果文件、緩存或提示。各次執行記錄需要分開保存,並記錄所用模型、指令、工具、預算與評分標準的版本,才能解釋比較條件。

多個 Trial 可以幫助觀察波動,但小樣本成功率仍然只是估計。報告結果時,應當同時給出任務數、每項任務的嘗試次數和成功定義,而不是隻有一個脱離條件的百分比。

8. pass@k 與 pass^k:機會成功和持續可靠h3

這兩個指標問的不是同一件事:

  • pass@k: 同一任務嘗試 k 次,至少一次成功的概率。
  • pass^k: 同一任務獨立嘗試 k 次,全部成功的概率。

τ-bench 論文用 pass^k 描述多次嘗試的一致可靠性。它不是在統計一個 Trial 內的 k 個步驟,也不是要求把同一筆退款連續執行 k 次。

為了看清區別,假設某項任務每次成功概率都是 p,各次嘗試相互獨立。那麼:

至少一次成功:pass@k = 1 - (1 - p)^k
每次都成功: pass^k = p^k

取一個自擬例子,p = 0.8:

嘗試次數 k至少一次成功每次都成功
180%80%
399.2%51.2%
5約 99.97%約 32.77%

更多嘗試讓“至少成功一次”變得容易,卻讓“每次都成功”變得更苛刻。所以高 pass@k 不能直接解釋成“每位用户都能穩定得到正確結果”。

如果任務允許生成多個候選,再用可靠驗證器挑出一個有效解,pass@k 有價值;如果面向用户的每次操作都需要可靠完成,一致性就更重要。即使候選裏有正確答案,沒有可靠的選擇辦法,也不等於產品已經找到了它。

上面的公式是單個任務、獨立且成功概率固定時的説明。實際任務的難度不同,應分別統計或估計再彙總,不能把整套評估的平均成功率直接乘方,當成整套評估的 pass^k;共享故障造成的相關失敗,也不滿足獨立假設。

四、怎樣建立和維護一套有效的 Evalh2

前面定義了任務、證據、評分與穩定性。把它們用於持續開發,還需要一組有代表性的任務,以及明確的使用方式。

9. Dataset:把實際需求寫成可檢驗的任務h3

起點可以是開發中已經手工檢查的行為、真實失敗和用户需求,不必先追求一個龐大的題庫。對於退款 Agent,只收集正常退款會遺漏另一半能力:什麼時候不應該退款,什麼時候需要進一步確認。

可以圍繞同一業務準備不同任務:

  • 符合條件,用户已確認,應當完成退款。
  • 訂單已退款,不能再創建一筆。
  • 訂單不屬於當前用户,不能操作。
  • 用户還沒決定,應該先解釋和確認。
  • 工具失敗,不能把失敗答覆成成功。

每種任務都需要自己的成功標準。信息不足時正確請求補充,可以是通過;拒絕不允許的操作,也可以是通過。“成功”指符合任務要求,不總是指完成一次寫操作。

還要檢查題目與評分是否一致。如果任務只要求提交退款申請,Grader 卻要求資金已經到賬,Agent 遵循題意也可能失敗。可以準備一份已知合格的參考結果,先驗證這些標準確實允許正確解通過;參考結果用於校驗評分,不是泄露給 Agent 的答案。

10. Capability 與 Regression:能力空間和已有保障h3

兩類 Suite 的目標不同:

  • Capability Eval: 測量還不能穩定處理的任務,觀察能力是否提升。
  • Regression Eval: 檢查已經可靠處理的任務,防止修改後退步。

例如,普通取消訂單退款已經穩定通過,可以進入迴歸集;多訂單、多種支付方式和信息缺失組合在一起,可能仍是能力集中的挑戰任務。

能力集通過率低,不自動説明題目不好,它可能正在暴露尚未掌握的能力。迴歸集則應接近全通過,下降值得排查。但無論屬於哪類,任務都必須明確、可解,評分不能依賴隱藏要求。

當原先困難的任務逐漸變得穩定,它們可以轉為已有能力的保障。反過來,一套幾乎全通過的能力集,已經很難區分新的改進;它仍能防退步,卻需要補充真正有意義的挑戰任務,才能繼續衡量進步。

11. Eval-driven Development:把改進與迴歸連接起來h3

一次失敗報告,可以變成一條可反覆運行的任務。假設用户反饋“Agent 把退款處理中説成了退款完成”,就可以據此固定一份處理中狀態,要求答覆準確區分兩者。

接着修改指令或工具反饋,重跑這條任務,再跑已有的正常、重複申請和失敗場景。這樣檢查的不只是“這個問題修沒修”,還包括“修復有沒有影響其他行為”。

這條循環可以概括為:

記錄問題 → 明確成功標準 → 固定任務與評分 → 修改 Agent → 重跑與比較 → 保留迴歸任務

比較時,應儘量保持任務、運行條件和 Grader 一致。如果升級 Agent 的同時也修改了評分標準,需要單獨記錄,否則分數上漲可能只是考試方式變了。

維護 Eval 也包括檢查評分器本身。低分可能來自 Agent 的真實錯誤,也可能來自含糊任務、評分 bug 或誤拒合理解法。抽查執行記錄與實際狀態,是確認分數有沒有測對的重要步驟。

自動評估能夠幫助重複比較,但不能覆蓋全部真實使用。線上反饋可以補充遺漏場景,人工抽查可以校準開放質量判斷。它們提供不同證據,不需要由一個總分替代所有觀察。

我理解的一套有效 Eval,不是給 Agent 貼上“好”或“不好”的標籤,而是讓這些判斷有具體對象:在哪些任務上、依據什麼證據、按什麼標準、以多高的穩定性完成。 這些條件清楚,分數才有可解釋的意義。

幾個關鍵問題,串起任務、評分與穩定性h2

Agent 最後回答正確,為什麼任務仍可能失敗?

因為回答只是執行記錄的一部分。需要改變環境的任務還要檢查實際狀態:退款是否創建,金額是否正確,是否重複操作。回答正確可以是一項檢查結果,但不能自動代替其他完成條件。

所有工具都調用成功,是否就證明業務成功?

不是。工具成功表示它完成了自己的操作,未必符合用户目標。查錯訂單的查詢也可能成功,提交申請也不等於退款完成。評分要把工具結果放回任務條件中判斷。

為什麼不用一個模型評價整段執行,直接給總分?

可以用模型評分,但不能把可精確核對的金額、狀態和記錄數量都換成印象判斷。不同維度需要合適證據;拆開檢查還方便定位總分背後的差異,並讓人工校準模型判斷。

檢查過程,會不會限制 Agent 尋找更好的辦法?

要區分必要約束與指定解法。不得越權、必須取得確認,是任務要求;無業務依據的固定調用順序,則可能誤拒有效解。過程檢查應服務於真實要求,不是復刻設計者自己的操作。

pass@5 很高,為什麼不能直接説明五次都可靠?

因為它只要求五次中至少一次成功。五次都成功對應 pass^5,兩者衡量不同問題。還要區分離線獨立嘗試與線上重試:評估裏多試幾次,不代表業務系統可以無條件重複有副作用的操作。

能力評估通過率不高,應該降低標準嗎?

不應只為提高分數降低標準。先確認任務可解、要求明確、評分公平,再判斷是不是確實還不具備能力。能力集需要提供進步空間,迴歸集需要守住已有表現,它們的預期通過率本來就不同。

修復一個失敗場景後,只重跑這一條夠嗎?

不夠。這條任務驗證針對性修復,其他任務檢查它是否引入迴歸。只有結果、執行條件和評分方式都可比較,才容易説明改進發生在哪裏。

參考資料h2