2026-07-08 08:57:50 +00:00

7.8 KiB
Raw Blame History

GAIA

简介

GAIAGeneral AI Assistants是一个面向新一代 LLM 的基准,用 450 余道题考察工具使用、网页浏览与多步推理能力。每题都有唯一明确的简短答案(数字、短语,或逗号分隔的列表)。

题目按难度分为三档:

难度 说明
2023_level1 具备基础工具使用能力的强 LLM 应当能解
2023_level2 需要更自主的规划与更丰富的工具组合
2023_level3 agent 能力的明显跃迁——多模态信息源、长链推理

每个难度都有公开的 validation 划分(带答案)和私有的 test 划分(答案保留给官方 leaderboard。EvalScope 当前仅支持 validation

GAIA 在 evalscope 的实现为:每个 sample 在独立 Docker 容器里跑一轮 ReAct agent仅暴露 bash 一个工具。打分函数(数字 / 列表 / 字符串归一化)逐字 port 自 GAIA 官方 leaderboard。

安装依赖

GAIA 评测在 Docker 中运行:

  1. 安装 Docker:参考 Docker 安装指南,确保守护进程已启动。
  2. 安装 evalscope
    pip install evalscope
    

首次运行会拉取 python:3.11 镜像(约 1.1GB),并从 ModelScope 下载 GAIA 数据集快照(约 110MB都会缓存供后续复用。

默认走 [`gaia-benchmark/GAIA`](https://www.modelscope.cn/datasets/gaia-benchmark/GAIA) 的 ModelScope 镜像,无 gating 也无需 token。如需走 HuggingFace 原版,设置 `dataset_hub='huggingface'`(须先在 HF 接受数据集条款)。

数据集

通过 subset_list 在单一 benchmark gaia 内切换难度:

配置 加载内容
subset_list=['2023_level1'] 仅 Level 1
subset_list=['2023_level1', '2023_level2'] Level 1 + 2
subset_list=['2023_level1', '2023_level2', '2023_level3'](默认) 全部三档

GAIA 约 1/3 题目附带文件PDF / xlsx / 图片 / 音频 / ...。EvalScope 会把数据集 2023/validation/ 目录只读 mount 进沙箱的 /shared_filesagent 通过 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 |
+-----------+---------+----------+-------------+-------+---------+---------+

参数

参数 类型 默认 说明
max_steps int 50 每个 sample 的 agent loop 步数上限。对齐 inspect_ai 的 message_limit=100(约 50 个 ReAct 轮次)。
command_timeout float 180.0 每条 bash 命令的超时时间(秒)。
docker_image str python:3.11 沙箱镜像。完整版 python:3.11 自带 curl / wget / git;如需更小可换 python:3.11-slim(约 130MB但需要自己装工具。
network_enabled bool True 是否允许沙箱联网。GAIA 多数题需要联网。
GAIA 每个 sample 一个独立 Docker 容器,结束后销毁。`eval_batch_size` 控制同时持有的容器数,请根据机器资源调整。

评分

评分函数逐字 port 自 GAIA 官方 leaderboard scorerApache 2.0

  • 数字答案:去除 $ / % / ,,按 float 解析,严格相等。
  • 列表答案(含 ,;):按分隔符切分后逐元素比较(自动判数字 vs 字符串)。
  • 字符串答案:去除空格、小写、去标点,严格相等。

不使用 LLM judge。Agent 必须输出经上述归一化后严格匹配的答案——通常通过自动注入的 submit(answer=...) 工具调用完成。

通过 MCP 接入网页能力

GAIA 默认只有 bash 沙箱,可以 curl/wget 原始 HTML但无法跑 JS 渲染浏览器,也接不到需要 API key 的搜索引擎。最简洁的补足方式是接入 MCP 服务器(例如 mcp-server-fetch 抓 HTTPmcp-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 此时会看到 bashsubmitfetch 三个工具,可以直接 fetch(url=...) 抓网页 —— 不需要在 docker 里装额外库,也不再依赖 curl 拼凑。

完整配置参考见 Native Agent Loop → MCP 工具接入stdio / HTTP transport、工具白名单、env 变量等)。

已知限制

  • 暂无 web_search / web_browser 工具Phase-1 仅提供 bash。Agent 可以用 curl / wgetpython3 解析 HTML但 JS 渲染页面和需要 API key 的搜索引擎无法直接使用。浏览类题目分数会明显低于具备真实浏览器工具的实现。
  • 不支持 test 划分:仅支持 validation(有公开答案)。如需向官方 leaderboard 提交,请自行收集模型预测并按 leaderboard 要求格式化。
  • 长 bash 输出可能撑爆模型 input 长度curl 一个大 HTML 页会让消息历史快速膨胀,难度高的样本上偶尔会触发模型最大 input 长度限制。在 TaskConfig(或测试中)设置 ignore_errors=True 可让评测在遇到此类异常时继续跑剩余样本。