程序化评估器
用 Potato 不依赖 Flask 的评估器库自动为智能体轨迹和文本输出打分 —— 确定性轨迹匹配、工具使用正确性、无参考的 LLM 评审(LLM-as-judge),以及启发式方法(精确匹配、编辑距离、JSON、嵌入向量)。
Potato 附带一个轻依赖的评估器库,可自动为智能体轨迹和文本输出打分:这些确定性检查和 LLM 评审检查是对人工标注的补充。同一批评估器可以在实验、自动化引擎和 CI 插件中运行,也可以独立使用。
每个评估器都返回一个归一化的结果 —— score(约定为 0.0–1.0,越高越好)、value、comment 和 metadata —— 因此确定性、启发式和 LLM 评审类评估器可以互换。轨迹可以以 OpenAI 风格的消息列表、Potato 规范的 conversation 轮次或 CanonicalTrace 形式传入;归一化是自动的。
轨迹匹配(确定性)
将智能体的工具调用序列与参考序列进行比较。
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),并支持按工具覆盖。
工具使用正确性
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 等)。
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)启发式 / 代码评估器
ExactMatch、Contains、RegexMatch、EditDistance、JSONValid、JSONSchemaMatch,以及 EmbeddingDistance(惰性导入 ML 依赖,或注入一个嵌入函数)。导入该库本身绝不会引入 ML 栈。
图轨迹评估(LangGraph)
对于 LangGraph 的节点/转移评估,Potato 通过一个惰性适配器复用 MIT 许可的 agentevals 包 —— 只在需要时安装即可。
以声明式方式配置评估器
一个注册表将名称映射到评估器,使它们可以在 YAML 中配置(供实验运行器和自动化引擎使用):
from potato.evaluators import build_evaluator, list_evaluators
ev = build_evaluator("trajectory_match", {"mode": "unordered"})
result = ev.evaluate(outputs=trace, reference_outputs=gold)相关内容
- Read the Docs 上的完整参考 —— 每个评估器及其选项,与版本匹配
- 数据集与实验 —— 对数据集运行评估器并长期跟踪分数
- CI 评估 —— 用评估器分数把关构建
- 轨迹评估 —— 与之对应的人工环节