跳到主要内容

SkillsBench

Roller 支持运行 SkillsBench 的 with-skill 和 no-skill 两组实验。上游数据位于 https://github.com/benchflow-ai/skillsbench。

v1.1 共 87 题,每题均由仓库内的 verifier/test.sh 评分,不调用 LLM judge。上游 README 中的 GPT-5.5 指被测 Agent。仅当 collect --model 指向 GPT-5.5 服务时,结果才能与 该条目比较;使用其他模型时,verifier 虽然相同,模型分数并不等价。

准备并运行​

Bash
# 下载并校验 SkillsBench v1.1,然后构建 Roller OpenCode 基础镜像。
scripts/prepare-skillsbench.sh "$PWD/.benchmarks/skillsbench-v1.1"
export SKILLSBENCH_ROOT="$PWD/.benchmarks/skillsbench-v1.1"

export MODEL_API_BASE_URL=https://api.example.com/v1
export MODEL_API_KEY=replace-with-your-api-key
export ROLLER_RUN_ROOT="$PWD/runs/skillsbench"
mkdir -p "$ROLLER_RUN_ROOT"

roller collect --bench skillsbench --bench-root "$SKILLSBENCH_ROOT" \
--bench-variant with-skill --model example-model \
--opencode-api-base "$MODEL_API_BASE_URL" \
--opencode-api-key-env MODEL_API_KEY --parallel 1 --grader-parallel 1 \
--output "$ROLLER_RUN_ROOT" --run-name with-skill

roller collect --bench skillsbench --bench-root "$SKILLSBENCH_ROOT" \
--bench-variant no-skill --model example-model \
--opencode-api-base "$MODEL_API_BASE_URL" \
--opencode-api-key-env MODEL_API_KEY --parallel 1 --grader-parallel 1 \
--output "$ROLLER_RUN_ROOT" --run-name no-skill

prepare-skillsbench.sh 接受任意持久化目录。目录不存在时,脚本下载 v1.1;目录已存在时, 脚本仅校验 commit,不改动数据。脚本还会构建 roller-opencode:1.18.30,且不会读取或写入 API key。如需手工准备,请检出 SkillsBench 的 v1.1 tag,再构建 docker/opencode。

运行前,请将示例 API 地址、key 和模型 ID 替换为模型服务商提供的值。

两条 collect 命令会在各自的 run 目录写入 tasks.jsonl 和 bench-report.json。 SkillsBench 默认每题运行 3 次,每个 OpenCode turn 最多 100 步,单次模型响应最多 32768 tokens。可用 --samples、--opencode-max-steps 和 --opencode-output-tokens 修改这些值。

正式对比请固定在 v1.1 tag,对应 commit b63b7b2850226b6aa4fb5929a8c1ac7bc4d9a6af。建议先添加 --bench-task-id 3d-scan-calc 运行一题,确认模型、镜像和输出目录均正常。 --bench-category 与 --bench-task-id 可以重复传入。对于较慢的模型,可用 --bench-timeout-multiplier 2 同时延长 Agent 和 verifier 的时间上限。

这两次运行也可以写成 YAML 文件,并通过 roller bench run 启动,见 Benchmark 运行配置。第二层配置选择 no-skill 运行:

Bash
roller bench run --config examples/benchmarks/base.yaml \
--extra-config examples/benchmarks/skillsbench.yaml

roller bench run --config examples/benchmarks/base.yaml \
--extra-config examples/benchmarks/skillsbench.yaml \
--extra-config examples/benchmarks/skillsbench-no-skill.yaml

Roller 如何执行任务​

Roller 先读取 integrations/agentbeats/task_sets/skillsbench-v1.1.json 中的任务顺序。 该文件不存在时,才扫描 tasks/。

每个任务都有自己的 environment/Dockerfile。Roller 先构建该环境,再叠加固定版本的 OpenCode harness。镜像 tag 包含环境内容摘要,因此相同环境可以复用; --rebuild-task-images 会强制重建。Agent 的工作目录为 Dockerfile 中最后一个 WORKDIR。

基础环境中的 skill 副本会在构建时移除。运行 with-skill 时,Roller 注入 environment/skills/;运行 no-skill 时,Roller 清理各 harness 支持的 skill 目录。 两组实验使用同一个任务环境,仅在 skill 是否可用上存在差异。

Agent 退出后,Roller 才将 verifier/ 复制到容器中,执行 /verifier/test.sh,再读取 /logs/verifier/reward.txt。Agent 在作答期间无法查看 verifier 文件。Agent timeout、 Agent error、verifier error 和基础设施错误均记录在报告中,但不计入 pass rate 和 mean reward。

网络、缓存和已知限制​

首次运行某题时,可能需要下载大量依赖。Docker build、任务容器和 verifier 会继承当前 shell 的 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY,这些值不会写入导出的 task JSONL。不经过代理的模型地址应加入 NO_PROXY。Verifier 会重试测试开始前出现的临时下载或 DNS 错误;重试后仍失败的样本标为不可计分。正式输出应写入持久化共享存储。

当前 adapter 只读取上游默认的 tasks/,不会自动加入 tasks-extra/。任务声明的 taxonomy、CPU、内存、存储、GPU、网络和 OS 会保存在 bench metadata 中,但 Roller 不会将 这些值自动转换为 Docker resource limit。如需严格控制资源,请在运行环境外层统一设置。 少量任务包含 compose 文件;这些任务的 verifier 可以在主容器内启动所需服务,因此 Roller 仍按 主 Dockerfile 构建。