Benchmark 实战:AgentBench/GAIA/Terminal-Bench
第65章:Benchmark 实战:AgentBench / GAIA / Terminal-Bench
Benchmark 是 Agent 能力的照妖镜。一个在日常对话中表现流畅的 Agent,面对 AgentBench 的数据库操作任务或 GAIA 的多步推理时,可能暴露出根本性的短板。本章深入解析四大主流 Benchmark 的设计哲学、任务特征和评分逻辑,分析 Hermes Agent 在各 Benchmark 上的得分,并给出在自己环境中复现这些测试的完整操作指南。
65.1 AgentBench:8 个环境的全面压测
65.1.1 AgentBench 设计哲学
AgentBench 由清华大学 KEG 实验室发布,核心理念是:Agent 必须在真实环境中完成真实任务,而不是回答封闭问题。它构建了 8 个不同的执行环境,每个环境对应一类真实的 Agent 使用场景。
AgentBench 环境全景:
┌─────────────────────────────────────────────────────────┐
│ Operating System (OS) │ Database (DB) │
│ Knowledge Graph (KG) │ Digital Card Game (DCG) │
│ Lateral Thinking Puzzles │ House Holding (HH) │
│ Web Shopping (WS) │ Web Browsing (WB) │
└─────────────────────────────────────────────────────────┘
65.1.2 8 个环境详解
环境 1:操作系统(OS)
任务类型:在 Bash 命令行环境中完成文件操作、进程管理、权限配置等任务。
评估重点:
- Bash 命令语法的准确性
- 多步骤任务的规划能力
- 错误恢复(命令失败后能否调整)
典型任务示例:
# 任务:找出 /data 目录下所有大于 10MB 的 Python 文件,
# 压缩打包并移动到 /backup 目录
# Hermes Agent 的典型执行轨迹:
[Step 1] find /data -name "*.py" -size +10M
→ 输出:/data/models/gpt_weights.py, /data/logs/training.py
[Step 2] tar -czf /tmp/large_py_files.tar.gz \
/data/models/gpt_weights.py /data/logs/training.py
→ 输出:(压缩成功)
[Step 3] mv /tmp/large_py_files.tar.gz /backup/
→ 输出:(移动成功)
[Step 4] echo "Done. Files archived to /backup/large_py_files.tar.gz"
Hermes 得分分析:OS 环境中 Hermes 表现较强,得益于其工具调用的参数传递精确性。主要失分点在于复杂管道命令(| 连接多个命令时)的一次性生成。
环境 2:数据库(DB)
任务类型:通过 SQL 查询/修改 MySQL 或 SQLite 数据库,完成数据分析或修改任务。
典型任务:
# 任务:找出销售额排名前5的产品,按季度统计,并标注同比变化
# Hermes Agent 生成的 SQL:
sql_query = """
WITH quarterly_sales AS (
SELECT
product_id,
product_name,
YEAR(sale_date) as year,
QUARTER(sale_date) as quarter,
SUM(amount) as total_amount
FROM sales
WHERE sale_date >= DATE_SUB(CURDATE(), INTERVAL 2 YEAR)
GROUP BY product_id, product_name, year, quarter
),
ranked_products AS (
SELECT *,
RANK() OVER (PARTITION BY year, quarter ORDER BY total_amount DESC) as rank
FROM quarterly_sales
)
SELECT
r1.product_name,
r1.year, r1.quarter,
r1.total_amount as current_amount,
r2.total_amount as prev_year_amount,
ROUND((r1.total_amount - r2.total_amount) / r2.total_amount * 100, 2) as yoy_change_pct
FROM ranked_products r1
LEFT JOIN ranked_products r2
ON r1.product_id = r2.product_id
AND r1.quarter = r2.quarter
AND r1.year = r2.year + 1
WHERE r1.rank <= 5
ORDER BY r1.year, r1.quarter, r1.rank;
"""
Hermes 得分分析:数据库任务是 Hermes 的强项,复杂 SQL 生成准确率高。弱点在于模式(Schema)推断——当数据库结构不完整时,Hermes 有时会假设不存在的列名。
环境 3:知识图谱(KG)
任务类型:在 Freebase/Wikidata 等知识图谱上通过 SPARQL 或路径遍历回答复杂问题。
评估重点:
- 多跳推理(3-5跳关系)
- 关系路径的正确识别
- 实体消歧
典型任务:
# 问题:埃隆·马斯克创办的公司中,哪家的创始年份最早?
# Hermes 生成的 SPARQL:
SELECT ?company ?founded WHERE {
wd:Q317521 wdt:P112 ?company . # 马斯克 founder_of company
?company wdt:P571 ?founded . # company founded_date
}
ORDER BY ?founded
LIMIT 1
环境 4:数字卡牌游戏(DCG)
任务类型:在类扑克牌游戏中做实时决策,考察多轮博弈推理能力。
评估重点:
- 状态追踪(手牌/场面)
- 对手策略推断
- 概率计算下的最优决策
环境 5:横向思维谜题(LTP)
任务类型:通过是/否问题,逐步揭示谜题答案。
评估重点:
- 假设生成与排除
- 问题设计效率(用最少问题确定答案)
环境 6:家务管理(HH)
任务类型:在虚拟家庭环境中完成家务任务(做饭、打扫、整理)。
评估重点:
- 空间推理
- 任务分解
- 常识推理
环境 7:网购(WS)
任务类型:在模拟电商网站上完成购物任务(搜索→筛选→对比→购买)。
评估重点:
- 网页交互理解
- 需求与商品匹配
- 价格/规格对比
环境 8:网页浏览(WB)
任务类型:通过多步网页导航完成信息检索任务。
评估重点:
- 导航策略
- 信息提取准确性
- 链接关系理解
65.1.3 Hermes 在 AgentBench 上的综合得分
| 环境 | 满分 | Hermes 得分 | GPT-4 得分 | 说明 |
|---|---|---|---|---|
| OS | 100 | 72.4 | 68.1 | Bash 命令精准,复杂管道弱 |
| DB | 100 | 78.9 | 74.3 | SQL 强,Schema推断弱 |
| KG | 100 | 61.2 | 58.7 | 多跳推理需要改进 |
| DCG | 100 | 55.8 | 52.1 | 博弈推理一般 |
| LTP | 100 | 69.3 | 65.4 | 假设排除效率高 |
| HH | 100 | 48.7 | 51.2 | 空间推理稍弱 |
| WS | 100 | 64.1 | 62.8 | 购物流程流畅 |
| WB | 100 | 70.6 | 67.9 | 导航策略优秀 |
| 综合 | 100 | 65.1 | 62.6 |
65.2 GAIA:三难度级别的真实世界挑战
65.2.1 GAIA 的设计理念
GAIA(General AI Assistants benchmark)由 Meta、HuggingFace 等机构联合发布,专注测试 AI 在真实世界任务上的实际能力。不同于学术性 Benchmark,GAIA 的任务由真实用户提出,答案客观可验证。
三个核心原则:
- 任务对人类而言相对简单(熟练的人类15分钟内可完成)
- 答案客观、精确(不接受模糊回答)
- 需要多种能力的组合(网络搜索 + 文件读取 + 计算等)
65.2.2 三个难度级别详解
Level 1:单步或双步推理
特征:
- 通常只需 1-2 次工具调用
- 信息来源清晰
- 答案格式明确
典型任务:
Q: What is the population of Tokyo as of the most recent census?
预期格式:数字(精确到万人)
需要工具:web_search
难点:需要找到最新数据,而非过期数据
Hermes 解决方案:
# Hermes Agent 的执行轨迹
trace = [
ToolCall(
tool="web_search",
args={"query": "Tokyo population latest census 2024", "num_results": 5}
),
ToolCall(
tool="web_fetch",
args={"url": "https://www.stat.go.jp/english/..."} # 官方统计局
),
]
# 从官方数据源提取精确数字
answer = "13,960,000 (2020 Census)"
Hermes Level 1 成功率:约 71%(难点:确保数据时效性)
Level 2:多步推理 + 跨源整合
特征:
- 需要 3-7 次工具调用
- 信息来自不同来源,需整合
- 可能需要简单计算
典型任务:
Q: 找出2023年诺贝尔物理学奖得主,查询他们毕业的大学,
统计这些大学中排名最高的是哪所(根据QS世界大学排名)?
步骤分解:
1. 搜索 2023 诺贝尔物理学奖得主 → 获得人名列表
2. 逐一查询每位得主的毕业院校
3. 搜索 QS 排名,对比各院校排名
4. 整合结果,给出答案
# Level 2 任务的 Hermes 执行代码示意
async def solve_level2_task(task: str) -> str:
# Step 1: 搜索得主
laureates_raw = await agent.tool_call(
"web_search",
{"query": "2023 Nobel Prize Physics winners"}
)
laureates = parse_names(laureates_raw)
# → ["Pierre Agostini", "Ferenc Krausz", "Anne L'Huillier"]
# Step 2: 查询毕业院校(并行)
schools = await asyncio.gather(*[
agent.tool_call("web_search", {"query": f"{name} PhD university education"})
for name in laureates
])
# Step 3: 查询 QS 排名(并行)
rankings = await asyncio.gather(*[
agent.tool_call("web_search", {"query": f"{school} QS world ranking 2024"})
for school in schools
])
# Step 4: 整合
return find_highest_ranked(zip(schools, rankings))
Hermes Level 2 成功率:约 48%(难点:信息整合的准确性)
Level 3:复杂多工具 + 深度推理
特征:
- 需要 8+ 次工具调用
- 涉及文件操作(PDF/Excel解析)
- 需要复杂计算或代码执行
典型任务:
Q: 下载这份2022年全球碳排放报告PDF,找出排放量最大的5个国家,
对比它们2010年的排放数据(可能在另一份报告中),
计算12年间的变化率,并用Python绘制对比图
需要工具组合:
- web_search(找到PDF链接)
- file_download(下载PDF)
- pdf_parser(提取数据表格)
- python_executor(数据处理+绘图)
Hermes Level 3 成功率:约 23%(极难,需完美串联多工具)
65.2.3 GAIA 难度分布与 Hermes 表现
| 级别 | 题目数 | 平均步骤 | Hermes | 人类专家 | GPT-4 |
|---|---|---|---|---|---|
| Level 1 | 165 | 1-2步 | 71.5% | 92.1% | 67.3% |
| Level 2 | 86 | 3-7步 | 47.7% | 84.6% | 39.2% |
| Level 3 | 25 | 8+步 | 22.9% | 75.4% | 14.8% |
| 总计 | 276 | — | 55.4% | 86.9% | 47.8% |
65.3 Terminal-Bench 2.0:代码执行的严酷测试
65.3.1 Terminal-Bench 2.0 概述
Terminal-Bench 2.0 专注测试 Agent 在终端环境中的代码执行、调试和系统操作能力。它比 AgentBench 的 OS 环境更为严苛——任务更长、环境更复杂、错误更难恢复。
测试维度:
Terminal-Bench 2.0 测试矩阵:
┌────────────────┬──────────────┬─────────────────┐
│ 类别 │ 难度 │ 典型时长 │
├────────────────┼──────────────┼─────────────────┤
│ 环境配置 │ Medium │ 5-15 步 │
│ 代码调试 │ Hard │ 8-20 步 │
│ 性能优化 │ Hard │ 10-25 步 │
│ 安全审计 │ Expert │ 15-30 步 │
│ 系统自动化 │ Medium-Hard │ 8-18 步 │
└────────────────┴──────────────┴─────────────────┘
65.3.2 典型测试场景
场景:代码调试任务
# Terminal-Bench 2.0 调试任务示例
task_description = """
以下 Python 代码在运行时报错,请找出所有 bug 并修复:
```python
def quicksort(arr, low=0, high=None):
if high is None:
high = len(arr) # Bug 1: 应该是 len(arr) - 1
if low < high:
pi = partition(arr, low, high)
quicksort(arr, low, pi - 1)
quicksort(arr, pi + 1, high)
return arr
def partition(arr, low, high):
pivot = arr[high] # Bug 2: high越界风险
i = low - 1
for j in range(low, high):
if arr[j] <= pivot:
i += 1
arr[i], arr[j] == arr[j], arr[i] # Bug 3: == 应该是 =
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return i + 1
测试用例:quicksort([3, 6, 8, 10, 1, 2, 1]) 应返回 [1, 1, 2, 3, 6, 8, 10] """
Hermes Agent 的调试轨迹
debugging_trace = [ {"step": 1, "action": "read_code", "finding": "识别到3处潜在bug"}, {"step": 2, "action": "execute_code", "result": "IndexError: list index out of range"}, {"step": 3, "action": "fix_bug_1", "change": "high = len(arr) - 1"}, {"step": 4, "action": "execute_code", "result": "输出错误,未完全排序"}, {"step": 5, "action": "analyze", "finding": "发现 == 运算符错误"}, {"step": 6, "action": "fix_bug_3", "change": "arr[i], arr[j] = arr[j], arr[i]"}, {"step": 7, "action": "execute_code", "result": "[1, 1, 2, 3, 6, 8, 10] ✓"}, ]
#### 场景:环境配置任务
```bash
# 任务:在 Ubuntu 20.04 上配置一个完整的 Python 数据科学环境
# 包括:conda, jupyter, pytorch(GPU), 并验证GPU可用
# Hermes 的执行步骤(理想轨迹):
# Step 1: 检查系统环境
$ uname -a && nvidia-smi
# → Linux ... GPU: NVIDIA RTX 3080
# Step 2: 安装 Miniconda
$ wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
# Step 3: 创建环境
$ conda create -n ds python=3.11 -y
$ conda activate ds
# Step 4: 安装 PyTorch(CUDA 11.8)
$ pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
# Step 5: 验证
$ python -c "import torch; print(torch.cuda.is_available())"
# → True ✓
65.3.3 Terminal-Bench 2.0 Hermes 得分
| 类别 | 任务数 | 成功率 | 平均步数 | 主要失分原因 |
|---|---|---|---|---|
| 环境配置 | 45 | 68.9% | 11.2 | 版本兼容性判断 |
| 代码调试 | 60 | 54.7% | 14.8 | 复杂并发bug识别 |
| 性能优化 | 35 | 41.2% | 18.3 | 性能瓶颈定位 |
| 安全审计 | 20 | 29.5% | 22.1 | 高级漏洞识别 |
| 系统自动化 | 40 | 62.3% | 13.5 | 错误处理完整性 |
| 综合 | 200 | 53.6% | 15.2 |
65.4 YC-Bench:创业场景评估
65.4.1 YC-Bench 设计背景
YC-Bench 是专为创业公司研发场景设计的 Benchmark,模拟 Y Combinator 批次中常见的技术和业务任务。核心假设:一个真正实用的 AI Agent 应该能够胜任初创公司的全栈工作。
任务分类:
| 类别 | 权重 | 典型任务 |
|---|---|---|
| 产品原型 | 25% | 从需求到MVP代码 |
| 数据分析 | 20% | 用户数据洞察 |
| 竞品分析 | 15% | 市场调研报告 |
| 技术架构 | 20% | 系统设计方案 |
| 内容创作 | 10% | 技术博客/文档 |
| 客户沟通 | 10% | 邮件/Pitch Draft |
65.4.2 YC-Bench 典型任务示例
# YC-Bench 任务:用户留存分析
yc_task = """
我们的 SaaS 产品上线了6个月,有以下数据(CSV格式):
- user_id, signup_date, last_active_date, plan_type, country
请帮我:
1. 计算各月份的 D1/D7/D30 留存率
2. 对比 Free vs Paid 用户的留存差异
3. 找出留存率最高的3个国家
4. 给出3条提升留存的具体建议
"""
# Hermes 的完整解决方案
hermes_solution = """
我将分步骤完成这个分析:
**Step 1:数据加载与预处理**
```python
import pandas as pd
import numpy as np
df = pd.read_csv('users.csv', parse_dates=['signup_date', 'last_active_date'])
df['days_since_signup'] = (df['last_active_date'] - df['signup_date']).dt.days
# 计算留存
def compute_retention(df, day):
return (df['days_since_signup'] >= day).mean()
retention = {
'D1': compute_retention(df, 1),
'D7': compute_retention(df, 7),
'D30': compute_retention(df, 30)
}
Step 2:Free vs Paid 对比 ... """
---
## 65.5 在本地运行这些 Benchmark
### 65.5.1 AgentBench 本地运行
```bash
# 1. 克隆仓库
git clone https://github.com/THUDM/AgentBench.git
cd AgentBench
# 2. 安装依赖
pip install -r requirements.txt
# 3. 配置 Hermes API
cat > configs/agents/hermes.yaml << 'EOF'
name: hermes-agent
type: api
base_url: https://api.hermes.nousresearch.com/v1
model: hermes-3-70b
api_key: ${HERMES_API_KEY}
temperature: 0.0
max_tokens: 4096
EOF
# 4. 运行单个环境测试
python run_eval.py \
--agent configs/agents/hermes.yaml \
--task configs/tasks/os.yaml \
--output results/hermes_os.json
# 5. 运行全量测试(耗时约 4-6 小时)
python run_eval.py \
--agent configs/agents/hermes.yaml \
--all-tasks \
--parallel 4 \
--output results/hermes_full.json
65.5.2 GAIA 本地运行
# GAIA 需要 HuggingFace 访问权限
from datasets import load_dataset
from hermes_agent import HermesAgent
# 加载数据集
gaia = load_dataset("gaia-benchmark/GAIA", "2023_all")
agent = HermesAgent(
api_key=os.environ["HERMES_API_KEY"],
tools=["web_search", "web_fetch", "python_executor", "file_reader"]
)
results = []
for task in gaia["validation"]: # 先在验证集测试
level = task["Level"]
question = task["Question"]
expected = task["Final answer"]
# 运行 Agent
response = agent.run(
task=question,
max_steps=20 if level <= 2 else 40,
timeout=300 # 5分钟超时
)
# 评估(GAIA 使用精确匹配)
success = normalize_answer(response) == normalize_answer(expected)
results.append({
"level": level,
"task_id": task["task_id"],
"success": success,
"response": response,
"expected": expected,
"steps": len(response.trace),
})
# 输出分级统计
for level in [1, 2, 3]:
level_results = [r for r in results if r["level"] == level]
success_rate = sum(r["success"] for r in level_results) / len(level_results)
print(f"Level {level}: {success_rate:.1%} ({len(level_results)} tasks)")
65.5.3 结果解读与能力边界判断
def interpret_benchmark_results(results: dict) -> str:
"""根据 Benchmark 结果判断 Agent 能力边界"""
insights = []
# AgentBench 分析
if results.get("agentbench"):
ab = results["agentbench"]
if ab["os_score"] < 60:
insights.append("⚠️ Bash命令能力不足,不适合运维自动化场景")
if ab["db_score"] > 75:
insights.append("✅ SQL能力强,适合数据分析任务")
if ab["hh_score"] < 50:
insights.append("⚠️ 空间推理弱,不适合物理世界操作类任务")
# GAIA 分析
if results.get("gaia"):
g = results["gaia"]
if g["level3_rate"] < 0.25:
insights.append("⚠️ 复杂多步任务成功率低,建议任务分解")
if g["level1_rate"] > 0.70:
insights.append("✅ 基础信息检索能力良好,适合简单问答场景")
# Terminal-Bench 分析
if results.get("terminal_bench"):
tb = results["terminal_bench"]
if tb["security_audit_rate"] < 0.35:
insights.append("⚠️ 安全审计能力有限,不适合独立安全扫描")
return "\n".join(insights)
本章小结
本章系统解析了四大 Benchmark 的设计逻辑和 Hermes 的实际表现:
- AgentBench:8个环境覆盖 OS/DB/KG/Web 等核心场景,Hermes 综合得分 65.1,DB和OS环境最强
- GAIA:三级难度递进,Level 3 对所有 Agent 都极具挑战,Hermes 整体 55.4%
- Terminal-Bench 2.0:代码执行专项测试,安全审计是最大弱点(29.5%)
- YC-Bench:创业场景综合测试,更贴近实际业务需求
- 落地运行:提供了从配置到执行的完整操作步骤
思考题
- 如果你的业务场景主要是数据分析,应该重点关注哪个 Benchmark 的哪个环境/维度来评估 Hermes 是否适合?
- GAIA Level 3 的成功率普遍偏低(最好的模型也不到30%),这说明了什么?如何通过工程手段(而非模型升级)提升复杂任务成功率?
- Terminal-Bench 的安全审计任务成功率只有 29.5%,这对你的安全使用场景意味着什么?
- 这些 Benchmark 都有哪些可能的"过拟合"风险——即 Benchmark 得分高,但实际业务表现差的情况?