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)

相关内容