为什么Agent评测比模型评测难

评估一个大语言模型可以给一道选择题,评估一个Agent需要给它一个完整任务并观察其行为序列。Agent评测面临三个独特挑战:任务开放性、行为多路径、环境依赖性。

评测维度框架

五维评估模型

我们提出五维Agent评估框架:

  1. 任务完成率:能否完成给定任务
  2. 路径效率:完成任务用了多少步
  3. 工具使用质量:工具调用是否恰当、参数是否正确
  4. 错误恢复能力:遇到错误能否自主恢复
  5. 自主决策能力:在模糊指令下的判断质量

任务完成率评测

任务分层设计

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 AgentClaude-4 AgentLlama-4 Agent
L195%96%92%
L278%82%70%
L352%58%40%
L425%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

恢复策略评估

优秀的错误恢复应包含:

  1. 错误识别:正确识别错误类型和原因
  2. 策略调整:改变方法而非重试相同操作
  3. 信息保留:不因错误丢失已完成的工作
  4. 优雅降级:无法解决时提供替代方案

自主决策能力

模糊指令测试

任务:"帮我准备一下明天的会议"

评估点:
- 是否询问了会议类型?(项目评审 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智能体。