Skip to content

程式化評估器

用 Potato 不依賴 Flask 的評估器庫自動為智慧體軌跡和文本輸出打分 —— 確定性軌跡匹配、工具使用正確性、無參考的 LLM 評審(LLM-as-judge),以及啟發式方法(精確匹配、編輯距離、JSON、嵌入向量)。

Potato 附帶一個輕依賴的評估器庫,可自動為智慧體軌跡和文本輸出打分:這些確定性檢查和 LLM 評審檢查是對人工標註的補充。同一批評估器可以在實驗、自動化引擎和 CI 外掛中執行,也可以獨立使用。

每個評估器都返回一個歸一化的結果 —— score(約定為 0.0–1.0,越高越好)、valuecommentmetadata —— 因此確定性、啟發式和 LLM 評審類評估器可以互換。軌跡可以以 OpenAI 風格的訊息列表、Potato 規範的 conversation 輪次或 CanonicalTrace 形式傳入;歸一化是自動的。

軌跡匹配(確定性)

將智慧體的工具呼叫序列與參考序列進行比較。

python
from potato.evaluators import TrajectoryMatchEvaluator
 
ev = TrajectoryMatchEvaluator(
    mode="unordered",               # strict | unordered | subset | superset
    tool_args_match_mode="subset",  # exact | ignore | subset | superset
    tool_args_match_overrides={"search": "ignore"},
)
result = ev.evaluate(outputs=agent_trace, reference_outputs=gold_trace)
mode通過條件
strict工具呼叫完全相同,順序一致
unordered工具呼叫的多重集相同,順序不限
subset智慧體只調用了出現在參考中的工具
superset智慧體至少呼叫了參考中的全部工具(允許額外呼叫)

參數比較可獨立配置(exact / ignore / subset / superset),並支援按工具覆蓋。

工具使用正確性

python
from potato.evaluators import ToolUseEvaluator, ToolCallAccuracyEvaluator
 
# Did the agent call a specific tool (optionally with expected args)?
ToolUseEvaluator(expected_tool="submit", expected_args={"id": 1}).evaluate(outputs=trace)
 
# What fraction of reference tool calls did the agent reproduce? (partial credit)
ToolCallAccuracyEvaluator(args_match_mode="exact").evaluate(outputs=trace, reference_outputs=gold)

LLM 評審(無參考)

在沒有黃金參考的情況下為軌跡的品質打分,因為有效的智慧體路徑往往不止一條。它複用 Potato 其餘部分使用的同一份 ai_support 端點配置(OpenAI、Anthropic、Ollama、vLLM 等)。

python
from potato.evaluators import LLMTrajectoryJudge
 
judge = LLMTrajectoryJudge(config=task_config, continuous=True)  # 0.0–1.0 score
result = judge.evaluate(outputs=agent_trace, inputs=task_prompt)

啟發式 / 程式碼評估器

ExactMatchContainsRegexMatchEditDistanceJSONValidJSONSchemaMatch,以及 EmbeddingDistance(惰性匯入 ML 依賴,或注入一個嵌入函式)。匯入該庫本身絕不會引入 ML 棧。

圖軌跡評估(LangGraph)

對於 LangGraph 的節點/轉移評估,Potato 通過一個惰性介面卡複用 MIT 許可的 agentevals 包 —— 只在需要時安裝即可。

以宣告式方式配置評估器

一個登錄檔將名稱對映到評估器,使它們可以在 YAML 中配置(供實驗執行器和自動化引擎使用):

python
from potato.evaluators import build_evaluator, list_evaluators
 
ev = build_evaluator("trajectory_match", {"mode": "unordered"})
result = ev.evaluate(outputs=trace, reference_outputs=gold)

相關內容