目录入口见 README。评测集定义见 dumatebench,分数快照见 dumatebench。
先看这条:这是国内唯一”开放提交 + 直接给 harness 排名 + 公司可打”的 Agent 榜,提交走 Harbor(与 Terminal-Bench 同一框架,适配工作可复用)。但它不是 Coding Agent 榜——Code 只占 200 题里的 88 道。榜上已有 OpenCode 69.1 / OpenClaw 78.0 的现成基线,是「OpenCode 二开」类的正面对标位。门槛是 200 题 × 5 trials = 至少 1,000 次 rollout。
是什么
一句话:考 agent 能不能在缺工具、网络抖动、脏目录的真实办公环境里,把一份能直接交出去的产物做出来。
- 发布方:百度搭子(DuMate);论文 arXiv:2608.26546(目标 WSDM 2027);代码 Apache-2.0。
- 榜单:https://dumatebench.com/leaderboard
- 规模:200 题 / 8 大类场景 / 17 个细粒度任务类型;能力覆盖 Text 160 · Code 88 · Web 86 · Files 34 · Multimedia 46。
- 指标:
F = 0.3P + 0.7J(P = 确定性原子检查通过率,J = artifact 级 LLM Judge)。 - 执行框架:Harbor(版本对齐
harbor==0.20.0)。 - 榜上对手:DuMate、Hermes、Claude Code、OpenClaw、OpenCode(× GPT-5.5 / Opus-4.8 / GLM-5.2 / DeepSeek-V4-Pro)。
提交前必须确认的两件事
- 最终分公式:论文/官网写
0.3P + 0.7J,仓库submissions/README.md写「30% complete + 30% partial + 40% judge」。先去仓库开 issue 问清,否则复现出来的分数会被 CI 判不一致。 - canonical dataset revision:正式提交必须用维护者配置在仓库变量里的
DUMATEBENCH_HARBOR_DATASET+DUMATEBENCH_HARBOR_DATASET_REF;本地导出的任务目录没有 registry identity,不能作为正式 submission 证据。
怎么打
第 1 步:装环境
cd /path/to/dumate-bench
python3 -m venv .venv && source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r dumatebench/requirements.txt
python -m pip install -e dumatebench_cli/
python -m pip install harbor==0.20.0 # 正式提交路径需要,版本敏感
python -m pip install huggingface_hub # 仅下载数据集时需要
# LLM Judge / 全量评测需要宿主机工具(不能用 pip 装)
brew install ffmpeg libreoffice poppler前置:Python 3.10+(建议 3.12/3.13)、Docker Desktop(含 docker compose v2)、首次构建需要 PyPI 与 Docker Hub 网络。
代码明确说明:当前只支持源码方式使用,不要
pip install .,wheel 包不含共享 evaluator。
第 2 步:跑确定性 smoke test(不调模型、不花钱)
bash dumatebench/scripts/run_template_task.sh
cat dumatebench/datasets/dev/template_task/run_outputs/reward.json预期输出含 complete_pass: 1 / partial_pass: 1.0 / environment_recovery: 1 / network_recovery: 1。脚本会故意注入 OCR 与 calendar 故障,固定 smoke agent 负责重试。
第 3 步:下载并准备公开数据集
DATA_ROOT=/absolute/path/to/dumate_bench
hf download Annihi/dumate_bench --repo-type dataset --local-dir "$DATA_ROOT"
tar -xzf "$DATA_ROOT/dumate_bench_data.tar.gz" -C "$DATA_ROOT"压缩包约 3.5GB,解压后还要一份工作副本。
公开任务包故意不含
environment/,必须先补运行层:
WORK_ROOT=/absolute/path/to/dumatebench_work
TEMPLATE=$PWD/dumatebench/datasets/dev/template_task
mkdir -p "$WORK_ROOT"
cp -a "$DATA_ROOT/final_dataset_clean/." "$WORK_ROOT/"
dumate template fill --dataset "$WORK_ROOT" --template "$TEMPLATE" --task-glob 'task_*'
dumate package check "$WORK_ROOT/task_1"第 4 步:接入自研 agent
两种方式:
A. dumate adapter 协议(自研 agent,最轻量)
agent 从 stdin 读一个 JSON state,向 stdout 写恰好一个 JSON action:
{"command":"ls -la /workspace","reason":"Inspect the workspace"}结束:
{"finish":true,"reason":"The artifact is ready in /outputs"}dumate run \
--dataset "$WORK_ROOT" --task-glob 'task_*' \
--agent 'python3 /absolute/path/to/my_agent.py' \
--max-steps 20 --limit 1 --concurrency 1B. Harbor agent(正式提交用) 把任务导出为 Harbor 格式后,用任意 Harbor 兼容 agent 跑:
dumate harbor export --dataset "$WORK_ROOT" --output "$HARBOR_TASKS" --task-glob 'task_*'
harbor run --path "$HARBOR_TASKS/task_1" --agent openhands-sdk --model "$MODEL" \
--ae "LLM_API_KEY=$OPENAI_API_KEY" --ae "LLM_BASE_URL=$OPENAI_BASE_URL" \
--jobs-dir "$JOBS/smoke" --n-concurrent 1 --n-attempts 1 --yes --debug模型必须用顶层
--model传。用--ak model=...不会设置model_name,agent 启动后会报ValueError: Model name is required。--ak只用于其他构造函数参数。
调试顺序:先 --limit 1 --concurrency 1 跑通一题,再 --n-concurrent 1 跑小批,最后才铺全量。
第 5 步:正式提交跑
harbor run \
--dataset <org>/<dataset>@<revision> \
--agent <your-agent> --model <provider/model> \
--n-attempts 5 \
--upload --public硬性约束:
- 必须用维护者指定的 canonical dataset revision,CI 会逐个核对每题 digest
- 覆盖 ≥200 题、每题 ≥5 trials
- error 的 trial 计为失败,不剔除
- 不得改
agent_timeout_multiplier/verifier_timeout_multiplier/agent_setup_timeout_multiplier/environment_build_timeout_multiplier/ 任何 per-trialoverride_*超时或资源字段(CI 会拒) - 正分 trial 必须有 Harbor
trajectory_path,否则不可审计 - 本地
reward.json或自报分数永远不是官方依据
第 6 步:生成 manifest 并提 PR
dumate submission from-harbor-job \
--job-dir /path/to/harbor/jobs/<job-id> \
--out submissions/dumatebench/<version>/<agent>__<model>.json \
--agent-name my-agent --agent-org my-organization \
--model-name my-model --model-provider openai
dumate submission check-manifest submissions/dumatebench/<version>/<agent>__<model>.json然后提 PR 到 main,只新增那一个 manifest 文件,不要改 benchmark 代码。
manifest 最小内容:
{
"schema_version": 2,
"harbor_job_id": "job-12345678",
"metadata": {
"agent_display_name": "my-agent",
"agent_org_display_name": "my-organization",
"models": [{"model_name": "my-model", "model_provider": "openai"}]
}
}绝对不要手写 score / accuracy / metrics / verification 字段——CI 会直接拒。
第 7 步:三道门(重要)
你提 manifest PR
↓
CI 从 base 分支跑 harbor_verify.py:重拉 Harbor job / 校验 dataset revision 与每题 digest /
拒绝 fairness 覆盖 / 重算 complete_pass + partial_pass(+ final_score)/
校验 agent·model 身份 / run_fingerprint 查重
↓
CI 通过 → 拷贝到榜单方自己的 Harbor snapshot → 自动开 bot PR → 你的原 PR 被关闭
↓
维护者 review 并 merge bot PR
↓
维护者**另外再开一个 PR** 把该 manifest 路径加进 leaderboard/published.json ← 到这一步才上站
提交有效 ≠ 一定上榜。最后一步是维护者手工控制的第二道闸,published.json 目前是空数组。
必填材料速查
| 项 | 说明 |
|---|---|
| Harbor job | 公开可读(--upload --public),CI 只信任能从 Harbor 重拉的数据 |
| manifest | submissions/dumatebench/<version>/<agent>__<model>.json,含 job_id + agent/model 声明,不含分数 |
| 覆盖度 | ≥200 题 × ≥5 trials |
| 轨迹 | 正分 trial 必须有 Harbor trajectory_path |
| dataset | 必须命中维护者配置的 canonical revision |
成本
| 项 | 数据 |
|---|---|
| rollout 次数 | 200 题 × 5 trials = 1,000 次(下限) |
| 论文单题 token(每题均值) | 最省 273,532(OpenCode+GPT-5.5);最高 4,603,930(Claude Code+GLM-5.2) |
| 论文单题耗时 | 275s(Claude Code+GPT-5.5)~ 1039s(DuMate+Opus-4.8) |
| 全量 token 量级(粗估) | 约 2.7 亿 ~ 15 亿 token(1,000 × 0.27M–1.5M) |
| 美元量级 | 粗估 10k(非官方;随模型单价与 cache 命中率浮动,另需 LLM Judge 调用成本) |
| 磁盘 | 数据集压缩包 ~3.5GB + 解压副本 + 每题 Docker 镜像 |
论文没有明确给出每题重复次数,其 per-task 均值不能直接当作「正式提交的开销」。正式提交硬性要求 5 trials,所以预算应按 5 × 200 = 1,000 次 rollout 准备(论文单题均值只能当量级参考),按 $5k 量级备,不要用论文数字直接乘 200。
单题容器限额(论文口径)
| 项 | 值 |
|---|---|
| CPU / 内存 / 存储 | 2 vCPU / 8 GB / 12 GB |
| 墙钟预算 | 1,800 秒 |
| 基础镜像 | python:3.12-slim,只预装通用 shell/网络/PDF/进程工具(bash、curl、git、dnsutils、iproute2、iptables、jq、poppler-utils、procps、unzip、vim-tiny),任务专用系统工具与 Python 包一律不预装 |
Unstable 条件的故障注入参数:启动时 DNS 失败 / 延迟丢包 / 目标阻断各持续 8 秒;运行中故障守护进程每 45 秒按 0.35 / 0.45 / 0.25 的概率重新采样,选中后分别持续 6 / 10 / 8 秒;工具层还强制首次 OCR 调用失败,并有 0.4 概率让后续一次 OCR 响应延迟 5 秒。
常见坑
- 公式口径没核实就开跑 → 论文
0.3P+0.7J与仓库「30/30/40」矛盾,先开 issue 问清 - 用本地导出的 dataset 提正式提交 → 没有 registry identity,CI 直接拒
- 动了 fairness 参数 → 任何 timeout/resource multiplier 或
override_*都会导致拒收 - 用
--ak model=传模型 → 不会设置model_name,agent 启动即报Model name is required - 把 error 的 trial 剔掉 → 规则是计为失败而非排除,剔了等于覆盖度不足
- 在 manifest 里写分数 → CI 拒绝带
score/accuracy/metrics/verification的 manifest - 以为合并 bot PR 就上站了 → 还需要维护者把它加进
published.json - 容器内网络没配代理 → OpenHands SDK 会在每题容器里装运行时;Docker daemon 不继承宿主 PAC,setup 超时的话模型根本没被调用(表现为 token/cost 为 null)
- Docker 镜像/数据集没预热 → 200 题首次构建会非常慢,建议预构建镜像或配好 daemon 代理
- 拿它证明 coding 能力 → Code 仅 88/200,且是办公交付语境;coding 主证据仍应走 SWE-bench-Live
相关
- dumatebench — 评测集定义与协议
- dumatebench — 分数快照与效率表
- README — 打榜指南目录入口
- terminal-bench — 共用 Harbor 的同类榜(社区提交已关闭,可作自证)
- multi-swe-bench — 多语言代码修复自助榜(另一种补充证据)
- swe-bench-live — Coding Agent 主榜
- harbor — 官方执行框架
- coding-agent-leaderboards — 榜单横向地图
信源
信息来自 baidubce/dumate-bench 仓库 leaderboard/SUBMIT.md、leaderboard/README.md、submissions/README.md、仓库主 README,官网榜单页与 overview,arXiv:2608.26546,以及 HuggingFace Annihi/dumate_bench 数据集页。数据截至 2026-09-22。美元成本为粗估,非官方口径。