最近一年一直在做agent,有做开源也有对接的项目,更有小模型的搭建与训练。做为一直在测试行业混摸打滚这么多年以及互联网测试经验,今天针对Agent整理12个指标。任务完成指标
定义:Agent 在单次执行中成功达成用户目标的概率。公式:完成率 = 成功完成任务数 / 总任务数 × 100%def task_completion_rate(results): """计算端到端任务完成率""" completed = sum(1 for r in results if r["goal_achieved"] is True) total = len(results) return completed / total * 100 if total > 0 else 0
指标 2:N 次运行一致性
定义:同一个任务在 N 次独立运行中成功完成的比例。
公式:一致性 = N 次都成功的任务数 / 总任务数 × 100%
阈值建议:N=5 时一致性 > 80% 视为合格。低于 60% 意味着 Agent 行为高度不可预测。
指标 3:约束完成率
定义 在给定约束条件内完成任务的比率。
典型约束
def constraint_completion(trace, constraints): """检查是否在约束内完成任务""" checks = {} checks["within_time"] = trace["total_duration_ms"] <= constraints["max_duration_ms"] checks["within_tokens"] = trace["total_tokens"] <= constraints["max_tokens"] checks["within_api_calls"] = len(trace["tool_calls"]) <= constraints["max_api_calls"] all_passed = all(checks.values()) return {"passed": all_passed, "details": checks}
工具调用指标
指标 4:工具调用准确率
定义:Agent 在所有工具调用中,正确选择了工具并传入了正确参数的比例。
公式:准确率 = 正确的工具调用次数 / 总工具调用次数 × 100%
工具调用出错的三种典型形式:
选错工具:应该调 search_order 却调了 search_product
参数错误:传了 order_id: "abc" 但系统期望的是数字
省略参数:调用 send_email 时没有传 recipient
指标 5:工具冗余调用率
定义:Agent 调用了不必要的工具的比率。
公式:冗余率 = 冗余调用次数 / 总工具调用次数 × 100%
冗余调用是 Agent 中最隐蔽的成本黑洞。一个看似正常的任务,Agent 可能在内部调用了 8 次 API,而最优解只需要 2 次。
def detect_redundant_calls(trace, optimal_path): """检测冗余的工具调用""" actual_calls = [call["name"] for call in trace["tool_calls"]] # 场景 1:重复调用同一个工具 redundant = [] seen = {} for call in trace["tool_calls"]: key = f"{call['name']}:{call.get('params', '')}" if key in seen: redundant.append(call) seen[key] = True # 场景 2:调用了最优路径外的工具 extra_calls = [c for c in actual_calls if c not in optimal_path] return { "redundant_count": len(redundant) + len(extra_calls), "total_calls": len(actual_calls), "redundant_rate": (len(redundant) + len(extra_calls)) / len(actual_calls) * 100 }
指标 6:工具调用成功率
定义:工具调用中返回成功状态的比例。
公式:成功率 = 返回成功的调用次数 / 总调用次数 × 100%
这个指标与"准确率"的区别:准确率看"有没有选对工具",成功率看"工具调用后 API 是否正常返回"。选对了工具但 API 超时或出错,是成功率的问题。
输出质量指标
指标 7:输出忠实度
定义:Agent 的最终输出内容是否忠实于检索到的信息或工具返回的数据。
检测方式:LLM-as-Judge 或事实性交叉验证。
def faithfulness_check(output, retrieved_docs): """检查输出是否忠实于检索来源""" # 从输出中提取事实性声明 claims = extract_claims(output) # 验证每个声明是否能在检索文档中找到支持 unsupported = [] for claim in claims: if not verify_against_docs(claim, retrieved_docs): unsupported.append(claim) faithfulness = 1 - len(unsupported) / len(claims) return {"faithfulness": faithfulness, "unsupported_claims": unsupported}
阈值建议:> 0.9 合格。低于 0.8 意味着 Agent 存在系统性幻觉,需要排查。
指标 8:上下文遗忘率
定义:在多轮对话中,Agent 遗忘或错误引用前文信息的比例。
适用:多轮对话型 Agent。
测试方式:构造长对话,在最后几轮引用前文信息,检查 Agent 是否能正确回忆。
指标 9:幻觉率
定义:Agent 输出中包含事实性错误、杜撰信息的比例。
公式:幻觉率 = 包含幻觉的回答数 / 总回答数 × 100%
幻觉是 Agent 最危险的缺陷之一——特别是当 Agent 看起来"非常自信"地给出错误信息时。
指标 10:回答有用性
定义:从用户视角看,回答是否直接解决了问题。
评测方式:这个指标通常需要人工评测或用户满意度调查。自动化评测很难准确衡量"有用性",因为有用性是高度主观的。
效率与成本指标
指标 11:平均延迟
定义:从用户输入到 Agent 输出完整回复的平均耗时。
分解:总延迟 = LLM 推理时间 + 工具调用时间 + 检索时间 + 后处理时间
def latency_breakdown(trace): """延迟分解""" spans = trace["spans"] return { "total_ms": sum(s["duration_ms"] for s in spans), "llm_ms": sum(s["duration_ms"] for s in spans if s["type"] == "LLM"), "tool_ms": sum(s["duration_ms"] for s in spans if s["type"] == "TOOL_CALL"), "retrieval_ms": sum(s["duration_ms"] for s in spans if s["type"] == "RETRIEVAL"), }
阈值:实时交互 < 3s,后台处理 < 10s。
指标 12:单位任务成本
定义:完成一个任务平均消耗的 Token 成本 + API 成本。
def cost_per_task(trace, token_price, api_price_map): """计算单次任务的成本""" total_tokens = trace["total_tokens"] token_cost = total_tokens * token_price api_cost = 0 for call in trace["tool_calls"]: api_name = call["name"] api_cost += api_price_map.get(api_name, 0) return {"tokens": total_tokens, "token_cost": token_cost, "api_cost": api_cost, "total_cost": token_cost + api_cost}
# | 指标 | 所属维度 | 自动化评测 | 适用阶段 |
1 | 端到端任务完成率 | 任务完成 | ✅ | 测试/门禁/监控 |
2 | N 次运行一致性 | 任务完成 | ✅ | 测试/门禁 |
3 | 约束完成率 | 任务完成 | ✅ | 测试/门禁 |
4 | 工具调用准确率 | 工具调用 | ✅ | 开发/测试/门禁 |
5 | 工具冗余调用率 | 工具调用 | ✅ | 测试/监控 |
6 | 工具调用成功率 | 工具调用 | ✅ | 测试/监控 |
7 | 输出忠实度 | 输出质量 | ✅ (LLM Judge) | 测试/门禁 |
8 | 上下文遗忘率 | 输出质量 | ✅ | 测试 |
9 | 幻觉率 | 输出质量 | ✅ (LLM Judge) | 测试/门禁 |
10 | 回答有用性 | 输出质量 | ❌ (需人工) | 上线前 |
11 | 平均延迟 | 效率成本 | ✅ | 全阶段 |
12 | 单位任务成本 | 效率成本 | ✅ | 测试/监控 |
#Agent #自动化评测 #评测指标