
很多團隊評估 Agent 的方法,其實還停留在評估 Chatbot。
準備一組問題、跑一次模型、比較輸出,再算出一個正確率。
但 Agent 處理的通常不是單輪問答。
它可能需要:
甚至同一個 Agent、同一個任務,執行兩次也可能得到不同結果。
因此,Agent Evaluation 真正要回答的,不只是:
這次回答對不對?
而是:
這個 Agent 能不能在接近真實的環境中,穩定、安全而且有效率地完成任務?
這也是為什麼,Agent 評估需要的不是一份 Prompt 清單,而是一個完整的測試環境。
假設我們要測試一個客服 Agent。
使用者只說:
我的訂單好像有問題。
一個好的 Agent 不應該立刻猜測訂單編號,也不應該任意退款。
它應該先確認:
確認完資訊後,它才可以呼叫工具查詢訂單,根據公司政策判斷能否退款,執行操作,最後清楚告知使用者處理結果。
這裡至少有五種能力:
如果我們只檢查最後一句回覆是否包含「已完成退款」,就可能出現一個很嚴重的問題:
Agent 說自己退款了,實際上卻沒有執行任何操作。
反過來也可能發生:
Agent 真的完成退款,卻沒有告訴使用者退款金額與後續處理方式。
所以,只檢查文字不夠;只檢查資料庫也不夠。
我們必須同時檢查 Agent 說了什麼、做了什麼,以及最後留下了什麼結果。
一個完整的 Agent Evaluation Environment,可以拆成五個部分。
每一筆測試資料不只是「問題與答案」,而應該包含:
例如退款任務可以包含:
Agent 的測試資料,實際上比較接近一個「情境」,而不是一題考題。
Agent 的工具通常會影響外部狀態,例如:
每次測試開始前,環境都必須恢復成相同狀態。
否則第一個測試已經退款,第二次測試就會從「已退款」開始,兩次結果根本無法比較。
因此,每次執行都需要獨立的 Sandbox、Container、資料庫快照,或至少一份完整的 State Copy。
工具應該盡量維持原子化。
好的工具可能是:
不好的工具則是:
工具太大,評估系統就無法判斷 Agent 到底做了哪些決策。
工具拆得夠清楚,我們才能觀察:
Agent 的評分不應該只有一個總分。
至少應該分成三層。
例如:
這一層最好檢查最終狀態,而不是限制 Agent 必須照某一條固定路徑完成。
Agent 完成操作後,通常還需要向使用者說明:
只檢查系統狀態,會漏掉溝通失敗。
某些錯誤不能用其他優點補回來,例如:
即使其他項目全部正確,只要踩到安全否決項,整個任務都應該判定失敗。
真實使用者不會在第一句話裡,把所有資訊整理成完整的規格文件。
他們可能只說:
我沒收到東西。
Agent 必須繼續追問,才能知道是哪一筆訂單、預計何時送達,以及使用者希望退款還是補寄。
因此,測試環境需要一個模擬使用者,按照腳本逐步釋出資訊。
這樣才能測到:
這個模擬使用者可以是固定腳本,也可以由另一個模型扮演。
但即使使用模型,也應限制它只能根據腳本回答,不能自己補充不存在的資訊。
Agent 評估至少要涵蓋五個維度。
Agent 最後有沒有完成使用者的目標?
這是最直觀的指標,但不能單獨使用。
Agent 偶爾成功,和每次都成功,是兩件完全不同的事。
假設某個 Agent 的單次成功率是 60%。
同一題執行五次,只要有一次成功,Pass@5 會接近 99%。
但如果要求五次全部成功,Pass^5 只有大約 8%。
前者回答的是:
它有沒有能力做到?
後者回答的是:
它能不能穩定做到?
探索、研究或生成候選方案時,可以關注 Pass@k 或 Best@k。
準備上線或建立 Regression Gate 時,更應該關注 Pass^k。
即使任務成功,Agent 也可能是硬撞過關的。
因此還需要檢查:
結果指標告訴我們它有沒有過。
過程指標告訴我們它是怎麼過的。
安全不能只當成平均分數中的其中一項。
有些行為必須設定成硬性門檻:
一個 Agent 成功率提高,可能只是因為:
因此,成功率應該和以下指標一起看:
研究、資料分析、軟體設計與複雜決策,通常沒有唯一答案。
這不代表它們不能評估。
真正需要改變的,是我們對「標準答案」的理解。
我們不一定要準備一份完整的參考回答,而可以準備一份由領域專家定義的 Rubric。
例如評估一份研究報告,可以檢查:
好的 Rubric 應該具備四個特性。
評分標準應該反映領域真正重視的品質,而不是只檢查文字流暢度。
「展現深入理解」太模糊。
「提出至少兩個可能的反例,並解釋它們是否改變結論」才是可以判斷的標準。
正確性、完整性、可讀性的重要程度不同。
而編造事實、洩漏資料或違反政策,則應直接判定失敗。
LLM Judge 本身也會有偏誤。
它可能偏好比較長的回答、偏好先看到的候選,也可能和受測 Agent 共享相同盲點。
因此,大規模使用前,應先準備一批由人類專家標註的 Gold Set,確認 Judge 的評分和人工判斷是否一致。
對重要案例,也可以:
一份好的 Agent Dataset,至少要符合四個原則。
任務的結果必須能夠被清楚檢查。
如果連人類都無法判斷什麼叫完成,就很難建立可靠的自動化評估。
簡單、中等與困難任務應分開統計。
否則 Agent 可能只是在大量簡單題上進步,卻把真正重要的困難任務弄壞。
每一題都應確認:
公開 Benchmark 可能進入下一輪模型訓練資料。
這時高分不一定代表推理能力,也可能只是模型看過類似答案。
實務上可以採用:
最有價值的 Dataset,通常不是一開始憑空設計出來的。
而是從 Production Trace、客服案例、失敗紀錄與人工接管事件中,持續整理出來的。
不一定。
假設兩個版本都測了 100 個任務:
看起來提高了三個百分點。
但在這個樣本數下,隨機波動本身可能就有四到五個百分點。
因此,這個差距可能沒有任何意義。
比較 Agent 版本時,至少應該:
如果預期的提升,小於目前測試集能分辨的範圍,那麼下一步不是繼續調 Prompt。
而是增加任務數量,或改善評估設計。
Benchmark Report 最終只需要回答一件事:
接下來應該改什麼?
看到分數下降時,不要第一時間就怪模型或 Prompt。
問題也可能來自:
因此,正確的改善流程應該是:
Agent Evaluation 不是產品完成後才做的一次驗收。
它應該成為 Agent Harness 的常駐基礎設施。
每次修改 Model、Prompt、Tool、Memory、Planning 或 Permission,都應該重新執行同一套評估,確認這項改動究竟改善了什麼,又破壞了什麼。
Agent 並不是不能量化。
真正的問題是,我們常常只量化最容易取得的東西,例如最後一段文字、單次成功率,或一個看起來很漂亮的平均分數。
但這些數字不一定代表 Agent 能在真實世界完成任務。
一個有意義的 Agent 評估,需要同時建立:
最後真正要問的不是:
這個 Agent 得了幾分?
而是:
這套評估是否能提供足夠的證據,支持我們修改或部署這個 Agent?
如果你想更有系統地理解 AI Agent 架構,我最近也把 Awesome Agent Architecture 整理成 30 天 iT 邦幫忙鐵人賽系列。
這個系列會依照 repo 的內容,從最小可運作的 Agent Loop 開始,逐章拆解工具使用、Context、Memory、Planning、Multi-Agent、Harness 與 Graph Engineering,並搭配 Python 範例。
系列入口:《30 天從零拆解 AI Agent:從 Tool Calling 到多 Agent 協作》
我把這套評估流程整理成 Awesome Agent Architecture 的第 23 章,並附上可執行範例,包含可重設的環境、模擬使用者、工具呼叫紀錄、結果與安全評分、Pass@k、Pass^k,以及不同版本的配對比較。
GitHub 搜尋:https://github.com/hardness1020/awesome-agent-architecture
下一篇會繼續拆解:Agent 的測試資料到底該怎麼準備,以及如何把正式環境中的失敗案例轉成可重複執行的 Evaluation Dataset。