Tool Eval 评一次动作,Agent Eval 评一系列动作是否安全完成目标。最终文字正确不代表真实操作正确,因此需要结构化 Trace 和权威业务断言。
一次 Tool Call 的六层检查
- Necessity:是否需要调用工具。
- Selection:是否选对工具。
- Arguments:参数类型和业务实体是否正确。
- Authorization:主体是否有权执行。
- Execution:是否成功、幂等且没有重复副作用。
- Result use:Agent 是否正确理解返回结果。
JSON 通过 Schema 只证明形状正确,不证明订单号、金额或租户正确。
可观察 Trace
{
"task_id": "order-status-A1042",
"steps": [
{
"kind": "tool",
"name": "orders_get_by_id",
"args": { "order_id": "A1042" }
},
{ "kind": "answer", "value": "paid" }
],
"final_state": "completed"
}
Trace 记录动作,不记录隐藏思维过程。敏感参数可以保存 hash 或脱敏字段。
Python 离线评测
def evaluate(example):
result = agent.invoke({"order_id": example.order_id, "tools": [], "answer": ""})
return {
"answer_correct": result["answer"] == example.expected_answer,
"tool_correct": result["tools"] == [example.expected_tool],
}
完整 LangGraph 示例见 offline_eval.py下载。
Java AgentScope 示例
Java 工程使用 @Tool 注册只读订单工具,再运行三个 Golden Case。它不调用模型,因此能稳定验证 Tool 实现和契约:
ToolEvalDemo.java下载。
Agent 还要测什么
- 必需和禁止步骤,而不是逐步完全匹配一条参考轨迹。
- 审批、取消、恢复和超时的状态不变量。
- 故障注入后的重试、对账和重复副作用。
- Token、工具次数、墙钟时间和每次成功成本。
下一步
阅读 LLM-as-Judge,处理清晰度、完整性等代码难以判断的标准。