Toolathlon#
Toolathlon 用于评测智能体在真实 MCP 软件环境中的长程工具使用能力。EvalScope 的 toolathlon 集成是官方 Toolathlon evaluation service 的 wrapper,不重新实现 MCP 环境、任务容器、agent loop 或官方评分器。
安装#
pip install evalscope[toolathlon]
EvalScope wrapper 只需要客户端依赖 httpx 和 websockets。如果使用官方公共服务,不需要安装完整 Toolathlon 仓库。
服务模式#
EvalScope 支持 Toolathlon 官方服务的 private mode。
在 private mode 中,Toolathlon 服务负责运行任务容器、MCP 环境、agent loop 和评分。EvalScope 会启动本地 WebSocket relay;当服务端需要模型响应时,请求会通过 WebSocket 转回 EvalScope 所在机器,再调用你的本地或内网 OpenAI-compatible endpoint。因此即使 Toolathlon 服务在远端,也可以使用 api_url=http://localhost:8000/v1。
官方 Toolathlon client 还支持 public mode,即服务端直接用提交的 API key 调用公共模型 API。EvalScope wrapper 目前固定使用 private mode,让模型 endpoint 和 API key 留在 EvalScope 侧。
官方公共服务#
默认服务是官方公共服务:
HTTP service:
47.253.6.47:8080WebSocket proxy:
47.253.6.47:8081
官方公共服务主要用于快速试跑和调试。根据官方文档,它按 IP 在 24 小时窗口内限流:
每个 IP 每 24 小时累计执行时长 180 分钟
每个 IP 每 24 小时 3 次 evaluation request
累计执行时长低于 180 分钟时,不受 3 次请求数限制
累计执行时长超过 180 分钟后,开始应用 3 次请求数限制
如果提交阶段返回 HTTP 503 Service Unavailable,通常表示官方服务忙,因为服务端一次只运行一个 evaluation job。如果返回 HTTP 429,则表示触发了 IP 限流。
快速调试#
建议先用很小的 task_list 调试:
from evalscope import TaskConfig, run_task
task_cfg = TaskConfig(
model='your-model-name',
api_url='http://localhost:8000/v1',
api_key='your-local-api-key',
datasets=['toolathlon'],
dataset_args={
'toolathlon': {
'extra_params': {
'task_list': ['find-alita-paper'],
'skip_container_restart': True,
}
}
},
limit=1,
)
run_task(task_cfg)
skip_container_restart=True 只建议用于小规模调试。正式评测时应移除它,让官方服务在任务之间重启容器。
自建官方服务#
自建服务可以避开公共服务排队和公共 IP 限流,但它不是一个 docker compose up 就能完成的部署。官方 Docker 镜像 docker.io/lockon0927/toolathlon-task-image:1016beta 主要是任务运行镜像,不包含 Toolathlon evaluation service 所需的所有服务、账号、凭据和评测进程。
启动自建服务前,先按官方 Toolathlon 材料完成环境准备:
README.md:安装依赖、Docker/Podman、configs/global_configs.py、应用凭据、本地服务部署和 smoke checkglobal_preparation/how2register_accounts.md:MCP 任务需要的账号、token 和 sessionconfigs/global_configs_example.py:复制为configs/global_configs.py,并配置podman_or_dockerglobal_preparation/pull_toolathlon_image.sh:拉取官方任务镜像global_preparation/deploy_containers.sh:部署 Canvas、email、WooCommerce、k8s/kind 等本地服务EVAL_SERVICE_README.md:启动官方eval_server.pyHTTP 服务和 private mode WebSocket proxy
完整 Toolathlon 环境准备好后,在 Toolathlon 仓库中启动官方服务:
python eval_server.py 8080 8081 3 10 180
参数含义:
server_port:HTTP 服务端口ws_proxy_port:private mode 的 WebSocket proxy 端口max_submissions_per_ip:每个 IP 每 24 小时请求数限制,-1表示不限max_workers:每个 job 内部最大的 Toolathlon workers 数max_duration_minutes:每个 IP 每 24 小时累计执行时长限制,-1表示不限
如果是内部自用服务,可以关闭限流:
python eval_server.py 8080 8081 -1 10 -1
在 EvalScope 中使用自建服务#
通过 extra_params 指向自建服务:
from evalscope import TaskConfig, run_task
task_cfg = TaskConfig(
model='your-model-name',
api_url='http://localhost:8000/v1',
api_key='your-local-api-key',
datasets=['toolathlon'],
dataset_args={
'toolathlon': {
'extra_params': {
'server_host': 'your.toolathlon.server',
'server_port': 8080,
'ws_proxy_port': 8081,
'workers': 10,
'task_list': ['find-alita-paper'],
}
}
},
limit=1,
)
run_task(task_cfg)
如果使用 CLI,把同样的配置放到 --dataset-args 的 toolathlon.extra_params 下即可。
运维注意点#
官方服务一次只运行一个 evaluation job。
workers控制的是单个 job 内部并行度,不是提交 job 的并发数。官方服务为了驱动 agent loop 和评分,会接收 prompt、模型响应和工具上下文。
需要保持 client protocol 和官方服务版本一致。当前 EvalScope wrapper 对齐 Toolathlon service protocol
1.3。长期或正式评测建议使用 dedicated official service 或自建服务,不建议依赖共享公共服务。
官方来源: