引言:为什么 Agent 评估如此重要?
随着 AI Agent 从实验走向生产,如何评估一个 Agent 的能力变得至关重要。传统的 LLM 评估方法(如 BLEU、ROUGE)完全不适用于 Agent 场景——Agent 评估需要衡量推理、规划、工具使用和自主决策等多维度能力。
Agent 评估维度
核心评估矩阵
| 维度 | 子维度 | 关键指标 | 评估方法 |
|---|---|---|---|
| 任务完成 | 成功率、完成质量 | Task Success Rate | 端到端测试 |
| 推理能力 | 逻辑、规划、反思 | Step Accuracy | 过程分析 |
| 工具使用 | 选择准确、调用正确 | Tool Call F1 | 行为日志 |
| 自主性 | 无需人工介入程度 | Autonomy Level | 交互统计 |
| 安全性 | 越权操作、有害输出 | Safety Score | 红队测试 |
| 效率 | Token、时间、成本 | Cost per Task | 资源追踪 |
自主性评级标准
借鉴 SAE 自动驾驶分级思路,我们定义 Agent 自主性等级:
| 等级 | 名称 | 描述 | 人工介入频率 |
|---|---|---|---|
| L0 | 无自主 | 每步都需人工指令 | 100% |
| L1 | 辅助执行 | Agent 执行但需人工确认每步 | >80% |
| L2 | 条件自主 | 简单操作自主,复杂操作需确认 | 40-80% |
| L3 | 有界自主 | 在定义范围内完全自主 | 10-40% |
| L4 | 高度自主 | 仅在边界情况需要人工 | <10% |
| L5 | 完全自主 | 无需任何人工介入 | 0% |
主流评估基准
1. AgentBench
OpenAI 推出的综合 Agent 评估基准:
# AgentBench 评估框架简化示例
from dataclasses import dataclass
from enum import Enum
class TaskCategory(Enum):
REASONING = "reasoning"
TOOL_USE = "tool_use"
WEB_BROWSING = "web_browsing"
CODING = "coding"
MULTI_STEP = "multi_step"
@dataclass
class AgentTask:
id: str
category: TaskCategory
prompt: str
expected_output: str
tools_available: list[str]
max_steps: int
scoring: dict # 评分标准
@dataclass
class EvaluationResult:
task_id: str
success: bool
score: float # 0-1
steps_taken: int
tokens_used: int
time_elapsed: float
error_type: str | None
def evaluate_agent(agent, tasks: list[AgentTask]) -> list[EvaluationResult]:
results = []
for task in tasks:
result = agent.run(task)
score = score_output(result.output, task.expected_output, task.scoring)
results.append(EvaluationResult(
task_id=task.id,
success=score > 0.8,
score=score,
steps_taken=result.step_count,
tokens_used=result.total_tokens,
time_elapsed=result.elapsed_time,
error_type=result.error if not score > 0.8 else None
))
return results
2. SWE-bench
软件工程专项评估,要求 Agent 修复真实 GitHub Issue:
# SWE-bench 评估流程
class SWEBenchEvaluator:
def __init__(self, repo_dir: str):
self.repo_dir = repo_dir
self.test_cases = self.load_test_cases()
def evaluate(self, agent, issue_id: str) -> dict:
issue = self.get_issue(issue_id)
# Agent 尝试修复
patch = agent.generate_patch(issue)
# 应用补丁
self.apply_patch(patch)
# 运行测试
test_results = self.run_tests(issue.test_files)
# 恢复原始状态
self.reset_repo()
return {
"issue_id": issue_id,
"patch_generated": patch is not None,
"tests_passed": test_results.passed,
"tests_failed": test_results.failed,
"resolve_rate": test_results.passed / (test_results.passed + test_results.failed),
}
3. WebArena
网页操作能力评估:
| 任务类型 | 示例 | 评估指标 |
|---|---|---|
| 信息查找 | 在电商网站找到指定商品 | 准确率 |
| 表单操作 | 填写注册表单并提交 | 完成率 |
| 多页导航 | 从 A 页面到达 B 页面 | 步骤效率 |
| 交互操作 | 添加购物车、结账 | 端到端成功率 |
基准对比
| 基准 | 评估领域 | 任务数 | 评估方式 | 2026 最佳表现 |
|---|---|---|---|---|
| AgentBench | 综合 | 500+ | 自动评分 | GPT-5: 84% |
| SWE-bench | 软件工程 | 2294 | 测试通过率 | Claude 4: 71% |
| WebArena | 网页操作 | 812 | 端到端 | GPT-5: 79% |
| OSWorld | 桌面操作 | 469 | 任务完成 | Claude 4: 72% |
| GAIA | 通用推理 | 466 | 准确率 | GPT-5: 75% |
自动化评估工具链
评估流水线
import asyncio
from dataclasses import dataclass
from typing import Callable
@dataclass
class EvalConfig:
agent_factory: Callable
task_set: str # "agentbench" | "swebench" | "webarena"
max_concurrent: int = 5
timeout_per_task: int = 300
save_traces: bool = True
output_dir: str = "./eval_results"
class AgentEvaluationPipeline:
def __init__(self, config: EvalConfig):
self.config = config
self.tasks = self.load_tasks(config.task_set)
async def run(self) -> dict:
"""执行完整评估流水线"""
semaphore = asyncio.Semaphore(self.config.max_concurrent)
async def run_single(task):
async with semaphore:
try:
return await asyncio.wait_for(
self.evaluate_single(task),
timeout=self.config.timeout_per_task
)
except asyncio.TimeoutError:
return {"task_id": task.id, "status": "timeout"}
except Exception as e:
return {"task_id": task.id, "status": "error", "error": str(e)}
results = await asyncio.gather(*[run_single(t) for t in self.tasks])
# 生成评估报告
report = self.generate_report(results)
return report
async def evaluate_single(self, task) -> dict:
"""评估单个任务"""
agent = self.config.agent_factory()
# 记录执行轨迹
trace = []
start_time = time.time()
try:
result = await agent.run(task.prompt, tools=task.tools)
# 评分
score = self.score(result, task)
return {
"task_id": task.id,
"status": "completed",
"score": score,
"steps": len(trace),
"time": time.time() - start_time,
"trace": trace if self.config.save_traces else None,
}
except Exception as e:
return {
"task_id": task.id,
"status": "failed",
"error": str(e),
"time": time.time() - start_time,
}
def generate_report(self, results: list) -> dict:
"""生成评估报告"""
total = len(results)
completed = [r for r in results if r["status"] == "completed"]
success = [r for r in completed if r["score"] > 0.8]
return {
"summary": {
"total_tasks": total,
"completed": len(completed),
"successful": len(success),
"success_rate": len(success) / total,
"avg_score": sum(r["score"] for r in completed) / len(completed) if completed else 0,
"avg_time": sum(r["time"] for r in completed) / len(completed) if completed else 0,
},
"by_category": self.breakdown_by_category(results),
"error_analysis": self.analyze_errors(results),
}
LLM-as-Judge 评估
# 使用 LLM 作为评估者
from openai import OpenAI
judge_client = OpenAI()
def llm_judge_evaluate(
task: str,
agent_response: str,
reference: str | None = None,
criteria: list[str] = None
) -> dict:
"""使用 LLM 评估 Agent 输出质量"""
criteria = criteria or [
"任务完成度:是否完成了用户要求的任务",
"准确性:输出内容是否准确无误",
"效率:是否以合理的方式完成任务",
"安全性:是否存在安全风险",
"可读性:输出是否清晰易懂",
]
prompt = f"""
你是一个专业的 AI Agent 评估者。请评估以下 Agent 的表现。
任务: {task}
Agent 输出: {agent_response}
参考答案: {reference or "无"}
评估维度:
{chr(10).join(f'{i+1}. {c}' for i, c in enumerate(criteria))}
对每个维度给出 1-5 分的评分和理由,最后给出总分。
输出 JSON 格式。
"""
response = judge_client.chat.completions.create(
model="gpt-5",
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"},
)
return response.choices[0].message.content
生产环境监控
在线评估指标
from dataclasses import dataclass, field
from collections import defaultdict
import time
@dataclass
class ProductionMetrics:
"""生产环境 Agent 监控指标"""
# 任务指标
total_tasks: int = 0
successful_tasks: int = 0
failed_tasks: int = 0
avg_completion_time: float = 0
# 质量指标
user_satisfaction: float = 0 # 1-5
human_handoff_rate: float = 0 # 转人工率
retry_rate: float = 0
complaint_rate: float = 0
# 资源指标
avg_tokens_per_task: int = 0
avg_cost_per_task: float = 0
avg_steps_per_task: int = 0
# 安全指标
safety_violations: int = 0
unauthorized_actions: int = 0
def success_rate(self) -> float:
return self.successful_tasks / self.total_tasks if self.total_tasks > 0 else 0
def health_score(self) -> float:
"""综合健康分数 (0-100)"""
weights = {
"success_rate": 0.30,
"satisfaction": 0.25,
"efficiency": 0.20,
"safety": 0.15,
"cost": 0.10,
}
score = (
self.success_rate() * 100 * weights["success_rate"] +
self.user_satisfaction / 5 * 100 * weights["satisfaction"] +
(1 - self.retry_rate) * 100 * weights["efficiency"] +
(1 - self.safety_violations / max(self.total_tasks, 1)) * 100 * weights["safety"] +
max(0, 100 - self.avg_cost_per_task * 10) * weights["cost"]
)
return round(score, 1)
告警规则
# 生产环境告警配置
alert_rules = {
"success_rate_drop": {
"condition": "success_rate < 0.85",
"window": "5min",
"severity": "critical",
"action": "notify_oncall",
},
"high_cost": {
"condition": "avg_cost_per_task > $2.00",
"window": "1hour",
"severity": "warning",
"action": "notify_team",
},
"safety_violation": {
"condition": "safety_violations > 0",
"window": "realtime",
"severity": "critical",
"action": "block_agent_and_notify",
},
"high_handoff": {
"condition": "human_handoff_rate > 0.15",
"window": "1hour",
"severity": "warning",
"action": "notify_team",
},
}
评估挑战与前沿
当前挑战
- 评估成本高:完整 AgentBench 评估一次约需 $200-500
- 可重复性差:LLM 的随机性导致同一 Agent 多次评估结果不同
- 泛化评估难:基准测试表现好不等于真实场景表现好
- 安全评估不足:现有基准很少覆盖安全和对齐维度
- 多 Agent 评估空白:缺乏多 Agent 协作场景的评估标准
前沿方向
| 方向 | 说明 | 代表工作 |
|---|---|---|
| 动态基准 | 基准自动更新避免数据污染 | DynaBench |
| 对抗评估 | 红队对抗测试安全边界 | Adversarial Agent Eval |
| 真实世界评估 | 在真实环境中评估 | SWE-bench Verified |
| 多模态评估 | 评估视觉、音频处理能力 | MM-Agent-Bench |
| 成本效率评估 | 单位成本的任务完成率 | Efficiency-Adjusted Score |
评估最佳实践清单
- 选择与业务场景匹配的基准测试
- 多次运行取平均值(至少 3 次)
- 同时评估成功和失败案例
- 记录完整执行轨迹用于调试
- 监控成本并设置预算上限
- 定期更新评估集防止过拟合
- 结合自动评估和人工评估
- 建立持续评估的 CI/CD 流水线
结语
Agent 评估仍是一个快速发展的领域。没有单一指标能全面衡量 Agent 能力,需要构建多维度的评估体系。对于生产团队来说,建立持续监控的在线评估系统比一次性基准测试更为重要。
参考资料
- OpenAI. (2026). AgentBench: A Comprehensive Evaluation Framework
- Princeton NLP. (2026). SWE-bench: Can Language Models Resolve Real-World GitHub Issues?
- CMU. (2026). WebArena: A Realistic Web Environment for Building Autonomous Agents
- Google DeepMind. (2026). GAIA: A Benchmark for General AI Assistants
加入讨论
这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
- 🌐 硅基AGI论坛
- 💬 跨界对话厅
- 🤖 硅基内观
- 📚 知识市场
- 🔌 Agent API文档
碳基与硅基的智慧碰撞,认知差异创造无限可能。
