跳到主要内容

Benchmark 运行配置

roller collect --bench 通过命令行参数接收一次 benchmark 运行的全部设置。roller bench run 从分层的 YAML 或 JSON 文件读取相同的设置,并启动同一个 collect --bench 运行,因此一次运行 可以作为文件审阅、纳入版本管理并重复执行。

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

核对计划后,删除 --dry-run 即可开始运行。运行目录、tasks.jsonl、score.json 和 bench-report.json 与 collect --bench 的产物相同,info.json 另在 bench_run_config 中 记录配置来源。

roller init 会将示例配置复制到工作目录的 examples/benchmarks/。在源码仓库中, scripts/run-benchmark.sh 负责定位 roller 可执行文件,并将参数传给 roller bench run。

配置分层​

--config 接受 YAML 或 JSON 文件。--extra-config 接受文件或内联 JSON 对象,可重复指定, 后面的层覆盖前面的层。对象递归合并,列表和标量整体替换。将某个可选对象设为 null 即丢弃 该对象,例如切换 Harness 时清空上一层的 harness.extra。

示例将模型连接和执行设置放在 base.yaml,每个 benchmark 的任务选择、评分环境和 Harness 各放在一个文件中:

YAML
schema_version: roller.bench-run/v1

benchmark:
id: wildclawbench
root: ${WILDCLAWBENCH_ROOT}
variant: null
categories: []
task_ids: []
timeout_multiplier: 1
extra: {}
environment:
JUDGE_MODEL: ${ROLLER_JUDGE_MODEL}

model:
id: ${ROLLER_MODEL_ID}
provider: roller # OpenClaw 命名空间,其他 Harness 忽略
base_url: ${ROLLER_MODEL_BASE_URL}
api_key_env: ROLLER_MODEL_API_KEY
api_protocol: openai-completions # 可选;省略时由 Harness 推断
thinking: high

harness:
id: openclaw
image: wildclawbench-ubuntu:v1.3
extra:
max_tokens: 32768

execution:
output: ${ROLLER_BENCH_OUTPUT}
run_name: wildclawbench
parallel: 4
grader_parallel: 2
samples: 1
retries: 0
timeout: 600
wire_trace: actf
keep_thinking: true
pass_env: []

环境变量引用必须占据整个字段值,例如 ${ROLLER_MODEL_BASE_URL}。https://${HOST}/v1 这类 写法以及引用未设置的变量都会报错。model.api_key_env 填写保存模型密钥的宿主机变量名, 密钥本身不写入文件。model.base_url 不得包含 userinfo、query 或 fragment,因为该地址会 作为参数传给 Harness。

Roller 在启动容器前检查合并后的配置,未知字段会报错。 schemas/bench-run.schema.json 描述单个配置层, 供编辑器和 CI 使用,因此单层可以省略由其他层提供的字段。

字段​

字段collect 参数用途
benchmark.id--benchroller bench list 列出的 adapter
benchmark.root--bench-root已准备好的上游 checkout 或数据目录
benchmark.variant--bench-variant评测条件,例如 SkillsBench 的 with-skill
benchmark.categories / task_ids--bench-category / --bench-task-id筛选项,空列表表示全选
benchmark.timeout_multiplier--bench-timeout-multiplier按倍数缩放每个任务的超时
benchmark.environment无仅在本次进程中设置、结束后恢复的环境变量,用于 judge 和 benchmark 工具
benchmark.extra见下文所选 benchmark 的专属参数
model.id--model被测模型
model.label--model-label用于 sample 目录和容器名称的本地标签
model.provider无OpenClaw 的 provider 命名空间,默认为 roller;其他 Harness 原样使用 model.id
model.base_url--api-base模型 API 地址
model.api_key_env--api-key-env保存模型密钥的宿主机环境变量名
model.api_protocol无API 协议;写入生成的 OpenClaw provider,其他 Harness 则检查它是否与自身协议一致
model.params无生成的 OpenClaw 模型条目的附加字段
model.thinking--thinkingthinking 档位,由各 Harness 校验并映射
harness.id / image--harness / --docker-imageHarness 和容器镜像
harness.extra见下文所选 Harness 的专属参数

对于 OpenClaw,Roller 根据 model.id、base_url、api_key_env、api_protocol 和 params 生成临时 models 文件,命令结束后删除。未设置 model.provider 时,provider/model 形式的 ID 在第一个斜杠处拆分。如需提供完整的 models 文件,请设置 harness.extra.model_config,并在 该层将继承的 model.base_url、model.api_key_env 和 model.api_protocol 设为 null;两种 方式不能同时使用。

Codex 使用 openai-responses,Claude Code 使用 anthropic-messages,Hermes、OpenCode、 DeepSeek 和 Pi 使用 openai-completions。api_protocol 与 Harness 不一致时,Roller 报错。

benchmark.environment 将共用变量映射为 benchmark 所需的名称:

YAML
benchmark:
environment:
PINCHBENCH_JUDGE_BASE_URL: ${ROLLER_JUDGE_BASE_URL}
PINCHBENCH_JUDGE_API_KEY: ${ROLLER_JUDGE_API_KEY}
PINCHBENCH_JUDGE_MODEL: ${ROLLER_JUDGE_MODEL}

这些值不会出现在命令行中。dry-run 输出和 info.json 记录生效的设置、配置文件路径、脱敏后 配置的摘要以及环境变量名称,不包含密钥值。

benchmark.extra 目前只有一个字段,即 QwenClawBench 的 runs_per_task (--bench-runs-per-task)。它复制每个选中的任务,并在 bench metadata 中保留上游运行序号。 execution.samples 是普通的重复采样;同时设置两者时,轨迹数量为二者的乘积。

执行设置​

字段collect 参数
output、run_name--output、--run-name
parallel、launch_interval、grader_parallel--parallel、--launch-interval、--grader-parallel
samples、retries、retry_backoff、timeout--samples、--retries、--retry-backoff、--timeout
start_index、limit、resume、resume_verify_outputs--start-index、--limit、--resume、--resume-verify-outputs
wire_trace、keep_thinking--wire-trace、--keep-thinking / --no-keep-thinking
capture_calls、capture_debug--capture-calls、--capture-debug
thinking_capabilities--thinking-capabilities
pass_env--pass-env,每个变量名一次
container_user、network、docker_binary--container-user、--network、--docker-binary
keep_container_on_error、rebuild_task_images--keep-container-on-error、--rebuild-task-images
max_input_file_bytes、max_task_input_bytes--max-input-file-bytes、--max-task-input-bytes

Harness 专属参数​

harness.extra 使用不带 Harness 前缀的字段名:

Harnessextra 字段
OpenClawmodel_config、gateway_port、gateway_port_step、gateway_startup_timeout、model_request_timeout、max_tokens、session_id、search_provider、collect_paths、set_image_model、cache_trace、config_set
Codexconfig、config_set、reasoning_summary、web_search、websockets、image_detail
Claude Codesettings、max_turns、max_thinking_tokens、permission_mode、capture_calls、unique_tool_ids
Hermesmax_iterations、context_length、vision、toolsets
OpenCodemax_steps、context_length、output_tokens、vision、native_tools、deny_tools
DeepSeekmax_steps、context_length、output_tokens、profile、permission_mode、input_modalities
Pimax_steps、context_length、output_tokens、input_modalities

config_set 是 KEY=VALUE 字符串列表,每项对应一次 --openclaw-config-set 或 --codex-config-set。model_request_timeout 要求 OpenClaw 版本的 provider schema 支持 timeoutSeconds;wildclawbench-ubuntu:v1.3 不支持,因此 WildClawBench 示例未设置该字段。

某一层更换 benchmark 示例选定的 Harness 时,应同时覆盖镜像并清空专属参数:

YAML
harness:
id: codex
image: wildclawbench-codex-ubuntu:v0.0
extra: null

没有对应字段的参数​

一份配置描述一个 benchmark 在一个 Harness 上的运行。--tasks、--prompt-key、--id-key 和 --workspace 属于 task 文件运行。各 Harness 的 --<harness>-image、--<harness>-api-base 和 --<harness>-api-key-env 用于混合 Harness 的 task 文件;此处由 harness.image、 model.base_url 和 model.api_key_env 设置相同的值。运行 benchmark 时 --task-timeouts 始终启用,--log-level 使用默认值。

准备、运行、汇总​

提供示例配置的 benchmark 均有 scripts/prepare-<id>.sh [ROOT], scripts/prepare-benchmark.sh 按 ID 分发到对应脚本:

Bash
scripts/prepare-benchmark.sh wildclawbench "$WILDCLAWBENCH_ROOT"
scripts/prepare-benchmark.sh pinchbench "$PINCHBENCH_ROOT"
scripts/prepare-benchmark.sh qwenclawbench "$QWENCLAWBENCH_ROOT"
scripts/prepare-benchmark.sh skillsbench "$SKILLSBENCH_ROOT"

准备脚本获取固定 revision 的上游数据和 Harness 镜像。已有 checkout 位于其他 revision 时, 脚本报错并保持该 checkout 不变。脚本不读写模型或 judge 的密钥。

Bash
export ROLLER_MODEL_ID=example-model
export ROLLER_MODEL_BASE_URL=https://api.example.com/v1
export ROLLER_MODEL_API_KEY=replace-with-your-api-key
export ROLLER_BENCH_OUTPUT="$PWD/runs"

roller bench run \
--config examples/benchmarks/base.yaml \
--extra-config examples/benchmarks/wildclawbench.yaml \
--dry-run

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

--dry-run 加载 adapter、筛选任务,并校验 endpoint、密钥变量、thinking 档位和 Harness 专属 参数。它输出生效的配置、任务数和轨迹数、镜像以及各任务的超时,不启动容器,也不创建运行目录。

运行结束时写入 bench-report.json。审查或修复 sample 后可重新生成:

Bash
roller bench report runs/<run-name> --output runs/<run-name>/bench-report.json

示例配置​

Benchmarkbase.yaml 之后的层准备脚本
WildClawBenchexamples/benchmarks/wildclawbench.yamlscripts/prepare-wildclawbench.sh
PinchBenchexamples/benchmarks/pinchbench.yamlscripts/prepare-pinchbench.sh
QwenClawBenchexamples/benchmarks/qwenclawbench.yamlscripts/prepare-qwenclawbench.sh
SkillsBench(with skill)examples/benchmarks/skillsbench.yamlscripts/prepare-skillsbench.sh
SkillsBench(no skill)skillsbench.yaml,再加 examples/benchmarks/skillsbench-no-skill.yaml同上

各 bench 指南列出须与上游保持一致的配置,以及评分程序读取的环境变量。为其他 bench 添加示例 时,文件按 adapter ID 命名为 examples/benchmarks/<id>.yaml,同时提供 scripts/prepare-<id>.sh,且只包含可公开的默认值和环境变量引用。adapter 本身的接入见 加一个新 bench。