Appearance
68. 当前 AI Agent 有哪些主流的评价指标?
难度 P1 高频 · 岗位 应用 · 频率 ★★★★☆ · 预计阅读 8 min 公司 OpenAI · Anthropic 相关题 Q60 设计模式 · Q71 用户满意度
本题阅读地图
- 面试场景还原 — 1 min
- TL;DR 速记 — 30 sec
- 图解 — 30 sec
- 详细解析 — 5 min
- 4.1 为什么需要多维度评估?
- 4.2 维度一:任务成功率
- 4.3 维度二:工具调用准确率
- 4.4 维度三:推理质量
- 4.5 维度四:用户满意度
- 4.6 评估体系设计实践
- 常见踩坑与反例 — 1 min
- 面试官可能继续追问 — 1 min
面试场景还原
👔面试官:你们团队开发的 AI 客服 Agent 上线三个月了,老板说「用户满意度下降了 15%」,让你负责排查和优化。你会从哪里入手?
🙋♂️我:先看日志,分析哪些场景用户不满意,然后针对性优化。
👔面试官:对,但用户满意度是黑盒指标——下降了 15%,到底是什么原因?是 Agent 没理解用户意图?还是工具调用错了?还是回答质量差?你能设计一套评估体系,帮助快速定位问题吗?
🙋♂️我:呃……可以监控工具调用成功率?还有用户对话的反馈?
👔面试官:很好。完整的 Agent 评估要从四个维度设计:任务成功率看结果,工具调用准确率看执行,推理质量看过程,用户满意度看体验。而且过程指标和结果指标要结合起来用。你能具体讲讲怎么设计吗?
TL;DR 速记
- 评估原则:过程 + 结果双维度,用过程指标诊断问题,用结果指标评估价值
- 维度一 任务成功率:目标达成率、轨迹精确度、完成效率
- 维度二 工具调用准确率:工具选择准确率、参数准确率、结果理解准确率
- 维度三 推理质量:逻辑一致性、任务分解质量、错误恢复能力
- 维度四 用户满意度:显式反馈(点赞)、隐式反馈(重试/放弃)、转人工率
- 关键机制:分层评估(链路层、模型层、用户层)、A/B 测试、持续监控
- 工程实践:指标体系 Dashboard、告警机制、根因分析流程
图解
图 1:Agent 评估体系四层架构
图 2:问题诊断流程
详细解析
为什么需要多维度评估?
单维度评估的局限:
| 只看指标 | 问题 | 后果 |
|---|---|---|
| 只看用户满意度 | 黑盒,无法定位问题 | 知道有问题但不知道怎么改 |
| 只看任务成功率 | 忽略了用户体验 | 任务完成了但用户不满意 |
| 只看工具准确率 | 忽略了整体目标 | 每个工具都用对了但最终目标没达成 |
| 只看推理质量 | 主观难量化 | 评估成本高,难以规模化 |
多维度评估的价值:
用户满意度下降 15%
↓
查过程指标
├── 工具调用准确率:从 95% → 87% ↓
│ └── 根因:近期新增工具,描述不清
│ └── 解决:优化工具描述,加示例
├── 推理质量:逻辑一致性从 92% → 78% ↓
│ └── 根因:换了轻量化模型
│ └── 解决:关键步骤切回大模型
└── 任务成功率:从 88% → 85% ↓
└── 根因:新场景覆盖不足
└── 解决:补充训练数据维度一:任务成功率
定义:端到端任务完成情况,是最核心的结果指标。
三级指标:
| 层级 | 指标 | 定义 | 计算方式 |
|---|---|---|---|
| L1 目标达成 | Task Success Rate | 用户核心需求是否满足 | 成功会话 / 总会话 |
| L2 轨迹精确 | Trajectory Accuracy | 执行路径是否符合预期 | 正确步骤 / 总步骤 |
| L3 完成效率 | Completion Efficiency | 完成任务的资源消耗 | 步数、时间、成本 |
目标达成率细分:
python
class TaskSuccessEvaluator:
"""任务成功评估器"""
def evaluate(self, session: Session) -> TaskSuccessResult:
# 1. 目标达成判断( hardest )
goal_achieved = self.check_goal_achievement(
user_intent=session.user_intent,
final_response=session.final_response,
actions=session.actions
)
# 2. 轨迹精确度
trajectory_score = self.compare_trajectory(
actual=session.executed_steps,
expected=session.optimal_path
)
# 3. 效率指标
efficiency = {
"steps": len(session.executed_steps),
"tokens_consumed": session.total_tokens,
"duration_ms": session.end_time - session.start_time,
"cost_usd": session.total_cost
}
return TaskSuccessResult(
goal_achieved=goal_achieved,
trajectory_score=trajectory_score,
efficiency=efficiency
)
def check_goal_achievement(self, user_intent: str,
final_response: str, actions: list) -> bool:
"""判断目标是否达成"""
# 方法 1:人工标注(ground truth)
# 方法 2:LLM 自动评估
prompt = f"""
用户原始需求:{user_intent}
Agent 执行动作:{actions}
最终回复:{final_response}
请判断用户的核心需求是否被满足。
只回答 YES 或 NO。
"""
result = llm.generate(prompt)
return "YES" in result维度二:工具调用准确率
定义:Agent 选择和使用工具的正确性,是 Agent 失败的最常见原因。
三级指标:
| 层级 | 指标 | 定义 | 典型值 |
|---|---|---|---|
| 工具选择 | Tool Selection Accuracy | 是否选对了工具 | 目标 > 95% |
| 参数填写 | Parameter Accuracy | 参数是否正确 | 目标 > 98% |
| 结果理解 | Result Comprehension | 是否正确理解工具返回 | 目标 > 90% |
评估方法:
python
class ToolUseEvaluator:
"""工具使用评估器"""
def evaluate_tool_selection(self, session: Session) -> float:
"""评估工具选择准确率"""
correct = 0
total = 0
for step in session.steps:
if step.type == "tool_call":
total += 1
# 对比实际选择和期望选择
if step.selected_tool == step.expected_tool:
correct += 1
else:
# 记录错误分类
self.log_error(
error_type="wrong_tool",
expected=step.expected_tool,
actual=step.selected_tool,
context=step.context
)
return correct / total if total > 0 else 1.0
def evaluate_parameter_accuracy(self, session: Session) -> float:
"""评估参数准确率"""
correct = 0
total = 0
for step in session.steps:
if step.type == "tool_call":
total += 1
# 参数验证
if self.validate_params(step.tool_name, step.parameters):
correct += 1
else:
self.log_error(
error_type="wrong_params",
tool=step.tool_name,
params=step.parameters
)
return correct / total if total > 0 else 1.0常见工具调用错误:
| 错误类型 | 占比 | 根因 | 解决策略 |
|---|---|---|---|
| 工具选择错误 | 40% | 工具描述不清、场景模糊 | 优化描述、增加示例 |
| 参数格式错误 | 30% | Schema 复杂、类型错误 | 加强校验、类型检查 |
| 必填参数缺失 | 20% | 必填项标识不清 | 明确标注必填项 |
| 参数值错误 | 10% | 参数值不在枚举范围 | 值域检查、容错设计 |
维度三:推理质量
定义:Agent 中间思考过程的合理性,反映 Agent 的「思维能力」。
评估维度:
| 维度 | 指标 | 评估方法 |
|---|---|---|
| 逻辑一致性 | Consistency Score | LLM 判断思考过程是否前后矛盾 |
| 任务分解质量 | Decomposition Quality | 子任务是否合理、完整、无冗余 |
| 错误恢复能力 | Recovery Ability | 遇到错误能否正确调整策略 |
| 探索效率 | Exploration Efficiency | 是否快速收敛到正确路径 |
推理质量评估示例:
python
class ReasoningEvaluator:
"""推理质量评估器"""
async def evaluate_consistency(self, session: Session) -> float:
"""评估逻辑一致性"""
thoughts = [step.thought for step in session.steps if step.thought]
# 使用 LLM 判断一致性
prompt = f"""
请评估以下推理过程的逻辑一致性。
推理步骤:
{thoughts}
检查:
1. 是否有前后矛盾的陈述?
2. 推理过程是否符合逻辑?
3. 结论是否基于前面的推理?
评分 0-100,只返回数字。
"""
score = int(llm.generate(prompt))
return score / 100
def evaluate_decomposition(self, plan: Plan, execution: Execution) -> float:
"""评估任务分解质量"""
metrics = {
"completeness": self.check_completeness(plan, execution),
"redundancy": self.check_redundancy(execution),
"granularity": self.check_granularity(plan)
}
# 综合评分
return sum(metrics.values()) / len(metrics)维度四:用户满意度
定义:最终用户对 Agent 服务的满意程度,是终极业务指标。
显式反馈:
| 指标 | 定义 | 采集方式 |
|---|---|---|
| 点赞率 | 用户主动点赞比例 | 会话结束后的 👍/👎 |
| 评分 | 用户给出的 1-5 星评分 | 问卷调查 |
| NPS | 净推荐值 | 「你会推荐吗?」0-10 分 |
隐式反馈:
| 指标 | 定义 | 业务含义 |
|---|---|---|
| 重试率 | 用户重复询问比例 | Agent 没回答好 |
| 会话放弃率 | 用户中途离开比例 | 体验差或没解决问题 |
| 转人工率 | 用户要求转人工比例 | Agent 解决不了 |
| 平均会话轮数 | 每会话的对话轮数 | 效率指标,过高说明啰嗦 |
满意度综合计算:
python
class UserSatisfactionEvaluator:
"""用户满意度评估器"""
def calculate_satisfaction(self, session: Session) -> SatisfactionScore:
# 显式反馈(权重 40%)
explicit = 0
if session.user_rating:
explicit = session.user_rating / 5 * 0.4
# 隐式反馈(权重 60%)
implicit = 0
# 未重试 +20%
if not session.has_retry:
implicit += 0.2
# 未转人工 +20%
if not session.transferred_to_human:
implicit += 0.2
# 会话完成(未放弃)+20%
if session.completed:
implicit += 0.2
return SatisfactionScore(
overall=explicit + implicit,
explicit=explicit,
implicit=implicit,
components={
"rating": session.user_rating,
"has_retry": session.has_retry,
"transferred": session.transferred_to_human,
"completed": session.completed
}
)评估体系设计实践
分层评估 Dashboard:
┌─────────────────────────────────────────────────────────────┐
│ Agent 评估 Dashboard │
├─────────────────────────────────────────────────────────────┤
│ 用户层 │
│ ├── 满意度: 87% ████████░░ (目标: 90%) [告警] │
│ ├── 转人工率: 8% ████████░░ (目标: <10%) [正常] │
│ └── 重试率: 12% ██████████░░ (目标: <15%) [正常] │
├─────────────────────────────────────────────────────────────┤
│ 任务层 │
│ ├── 目标达成率: 85% ████████░░ (目标: 90%) [告警] │
│ ├── 轨迹精确度: 92% █████████░░ (目标: 90%) [正常] │
│ └── 平均步数: 4.2 ██████░░░░ (目标: <5) [正常] │
├─────────────────────────────────────────────────────────────┤
│ 工具层 │
│ ├── 工具选择准确率: 94% █████████░░ (目标: 95%) [接近告警] │
│ ├── 参数准确率: 97% ███████████░ (目标: 98%) [正常] │
│ └── 结果理解准确率: 89% ████████░░ (目标: 90%) [接近告警] │
├─────────────────────────────────────────────────────────────┤
│ 推理层 │
│ ├── 逻辑一致性: 88% ████████░░ (目标: 90%) [接近告警] │
│ └── 错误恢复率: 75% ███████░░░ (目标: 80%) [告警] │
└─────────────────────────────────────────────────────────────┘根因分析流程:
python
class RootCauseAnalyzer:
"""根因分析器"""
async def analyze(self, metric_drop: MetricDrop) -> List[RootCause]:
"""分析指标下降的根因"""
causes = []
# 1. 检查是否有新版本上线
if self.has_new_deployment(metric_drop.time_range):
causes.append(RootCause(
type="deployment",
description="新版本上线可能导致指标波动",
confidence=0.7
))
# 2. 检查工具调用错误
tool_errors = self.analyze_tool_errors(metric_drop.sessions)
if tool_errors.significant_increase:
causes.append(RootCause(
type="tool_error",
description=f"{tool_errors.top_error_type} 错误增加",
confidence=0.8,
recommendation="检查工具描述和参数校验"
))
# 3. 检查模型变化
if self.has_model_change(metric_drop.sessions):
causes.append(RootCause(
type="model_change",
description="模型切换可能导致推理质量变化",
confidence=0.6
))
return causesA/B 测试框架:
python
class ABTestEvaluator:
"""A/B 测试评估器"""
def compare_variants(self, variant_a: List[Session],
variant_b: List[Session]) -> ABTestResult:
"""对比两个变体的表现"""
metrics = ["satisfaction", "success_rate", "tool_accuracy", "cost"]
results = {}
for metric in metrics:
score_a = self.calculate_metric(variant_a, metric)
score_b = self.calculate_metric(variant_b, metric)
# 统计显著性检验
p_value = self.significance_test(score_a, score_b)
results[metric] = {
"variant_a": score_a,
"variant_b": score_b,
"improvement": (score_b - score_a) / score_a,
"p_value": p_value,
"significant": p_value < 0.05
}
return ABTestResult(results=results)常见踩坑与反例
踩坑 1:只关注最终满意度
错误做法: 只监控用户满意度,忽视过程指标。
后果: 知道有问题但无法定位,优化无从下手。
踩坑 2:指标定义模糊
错误做法: 「任务成功」没有明确定义,不同人理解不同。
正确做法: 指标要有明确的计算逻辑和判定标准。
踩坑 3:评估成本过高
错误做法: 每个指标都需要人工标注,无法规模化。
正确做法: 采用自动化评估 + 抽样人工校验相结合的方式。
踩坑 4:忽视长尾场景
错误做法: 只看整体指标,忽视长尾场景的失败。
正确做法: 按场景、用户类型分层分析,关注长尾。
踩坑 5:指标之间冲突
错误做法: 只优化单一指标,导致其他指标下降。
正确做法: 采用多目标优化,平衡成本、效果、体验。
面试官可能继续追问
追问 1:怎么评估任务是否成功?(目标达成判断) 答题要点:人工标注(ground truth)、LLM 自动评估(用更强的模型判断)、规则匹配(检查关键信息是否包含)、用户确认(会话结束询问是否解决)。
追问 2:工具调用错误怎么分类和归因? 答题要点:分类:工具选择错误、参数格式错误、必填参数缺失、参数值错误;归因:检查工具描述是否清晰、Schema 是否合理、参数校验是否完善。
追问 3:怎么设计 Agent 的 A/B 测试? 答题要点:明确假设(如「新 Prompt 提升 5% 满意度」)、随机分流、确定样本量(统计功效)、多维度评估(不能只看单一指标)、统计显著性检验。
追问 4:怎么平衡评估成本和评估质量? 答题要点:自动化评估覆盖 80% 场景(LLM 判断、规则匹配)、人工抽样标注覆盖 20% 关键场景、优先级排序(核心指标优先)、持续迭代(根据反馈优化评估方法)。
面试总结
Agent 评估体系是工程化的核心能力。面试时强调三点:
- 四维评估架构:任务成功率(结果)+ 工具调用准确率(执行)+ 推理质量(过程)+ 用户满意度(体验),层层递进
- 过程+结果双维度:用过程指标(工具、推理)诊断问题,用结果指标(任务、满意度)评估价值,缺一不可
- 工程实践:指标体系 Dashboard、根因分析流程、A/B 测试框架、持续监控告警
记住:没有评估就无法优化。面试时展示你能设计完整的评估体系,并用评估数据驱动优化决策的能力。