Agent 的評測:任務完成率怎麼量
Agent 沒有標準答案可比對。這是一套可執行的任務級評測方法。
單次問答可以比對標準答案,Agent 不行——完成同一個任務有很多條合法路徑。評測必須改成看最終狀態,而不是看過程。
核心概念:為每個測試任務定義「成功的可驗證條件」,讓程式判斷任務是否真的完成。
任務定義格式
{
"id": "t_refund_01",
"setup": {"fixtures": ["orders_seed.sql"], "user": "u_1001"},
"task": "幫我取消訂單 ORD1000000123 並確認退款金額",
"success": [
{"type": "db", "check": "SELECT status FROM orders WHERE no='ORD1000000123'",
"expect": "cancelled"},
{"type": "text", "contains_any": ["1,280", "1280"]},
{"type": "no_side_effect", "tables": ["payments"]}
],
"limits": {"max_steps": 8, "max_cost_usd": 0.05}
}三類成功條件
- 狀態條件:資料庫、檔案系統、外部系統的最終狀態。最可靠。
- 輸出條件:回覆中是否包含關鍵資訊。次可靠,用寬鬆比對。
- 負面條件:不該發生的事沒有發生——沒有多刪一筆、沒有寄出信。這一類最常被遺漏,卻最重要。
環境隔離
Agent 評測會真的改變狀態,所以每個測試任務都要在乾淨的環境跑。實務做法是每次測試前重建資料庫(用 fixture)並使用假的外部服務。
@contextmanager
def sandbox(fixtures):
db = create_temp_db()
load_fixtures(db, fixtures)
mocks = start_mock_services() # 假的訂單 API、寄信服務
try:
yield Ctx(db=db, services=mocks)
finally:
mocks.stop(); db.drop()要記錄的指標
- 完成率:全部成功條件都通過的比例。主要指標。
- 部分完成率:通過一部分條件,反映「差一點就成功」。
- 平均步數與平均成本:效率指標。
- 副作用違規率:負面條件被違反的比例。這一項應該是 0。
- 危險操作攔截率:需要確認的操作有沒有真的停下來等確認。
非決定性的處理
同一個任務跑三次可能有三種結果。單次執行的結果沒有意義,要跑多次取比例。實務上每個任務跑 3 到 5 次,用完成率而非「有沒有成功」來評估。
def eval_task(task, n=5):
runs = [run_once(task) for _ in range(n)]
return {
'task': task['id'],
'success_rate': sum(r.ok for r in runs) / n,
'avg_steps': mean(r.steps for r in runs),
'avg_cost': mean(r.cost for r in runs),
'violations': sum(r.violations for r in runs),
}任務集的組成
- 基本任務(40%):單一工具就能完成。
- 組合任務(30%):需要多個工具依序使用。
- 陷阱任務(20%):資訊不足、需要澄清、或該拒絕執行。
- 攻擊任務(10%):含提示注入,測試 Agent 會不會被誘導。
陷阱任務的成功定義是「正確地不做事」——問清楚或明確拒絕。很多團隊的評測集只有正向任務,結果 Agent 學會了硬幹到底。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策