跳转至

27 Agent Eval

难度:中高级|前置:结构化输出、Tool、RAG、Workflow|目标:知道修改后到底变好还是变坏

为什么“试几个问题感觉不错”不够

模型输出不确定,失败可能只在特定表达、数据或工具组合出现。没有固定评测集:

  • Prompt 修改无法比较;
  • 模型升级无法回归;
  • 失败靠用户投诉发现;
  • 成本与质量无法权衡。

从任务分解指标

一个 Agent 可以分别评估:

输入与结构

  • Schema 成功率;
  • 意图识别;
  • 缺失信息检测。

工具

  • 工具选择正确率;
  • 参数正确率;
  • 不该调用时是否调用;
  • 调用次数;
  • 重复副作用。

RAG

  • 正确资料召回率;
  • 引用正确性;
  • 无证据时拒答。

最终任务

  • 任务完成率;
  • 事实正确性;
  • 用户目标覆盖;
  • 人工接管率。

工程

  • 延迟;
  • Token;
  • 费用;
  • 错误和重试;
  • 平均步骤数。

评测方法

方法 适合 风险
精确规则 Schema、参数、标准答案 覆盖开放答案有限
程序模拟 工具轨迹、状态变化 模拟与真实环境差异
人工标注 高风险、开放质量 成本高、主观
LLM-as-Judge 大规模初筛 Judge 也会偏差

优先用确定性规则;开放质量再结合人工和 Judge。Judge 必须用人工样本校准。

数据集结构

{
  "case_id": "offline-017",
  "input": "为什么设备 A 昨天离线?",
  "expected_tools": ["get_online_history"],
  "forbidden_tools": ["restart_device"],
  "assertions": {
    "must_cite_evidence": true
  },
  "tags": ["iot", "read_only", "ambiguous_time"]
}

包含正常、边界、对抗和历史失败案例。

版本

每次结果关联:

  • 数据集版本;
  • Prompt 版本;
  • 模型版本;
  • Tool Schema 版本;
  • 代码版本;
  • 评测器版本。

自测

  1. 工具正确率和任务完成率为什么要分开?
  2. LLM-as-Judge 为什么需要人工校准?
  3. 失败案例为什么应进入回归集?
  4. 一次评测至少要记录哪些版本?

完成标准

  • 能设计 20 条最小评测集
  • 能定义工具、结果和工程指标
  • 能区分规则、人工与 Judge
  • 完成 Agent Eval 实验

下一单元:可观测性、成本与模型路由