为什么Agent评测比模型评测难
评估一个大语言模型可以给一道选择题,评估一个Agent需要给它一个完整任务并观察其行为序列。Agent评测面临三个独特挑战:任务开放性、行为多路径、环境依赖性。
评测维度框架
五维评估模型
我们提出五维Agent评估框架:
- 任务完成率:能否完成给定任务
- 路径效率:完成任务用了多少步
- 工具使用质量:工具调用是否恰当、参数是否正确
- 错误恢复能力:遇到错误能否自主恢复
- 自主决策能力:在模糊指令下的判断质量
任务完成率评测
任务分层设计
L1 - 简单任务(1-3步)
例:查询今天的天气
L2 - 中等任务(4-8步)
例:查找北京到上海的机票并比较三个航班的价格
L3 - 复杂任务(9-20步)
例:分析竞品网站并生成包含定价和功能对比的报告
L4 - 开放任务(20+步,目标模糊)
例:帮我规划一个提升产品用户体验的方案
评测协议
class AgentEvaluator:
def __init__(self, tasks, criteria):
self.tasks = tasks # 分层任务集
self.criteria = criteria # 评分标准
def evaluate(self, agent, n_runs=3):
results = {}
for level, tasks in self.tasks.items():
level_results = []
for task in tasks:
run_results = []
for run in range(n_runs):
# 执行任务
trajectory = agent.execute(task)
# 评估
score = self._score_task(task, trajectory)
run_results.append(score)
level_results.append({
"task": task,
"scores": run_results,
"mean": np.mean(run_results),
"std": np.std(run_results)
})
results[level] = level_results
return results
def _score_task(self, task, trajectory):
# 任务是否完成
completion = self._check_completion(task, trajectory)
# 过程是否正确
process = self._check_process(task, trajectory)
# 输出质量
quality = self._check_quality(task, trajectory)
return 0.5 * completion + 0.3 * process + 0.2 * quality
通过率基线
基于主流Agent的测试基线(2026年):
| 任务级别 | GPT-4o Agent | Claude-4 Agent | Llama-4 Agent |
|---|---|---|---|
| L1 | 95% | 96% | 92% |
| L2 | 78% | 82% | 70% |
| L3 | 52% | 58% | 40% |
| L4 | 25% | 30% | 15% |
路径效率评测
最优路径对比
定义每个任务的最优路径步数,计算Agent的实际步数与最优步数的比率:
$$\text{效率} = \frac{\text{最优步数}}{\text{实际步数}}$$
def path_efficiency(task, trajectory):
optimal_steps = task.optimal_solution_steps
actual_steps = len(trajectory.actions)
efficiency = optimal_steps / actual_steps
# 分析冗余步骤
redundant = count_redundant_actions(trajectory)
backtrack = count_backtrack_actions(trajectory)
return {
"efficiency": efficiency,
"redundant_actions": redundant,
"backtrack_actions": backtrack,
"optimal": actual_steps == optimal_steps
}
常见低效模式
- 循环调用:反复调用同一工具获取相同信息
- 过度确认:在明确指令下仍反复确认
- 无效探索:尝试与任务无关的操作
- 回溯过多:走错路后不能高效纠正
工具使用质量
工具选择准确率
Agent是否选择了最合适的工具:
def tool_selection_score(trajectory, expected_tools):
correct_selections = 0
total_selections = 0
for action in trajectory.actions:
if action.type == "tool_call":
total_selections += 1
if action.tool_name in expected_tools:
correct_selections += 1
return correct_selections / total_selections
参数正确率
工具调用的参数是否正确:
def parameter_accuracy(trajectory, expected_calls):
correct_params = 0
total_params = 0
for action, expected in zip(trajectory.actions, expected_calls):
if action.type == "tool_call":
for key, expected_value in expected["params"].items():
total_params += 1
if key in action.params:
if is_equivalent(action.params[key], expected_value):
correct_params += 1
return correct_params / total_params
错误恢复能力
主动注入错误
def error_recovery_test(agent, task, error_scenarios):
results = []
for scenario in error_scenarios:
# 注入错误
trajectory = agent.execute(
task,
injected_error=scenario # 如:API返回500、工具超时等
)
# 评估恢复行为
recovery_time = measure_recovery_steps(trajectory, scenario)
recovery_success = check_task_completion(trajectory, task)
results.append({
"error_type": scenario.type,
"recovery_steps": recovery_time,
"recovered": recovery_success,
"human_intervention_needed": check_human_intervention(trajectory)
})
return results
恢复策略评估
优秀的错误恢复应包含:
- 错误识别:正确识别错误类型和原因
- 策略调整:改变方法而非重试相同操作
- 信息保留:不因错误丢失已完成的工作
- 优雅降级:无法解决时提供替代方案
自主决策能力
模糊指令测试
任务:"帮我准备一下明天的会议"
评估点:
- 是否询问了会议类型?(项目评审 vs 客户演示)
- 是否查找了日历确认会议时间?
- 是否检索了相关项目文档?
- 是否主动准备了议程?
- 准备的深度是否合适?(不会太简单也不会过度)
决策质量评分
def decision_quality_score(task, trajectory):
decisions = extract_decision_points(trajectory)
scores = []
for decision in decisions:
# 是否在需要时主动决策
proactivity = score_proactivity(decision)
# 决策是否合理
rationality = score_rationality(decision, task.context)
# 是否在信息不足时合理询问
inquiry = score_inquiry_behavior(decision)
scores.append(0.4 * proactivity + 0.4 * rationality + 0.2 * inquiry)
return np.mean(scores)
主流Agent评测基准
AgentBench
覆盖6个场景:操作系统、数据库、知识图谱、卡牌游戏、家庭模拟、浏览网页。每个场景都有明确的任务和评分标准。
SWE-bench
软件工程任务基准:给定一个GitHub issue,Agent需要提交修复PR。评估标准是测试是否通过。
WebArena
真实网页交互基准:Agent需要在真实网站上完成任务(购物、搜索、管理内容)。
GAIA
通用AI助手基准:包含需要多步推理、工具使用和信息整合的真实世界问题。
自动化评测流水线
class AutomatedEvalPipeline:
def __init__(self):
self.task_generator = LLMTaskGenerator() # LLM生成任务
self.judge = LLMJudge(model="gpt-4o") # LLM作为评判
self.human_verifier = HumanSpotCheck() # 人工抽检
def run(self, agent, n_tasks=100):
tasks = self.task_generator.generate(n_tasks)
results = []
for task in tasks:
trajectory = agent.execute(task)
# LLM自动评分
auto_score = self.judge.score(task, trajectory)
# 抽样人工验证
if random.random() < 0.1: # 10%抽检
human_score = self.human_verifier.score(task, trajectory)
# 校准自动评分
auto_score = 0.7 * auto_score + 0.3 * human_score
results.append({
"task": task,
"trajectory": trajectory,
"score": auto_score
})
return self._aggregate(results)
LLM-as-Judge的可靠性通过以下方式提升:
- 使用强模型(GPT-4o/Claude-4)作为评判
- 提供详细的评分标准(rubric)
- 多次评判取平均
- 人工校准
结语
Agent评测还处于早期阶段,远不如模型评测成熟。核心难点在于任务的开放性和行为路径的多样性。一个好的Agent评测体系需要结合自动化评测(规模)和人工评测(准确性),持续迭代评估标准。随着Agent能力提升到L4级别,我们可能需要全新的评测范式来评估真正自主的AI智能体。