GAIA#
简介#
GAIA(General AI Assistants)是一个面向新一代 LLM 的基准,用 450 余道题考察工具使用、网页浏览与多步推理能力。每题都有唯一明确的简短答案(数字、短语,或逗号分隔的列表)。
题目按难度分为三档:
难度 |
说明 |
|---|---|
|
具备基础工具使用能力的强 LLM 应当能解 |
|
需要更自主的规划与更丰富的工具组合 |
|
agent 能力的明显跃迁——多模态信息源、长链推理 |
每个难度都有公开的 validation 划分(带答案)和私有的 test 划分(答案保留给官方 leaderboard)。EvalScope 当前仅支持 validation。
GAIA 在 evalscope 的实现为:每个 sample 在独立 Docker 容器里跑一轮 ReAct agent,仅暴露 bash 一个工具。打分函数(数字 / 列表 / 字符串归一化)逐字 port 自 GAIA 官方 leaderboard。
安装依赖#
GAIA 评测在 Docker 中运行:
安装 Docker:参考 Docker 安装指南,确保守护进程已启动。
安装 evalscope:
pip install evalscope
首次运行会拉取 python:3.11 镜像(约 1.1GB),并从 ModelScope 下载 GAIA 数据集快照(约 110MB),都会缓存供后续复用。
备注
默认走 gaia-benchmark/GAIA 的 ModelScope 镜像,无 gating 也无需 token。如需走 HuggingFace 原版,设置 dataset_hub='huggingface'(须先在 HF 接受数据集条款)。
数据集#
通过 subset_list 在单一 benchmark gaia 内切换难度:
配置 |
加载内容 |
|---|---|
|
仅 Level 1 |
|
Level 1 + 2 |
|
全部三档 |
GAIA 约 1/3 题目附带文件(PDF / xlsx / 图片 / 音频 / ...)。EvalScope 会把数据集 2023/validation/ 目录只读 mount 进沙箱的 /shared_files,agent 通过 prompt 中嵌入的路径提示访问。
运行示例#
下例对应 tests/benchmark/test_agent.py 中的 test_gaia:
import os
from evalscope import TaskConfig, run_task
task_cfg = TaskConfig(
model='qwen3-max',
api_url='https://dashscope.aliyuncs.com/compatible-mode/v1',
api_key=os.getenv('DASHSCOPE_API_KEY'),
eval_type='openai_api',
datasets=['gaia'],
dataset_args={
'gaia': {
'subset_list': ['2023_level1'], # 选择运行哪个或哪些难度
'extra_params': {
'max_steps': 50, # 每个 sample 的 agent loop 上限
'command_timeout': 180.0, # 每条 bash 命令的超时(秒)
'docker_image': 'python:3.11', # 沙箱镜像;完整版自带 curl/wget/git
'network_enabled': True, # 必开:多数题需联网
}
}
},
eval_batch_size=5, # 并发沙箱数
limit=5, # 快速试跑限制;正式评测请去掉
generation_config={
'temperature': 0.7,
'parallel_tool_calls': True,
'stream': True,
}
)
run_task(task_cfg=task_cfg)
最终结果示例:
+-----------+---------+----------+-------------+-------+---------+---------+
| Model | Dataset | Metric | Subset | Num | Score | Cat.0 |
+===========+=========+==========+=============+=======+=========+=========+
| qwen3-max | gaia | mean_acc | 2023_level1 | 5 | 0.2 | default |
+-----------+---------+----------+-------------+-------+---------+---------+
参数#
参数 |
类型 |
默认 |
说明 |
|---|---|---|---|
|
int |
|
每个 sample 的 agent loop 步数上限。对齐 inspect_ai 的 |
|
float |
|
每条 bash 命令的超时时间(秒)。 |
|
str |
|
沙箱镜像。完整版 |
|
bool |
|
是否允许沙箱联网。GAIA 多数题需要联网。 |
备注
GAIA 每个 sample 一个独立 Docker 容器,结束后销毁。eval_batch_size 控制同时持有的容器数,请根据机器资源调整。
评分#
评分函数逐字 port 自 GAIA 官方 leaderboard scorer(Apache 2.0):
数字答案:去除
$/%/,,按 float 解析,严格相等。列表答案(含
,或;):按分隔符切分后逐元素比较(自动判数字 vs 字符串)。字符串答案:去除空格、小写、去标点,严格相等。
不使用 LLM judge。Agent 必须输出经上述归一化后严格匹配的答案——通常通过自动注入的 submit(answer=...) 工具调用完成。
通过 MCP 接入网页能力#
GAIA 默认只有 bash 沙箱,可以 curl/wget 原始 HTML,但无法跑 JS 渲染浏览器,也接不到需要 API key 的搜索引擎。最简洁的补足方式是接入 MCP 服务器(例如 mcp-server-fetch 抓 HTTP,mcp-server-brave-search 关键词搜索)—— 这些 MCP server 跑在 host 进程,不进 docker 沙箱,镜像不需要改。
pip install evalscope[mcp]
evalscope[mcp] 已经把 mcp-server-fetch 一起装进来,下面的示例可以直接跑,无需额外安装。
import sys
from evalscope import TaskConfig, run_task
from evalscope.api.agent import NativeAgentConfig
from evalscope.api.agent.mcp import MCPServerConfigStdio
task_cfg = TaskConfig(
model='qwen3-max',
api_url='https://dashscope.aliyuncs.com/compatible-mode/v1',
eval_type='openai_api',
datasets=['gaia'],
dataset_args={'gaia': {'subset_list': ['2023_level1']}},
agent_config=NativeAgentConfig(
mcp_servers=[
MCPServerConfigStdio(
command=sys.executable,
# ``--ignore-robots-txt``:上游 robots.txt 偶尔会请求失败,加上这个
# 让 fetch 直接尝试目标 URL,避免把所有调用都挡在前面这一步。
args=['-m', 'mcp_server_fetch', '--ignore-robots-txt'],
name='fetch',
),
],
),
limit=5,
)
run_task(task_cfg)
Agent 此时会看到 bash、submit 和 fetch 三个工具,可以直接 fetch(url=...) 抓网页 —— 不需要在 docker 里装额外库,也不再依赖 curl 拼凑。
完整配置参考见 Native Agent Loop → MCP 工具接入(stdio / HTTP transport、工具白名单、env 变量等)。
已知限制#
暂无
web_search/web_browser工具:Phase-1 仅提供bash。Agent 可以用curl/wget加python3解析 HTML,但 JS 渲染页面和需要 API key 的搜索引擎无法直接使用。浏览类题目分数会明显低于具备真实浏览器工具的实现。不支持
test划分:仅支持validation(有公开答案)。如需向官方 leaderboard 提交,请自行收集模型预测并按 leaderboard 要求格式化。长 bash 输出可能撑爆模型 input 长度:
curl一个大 HTML 页会让消息历史快速膨胀,难度高的样本上偶尔会触发模型最大 input 长度限制。在TaskConfig(或测试中)设置ignore_errors=True可让评测在遇到此类异常时继续跑剩余样本。