sora 13274243a0 Bump vendored EvalScope and add K3-ready DPV4 configs.
Keep K3 suite selection and report-schema scoring in bash, merge K3/vision dataset_args into dpv4 yamls, and pin EvalScope at 735d920ee911 with local patches.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 07:30:48 +00:00

140 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Toolathlon
Toolathlon 用于评测智能体在真实 MCP 软件环境中的长程工具使用能力。EvalScope 的 `toolathlon` 集成是官方 Toolathlon evaluation service 的 wrapper不重新实现 MCP 环境、任务容器、agent loop 或官方评分器。
## 安装
```bash
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:8080`
- WebSocket 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` 调试:
```python
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 check
- `global_preparation/how2register_accounts.md`MCP 任务需要的账号、token 和 session
- `configs/global_configs_example.py`:复制为 `configs/global_configs.py`,并配置 `podman_or_docker`
- `global_preparation/pull_toolathlon_image.sh`:拉取官方任务镜像
- `global_preparation/deploy_containers.sh`:部署 Canvas、email、WooCommerce、k8s/kind 等本地服务
- `EVAL_SERVICE_README.md`:启动官方 `eval_server.py` HTTP 服务和 private mode WebSocket proxy
完整 Toolathlon 环境准备好后,在 Toolathlon 仓库中启动官方服务:
```bash
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` 表示不限
如果是内部自用服务,可以关闭限流:
```bash
python eval_server.py 8080 8081 -1 10 -1
```
## 在 EvalScope 中使用自建服务
通过 `extra_params` 指向自建服务:
```python
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 或自建服务,不建议依赖共享公共服务。
官方来源:
- [Toolathlon repository](https://github.com/hkust-nlp/Toolathlon)
- [Toolathlon evaluation service README](https://github.com/hkust-nlp/Toolathlon/blob/main/EVAL_SERVICE_README.md)