在 RoboDojo 上运行 agent
本教程在 RoboDojo 上运行 agent(程序、学习型 skill、反应层、handler、verifier):一个开发 episode、一个开发子集,以及评测流程。前提是你的 deploy 中的服务已经启动 (快速开始)。
Layout:先用开发 layout
Section titled “Layout:先用开发 layout”RoboDojo 的官方评测使用固定的 layout 包(layout_pack_seed 0、1、2)。
prompt 调整、skill 开发和自我改进则使用开发 layout:
layouts = "procedural" 重放 <dev_layout_dir>/<task>_<seed>.json,这些文件由
benches/robodojo/devlayouts.py 用 RoboDojo 自己的生成器生成,并经过检查,不与任何评测 layout
重复。开发 seed 数量不限;同一个(任务,seed)总是给出同一个 layout。
有三个任务没有开发 layout:cover_blocks、swap_blocks 和 play_tic_tac_toe 把物体放在少数几个
固定位置,评测包已经包含所有排列,因此生成器会放弃(“repeats evaluation layout”),worker 不会启动。
不动用评测 layout 就无法在这些任务上做开发。在 imitate_sorting_sequence 上,目前两个开发 layout
都会在 episode 进行到一半时(大约第 460 步)被 RoboDojo 标记为不稳定,因此这些 episode 不计分。
一个 episode
Section titled “一个 episode”harness run configs/experiments/dev.toml --deploy mine --output runs/dev# Development: the agent with its default model on one task and development layouts# (never evaluation layouts). `harness run configs/experiments/dev.toml# --deploy <machine>` starts the simulator workers itself; `harness program` uses the# worker at `endpoint`.description = "the agent, one task, development layouts"bench = "robodojo"tasks = ["general_pickup"]seeds = [0]layouts = "procedural"endpoint = "http://127.0.0.1:8771"
[budget]max_wall_seconds = 5400# Cost guard for development checks; the paper runs set no cost cap.max_cost_usd = 4.0agent 的默认模型(configs/models/deepseek-flash.toml)是 DeepSeek V4.1 Flash,推理强度为
medium:每个 episode 约 $0.01(agent 1.4.1 在评测包 0 上:平均 $0.010、3.6 次模型调用;任务交给
学习型策略时为 $0.003、2.3 次调用,由程序保留时为 $0.08、16 次调用)。--model grok-low
(low 强度的 grok-4.7)或 configs/models/ 中的其他文件可以替换它;论文的各次运行在实验中写明所用模型。
一个开发子集
Section titled “一个开发子集”# The 8-task development subset (both conveyor tasks included) that ablations, model# comparisons and self-improvement share (App. A); 10 episodes each on development# layouts. An ablation runs it with --agent configs/ablations/<name>.toml.description = "the agent on the 8-task development subset"include = ["dev.toml"]tasks = ["general_pickup", "stack_blocks", "stack_bowls", "classify_objects", "deposit_coin", "insert_tubes", "match_and_pick_from_conveyor", "pick_from_conveyor_by_image"]seeds = "0-9"
[budget]max_total_cost_usd = 20.0harness run configs/experiments/subset8.toml --deploy mine --output runs/subset8 --gpus 5 --workers-per-gpu 2harness run 为每个槽位(GPU 数 × 每 GPU worker 数,每个占 6-9 GB)启动一个仿真器 worker,
每个 worker 使用从 base_port 起的独立端口,并从一个队列中给各槽位分配任务;一个 worker 服务一个
任务后就停止。它会:
- 续跑:已有
summary.json的 episode 会被跳过;--rerun-errors只重新运行以错误 (provider 或 worker 故障)结束的 episode; - 限制花费:
--max-total-cost-usd(或budget.max_total_cost_usd)在 suite 花费达到该金额后 不再启动新 episode;正在运行的 episode 会跑完; - 在评测 layout 上替换不稳定的 layout:被 RoboDojo 标记为不稳定的 episode 会被移到一边
(
seed-<n>.unstable-<time>),并运行下一个空闲的 layout。
输出是每个任务和 seed 一个目录:
runs/subset8/├── suite.json suite.log workers/ tmp/└── stack_bowls/ ├── seed-0/ manifest.json events.jsonl summary.json kernel.log videos/ └── seed-1/ ...harness report runs/subset8harness report 遵循 RoboDojo 的计分方式:一个 episode 的得分是它的 reward(成功为 1,否则为
过程分 / 100);出错的 episode 得 0 分;被仿真器作为不稳定而丢弃的 episode 不计分。任务会合并其
_random 变体;五个维度(Generalization、Memory、Precision、Long-Horizon、Open)对各自的任务取平均,
总分对各维度取平均,只在每个任务都有分数时才给出。它还报告每个 episode 的模型调用、花费和决策;
--json 输出全部内容。每个 episode 的 summary.json 记录模型选择的策略
(strategy:A、B 或 C,它匹配到的类型,策略)。
# The agent on RoboDojo's official evaluation layouts (pack 0), all tasks, two layouts# each (raise seeds to "0-49" for the full protocol). Evaluation resolves strictly: a# skill or service the agent names that cannot run on this machine stops the run.description = "the agent on official evaluation layouts"bench = "robodojo"tasks = "all"seeds = "0-1"layouts = "eval"layout_pack_seed = 0
[budget]max_wall_seconds = 5400harness run configs/experiments/eval.toml --deploy mine --seeds 0-49 --max-total-cost-usd 200 \ --rerun-errors --output runs/eval-pack0评测 layout 严格解析:如果机器没有运行 agent 指定的某个服务,运行会停止,而不是以一个更小的配置
(其 identity 会不同)运行。每个 episode 的 manifest.json 都记录 identity,因此可以判断两台机器的
结果能否比较。
这里通过我们自己的仿真器 worker 运行 agent。排行榜则通过 RoboDojo 自己的客户端运行导出的策略,覆盖
每个任务和 _random 变体,episode 数按官方规定:提交到 RoboDojo 排行榜。
在相同的 layout 上比较 agent 和它所封装的学习型策略:在运行 agent 的同时单独运行该策略
(configs/experiments/policy-alone-dev.toml 配合 configs/scripts/policy_alone.json,
或在评测 layout 上使用同一个脚本),并按任务配对比较。