TL;DR
本次拆解的 4 项 TODO 与本仓库当前实际进度 对照:
❌ a. Harbor 框架下使用 terminus2 harness — Terminal-bench Qwen3-8B 测试 — 0% 进度
❌ b. camel-agent (terminal-rl 训练侧) 与 terminus2 (TB 官方 harness) 对比分析文档 — 0% 进度
❓ c. 是否替换 camel-agent → terminus2 作为 RL rollout agent 的决策 — 依赖 b. 的产出
📋 d. TODO list — 本 issue 即是
但环境基础已就位 :
✅ terminal-bench 0.2.18 已装在 conda env tbench-rl(pip show terminal-bench 已确认)
✅ Terminus2 类可直接 from terminal_bench.agents.terminus_2.terminus_2 import Terminus2,构造签名见 §3.2
✅ run-3 训完的 35 个 ckpt 全部落盘(save_interval=8,rollout 7→279),本 issue 跑分选其中 4 个代表性 ckpt — 详见 §2.5.1
✅ Qwen3-8B base weights 在 /nfs/models/Qwen3-8B/(也可作 baseline)
❌ harbor 包未装 (pip list | grep harbor 空,which harbor 空 — 见 §3.1)
❌ tbench_test(terminal-bench-core v0.1.x 80-task 冻结集)未下载
本 issue 把这些 TODO 拆成 3 个 Phase + 8 个待决策开放问题,所有项都用 - [ ] checkbox,方便后续勾选/分配。
参考来源:
1. 现状对照表
TODO 项
状态
证据 / 路径
Harbor 框架装好
❌ 未装
pip list | grep -i harbor 空、which harbor 空
terminus2 harness 代码
✅ 已就位
terminal_bench/agents/terminus_2/{terminus_2.py, terminus_json_plain_parser.py, terminus_xml_plain_parser.py}
TB v0.1.x 80-task fixture (tbench_test)
❌ 未下载
terminal-rl/dataset/tbench_test/ 不存在;下载脚本在 terminal-rl/data_utils/download.py:download_tbench_test()
跑过 terminus2 + Qwen3-8B benchmark
❌ 从未跑过
run-1 (lpurziy1) / run-2 (dvu9eexe) / run-3 (msp60ius) 三个 wandb run 全部 0 个 eval/* key (已 grep 验证)
RL ckpt 跑分
❌ 未跑
iter_0000279 等 ckpt 仅在内部 terminal/accuracy rollout 子集出现过
camel-agent vs terminus2 文档
❌ 0 进度
find -name '*.md' | xargs grep terminus.?2 全无命中
inference 服务(OpenAI compat 给 Qwen3-8B)
❓ 不确定
训练里 SGLang 起过,但当前 ckpt 走 RL 路径,外部 API 入口未配置
关键认知 :camel-agent (terminal-rl/agent_runner.py + terminal-rl/agent/) 是我们 RL 训练时的 rollout agent ;terminus2 (terminal_bench/agents/terminus_2/) 是Terminal-Bench 官方 leaderboard 用的 reference agent 。这俩是完全不同的 codebase,prompt template / tool schema / context 管理 / max_turns 策略都不同。我们之前 issue #1 /2/3/4 报的所有 terminal/accuracy 都是 camel-agent 在 seta-env 训练子集上的 rollout 指标,没有任何一次 是 terminus2 在 TB v0.1.x 上的可对外报数的 benchmark。
2. Phase 1 — 跑通 baseline(不动训练,纯加法)
目标 :拿到 base Qwen3-8B 和 RL 训完的 ckpt 在 Terminal-Bench v0.1.x (80 task) 上的 terminus2 跑分 。这是最直接需要的对外数字,也是后面 Phase 2 对比的前置依赖。
2.1 装 harbor 框架
2.2 下载 TB v0.1.x 冻结集
2.3 起 OpenAI-compat inference 服务包装 Qwen3-8B
2.4 跑 base Qwen3-8B 走 terminus2 evaluation
2.5 跑 RL 训完的 ckpt(来源:wandb msp60ius / issue #4 产物)
2.5.1 选定的 4 个 ckpt
跨"早期 baseline → 中期 plateau → 后期单点峰值 → final"4 个阶段,每个 ckpt 对应 wandb msp60ius 一个具体 rollout 时刻:
ckpt
路径(已验证落盘 ✅)
wandb rollout
terminal/accuracy 单点
accuracy 末50均值
terminal/reward_mean 单点
non_trainable_ratio
response_len_mean
代表的意义
iter_0000007
ckpt/qwen3-8b-terminal-rl/iter_0000007/
7
0.228
0.197
−0.544
0.000
105
早期 baseline :仅训了 7 个 rollout(≈ rollout_batch=16 × 8 = 128 trajectory × 7),策略基本就是 Qwen3-8B base 的 RL 起步状态。reward 大幅负数说明此时模型还没建立起 "如何在 terminal 里成功完成 task" 的基础行为。
iter_0000119
ckpt/qwen3-8b-terminal-rl/iter_0000119/
119
0.494
0.475
−0.012
0.009
280
中期 plateau 中位数 :训练 ~15h、policy 已经从冷启动学会基本 shell 交互;50-window 0.475 是 issue #4 §3.1 表里 "rollout 100-149 中期均值" 的代表性时刻。reward 接近 0、resp_len 280 token,模型已经稳定输出多轮规划但还在试错阶段。
iter_0000215
ckpt/qwen3-8b-terminal-rl/iter_0000215/
215
0.673
0.506
+0.346
0.007
181
后期单点峰值 :run-3 整轮 283 个 rollout 中的 accuracy 最高单点之一 (acc=0.673、reward=+0.35)。但 50-window 仅 0.506,存在 "lucky batch vs 真实策略提升" 的歧义 — OOD 跑分就是来回答这个问题的 。resp_len 反而最短(181),可能是模型学会了精炼回答。
iter_0000279
ckpt/qwen3-8b-terminal-rl/iter_0000279/
279
0.516
0.518
+0.031
0.017
344
final :训练 60h12m 收尾时刻、latest_checkpointed_iteration.txt = 279、对应 issue #4 主帖最终状态。单点 0.516 ≈ 50-window 0.518 → 两者一致 ,说明此时策略已经收敛到一个稳定水位(issue #4 §3.1 末段说的 "进入第二个平台期"),是最不会被 cherry-pick 误导的代表性 ckpt。
2.5.2 权重存在性验证(已完成)
$ for it in 0000007 0000119 0000215 0000279; do
du -sh ckpt/qwen3-8b-terminal-rl/iter_$it
ls ckpt/qwen3-8b-terminal-rl/iter_$it
done
ckpt
大小
文件结构
iter_0000007
103 GB
11 文件:__0_0.distcp ~ __3_1.distcp(8 个 DCP shard)+ common.pt + metadata.json
iter_0000119
104 GB
同上
iter_0000215
104 GB
同上
iter_0000279
104 GB
同上
✅ 4 个 ckpt 全部完整,使用 megatron 新版 torch.distributed.checkpoint (DCP) 格式,4-way TP × 2-way DP shard 布局对应训练时 --tensor-model-parallel-size 4。
2.5.3 ckpt 转换(megatron DCP → HF safetensors)
DCP 格式无法直接被 vLLM/SGLang 加载,需要先转 HF。
2.5.4 起 inference + 跑分
2.5.5 出对照表
2.6 对外报数 + 横向对比
3. Phase 2 — camel-agent vs terminus2 对比文档
目标 :搞清楚两边 agent 在 prompt / tool / context / 错误处理 上的差异,给出"是否替换 camel-agent 作为 RL rollout agent"的决策建议。
3.1 静态对比(读代码即可,无需跑)
3.2 同 ckpt 双 agent 跑分对比
3.3 决策建议
4. 待确认 / 待决策的开放问题
这一节是开放的待决策列表,需要团队勾选答复,每条 checkbox 就是一个待回答的二选一/多选一。
Q1. harbor 包名 / 安装方式
Q2. inference 后端选 vLLM 还是 SGLang
Q3. camel-agent 走外部 inference 的兼容性
Q4. parser 选 json 还是 xml
Q5. dataset 选哪个
Q6. 跑分要不要集成进 wandb
Q7. 替换 camel-agent 决策权
Q8. 评测时怎么处理已知坏 task(issue #3 §1.X 列的 5 类失败 task)
Q9. 跑分要不要做 confidence interval(每个 task 跑多次)
Q10. 跑分占 GPU 与训练冲突
5. 风险 / 依赖
R1 : harbor 包不在 PyPI 公开 → 需要找到 SETA 内部 setup 流程或绕开(Q1 )
R2 : megatron 格式 ckpt 转 HF 不顺畅 → Phase 1.5 卡住,需要 ~2h 调通 conversion
R3 : 80 task × 3 run × Qwen3-8B 占 4 GPU × 2-3h ≈ 实际跑分可能 3-6 小时 (每 task 平均 5 min,80 task 并发 8 = 50min × 3 run);与训练同步要预约 GPU
R4 : terminus2 的 prompt template 与 SETA 训练数据的格式不同 → RL 后 ckpt 可能反而比 base 差(已在 Phase 2.3.1 trade-off 里指出)
R5 : TB v0.1.x 数据集与 SETA-env 训练集完全独立 (issue env-pool 完整记录:架构 / 6 个踩坑 / 持久化配置 / 系统化验证脚本(issue #1/#2 末段退化的环境侧根因) #3 /4 已确认),所以这是真正的 OOD 评测,但也意味着模型在训练集上学的 pattern 可能完全不迁移
6. 时间估算
Phase
子任务
估时
阻塞依赖
Phase 1
1.1 装 harbor
0.5–2h
Q1
1.2 下 tbench_test
5 min
网络
1.3 inference server
0.5–1h
Q2 + GPU
1.4 base 跑分
2–3h
1.3
1.5 RL ckpt 跑分
2–3h
1.3 + ckpt 转换(R2)
1.6 报数
0.5h
1.4/1.5
Phase 1 total
6–10h
Phase 2
2.1 静态对比
4–6h
无
2.2 双 agent 跑分
2h
1.3 + Q3
2.3 决策建议
1h
2.1 + 2.2
Phase 2 total
7–9h
Phase 3
视情况
1–3 天
Phase 2 结论
全部完成估算 : 2–3 个工作日 (如果各开放问题决策不卡)
7. 关联
8. 下一步即刻可做(不依赖任何 Q 决策)
最快推进路径:
如果不勾任何 Q,现在就能开始的最小动作:
# Phase 1.2 — 下 tbench_test(5 min)
cd /nfs/terminal-rl-workspace/OpenClaw-RL
python terminal-rl/data_utils/download.py tbench_test
ls terminal-rl/dataset/tbench_test/ | wc -l # 应该是 80
TL;DR
本次拆解的 4 项 TODO 与本仓库当前实际进度对照:
但环境基础已就位:
terminal-bench 0.2.18已装在 conda envtbench-rl(pip show terminal-bench已确认)Terminus2类可直接from terminal_bench.agents.terminus_2.terminus_2 import Terminus2,构造签名见 §3.2/nfs/models/Qwen3-8B/(也可作 baseline)harbor包未装(pip list | grep harbor空,which harbor空 — 见 §3.1)tbench_test(terminal-bench-core v0.1.x 80-task 冻结集)未下载本 issue 把这些 TODO 拆成 3 个 Phase + 8 个待决策开放问题,所有项都用
- [ ]checkbox,方便后续勾选/分配。参考来源:
run_eval_tb2.sh— 这是确认本次"Harbor 框架下使用 terminus2 harness"的来源1. 现状对照表
pip list | grep -i harbor空、which harbor空terminal_bench/agents/terminus_2/{terminus_2.py, terminus_json_plain_parser.py, terminus_xml_plain_parser.py}tbench_test)terminal-rl/dataset/tbench_test/不存在;下载脚本在terminal-rl/data_utils/download.py:download_tbench_test()eval/*key(已 grep 验证)iter_0000279等 ckpt 仅在内部terminal/accuracyrollout 子集出现过find -name '*.md' | xargs grep terminus.?2全无命中2. Phase 1 — 跑通 baseline(不动训练,纯加法)
目标:拿到 base Qwen3-8B 和 RL 训完的 ckpt 在 Terminal-Bench v0.1.x (80 task) 上的 terminus2 跑分。这是最直接需要的对外数字,也是后面 Phase 2 对比的前置依赖。
2.1 装 harbor 框架
tbench_camel_agent_tb2.py引用from harbor.models.trial.result import AgentInfo, ModelInfo来看,应该是某个内部包;先pip search/ 看 SETA 的setup.sh/requirements.txt确认正确包名pip install harbor-...(具体名待 1.1.1 确认)harbor --help/python -c "import harbor"可用2.2 下载 TB v0.1.x 冻结集
cd /nfs/terminal-rl-workspace/OpenClaw-RL && python terminal-rl/data_utils/download.py tbench_test(sparse checkoutdataset/terminal-bench-core/v0.1.x分支)ls terminal-rl/dataset/tbench_test/有 80 个 task 子目录task.yaml是否含terminal-bench-canaryGUID(确认是冻结集)2.3 起 OpenAI-compat inference 服务包装 Qwen3-8B
vllm serve /nfs/models/Qwen3-8B --port 8000 --tensor-parallel-size 4 --served-model-name qwen3-8bpython -m sglang.launch_server --model-path /nfs/models/Qwen3-8B --port 30000 --tp 4curl http://localhost:8000/v1/chat/completions可访问2.4 跑 base Qwen3-8B 走 terminus2 evaluation
1.4.1 起一次 dry-run(1 个 task):
1.4.2 dry-run 通过后跑全 80 task × 3 runs:
tb run --agent terminus_2 --model openai/qwen3-8b \ --api-base http://localhost:8000/v1 \ --tasks-path terminal-rl/dataset/tbench_test \ --runs 3 --n-concurrent 8 \ --output-dir /nfs/eval_results/base_qwen3_8b_full1.4.3 收集结果,算 pass rate(80 task × 3 run = 240 trial 的成功率)
1.4.4 (可选)改成 harbor CLI 复现一遍,验证 harbor 走出来的数字是否一致:
harbor run -d terminal-bench@0.1.x \ --agent-import-path terminal_bench.agents.terminus_2.terminus_2:Terminus2 \ --agent-kwargs '{"model_name":"openai/qwen3-8b","api_base":"http://localhost:8000/v1"}' \ --n-concurrent 81.4.5 数字记录到 wandb(用
wandb run init单独建一个 eval run,或者在 issue 里贴)2.5 跑 RL 训完的 ckpt(来源:wandb msp60ius / issue #4 产物)
2.5.1 选定的 4 个 ckpt
跨"早期 baseline → 中期 plateau → 后期单点峰值 → final"4 个阶段,每个 ckpt 对应 wandb msp60ius 一个具体 rollout 时刻:
terminal/accuracy单点accuracy末50均值terminal/reward_mean单点non_trainable_ratioresponse_len_meanckpt/qwen3-8b-terminal-rl/iter_0000007/ckpt/qwen3-8b-terminal-rl/iter_0000119/ckpt/qwen3-8b-terminal-rl/iter_0000215/ckpt/qwen3-8b-terminal-rl/iter_0000279/latest_checkpointed_iteration.txt = 279、对应 issue #4 主帖最终状态。单点 0.516 ≈ 50-window 0.518 → 两者一致,说明此时策略已经收敛到一个稳定水位(issue #4 §3.1 末段说的 "进入第二个平台期"),是最不会被 cherry-pick 误导的代表性 ckpt。2.5.2 权重存在性验证(已完成)
iter_0000007__0_0.distcp~__3_1.distcp(8 个 DCP shard)+common.pt+metadata.jsoniter_0000119iter_0000215iter_0000279✅ 4 个 ckpt 全部完整,使用 megatron 新版
torch.distributed.checkpoint(DCP) 格式,4-way TP × 2-way DP shard 布局对应训练时--tensor-model-parallel-size 4。2.5.3 ckpt 转换(megatron DCP → HF safetensors)
DCP 格式无法直接被 vLLM/SGLang 加载,需要先转 HF。
find /nfs/terminal-rl-workspace/OpenClaw-RL/slime -name '*to_hf*' -o -name 'convert*'(slime 应该有slime/scripts/megatron_to_hf.py或类似);如果没有,megatron 自身有tools/checkpoint/convert.pyiter_0000007→ 用transformers.AutoModelForCausalLM.from_pretrained(...)验证 load 通过 +generate('Hello, how are you')输出合理(不是乱码)/nfs/eval_ckpts/run3_msp60ius/{iter_007, iter_119, iter_215, iter_279}/2.5.4 起 inference + 跑分
tb run命令,仅换 model path / api-base)/nfs/eval_results/run3_<iter>_full/,每 ckpt 一份2.5.5 出对照表
pass@1(3 run 中至少 1 次通过)pass@avg(3 run 平均)failed_count(评估侧 5 类 fail 的总数,参见 issue env-pool 完整记录:架构 / 6 个踩坑 / 持久化配置 / 系统化验证脚本(issue #1/#2 末段退化的环境侧根因) #3 #issuecomment-4340486381 §1.X)wandb 训练侧 acc(末50均值)(来自上面 §2.5.1 表,看训练→OOD 是否对齐)单 task 平均 turn 数 / token 数(看模型行为变化)2.6 对外报数 + 横向对比
3. Phase 2 — camel-agent vs terminus2 对比文档
目标:搞清楚两边 agent 在 prompt / tool / context / 错误处理 上的差异,给出"是否替换 camel-agent 作为 RL rollout agent"的决策建议。
3.1 静态对比(读代码即可,无需跑)
2.1.1 读 camel-agent 入口:
/nfs/terminal-rl-workspace/OpenClaw-RL/terminal-rl/agent_runner.py(278 行)+terminal-rl/agent/目录所有文件2.1.2 读 terminus2 入口:
terminal_bench/agents/terminus_2/terminus_2.py+terminus_json_plain_parser.py+terminus_xml_plain_parser.py2.1.3 列出 N 维度差异表:
_get_prompt_template_path().read_text()max_episodes=None(默认 1M)ContextLengthExceededError抛 → 提前结束OutputLengthExceededError同上_pending_completion状态inference_client.py直接 OpenAI HTTPLiteLLM封装层_timestamped_markers列表2.1.4 写成 markdown 文档放在
docs/camel_agent_vs_terminus2.md3.2 同 ckpt 双 agent 跑分对比
iter_0000279ckpt 跑 80 task:3.3 决策建议
4. 待确认 / 待决策的开放问题
Q1. harbor 包名 / 安装方式
pip install harbor即可tbCLI(terminal-bench 自带的) → 数字一致即可Q2. inference 后端选 vLLM 还是 SGLang
Q3. camel-agent 走外部 inference 的兼容性
inference_client.py已经支持外部 OpenAI-compat endpoint,只要换 URL 就行Q4. parser 选 json 还是 xml
Q5. dataset 选哪个
Q6. 跑分要不要集成进 wandb
--eval-prompt-data让eval/*自动 log(这是 issue 实验记录:terminal-rl Qwen3-8B run-3 (60h, 565 step, wandb msp60ius) — accuracy 0.32→0.52,无 mode-collapse + 6 类 dataset 卡顿 #4 §7.1 提的"加 holdout eval split")Q7. 替换 camel-agent 决策权
Q8. 评测时怎么处理已知坏 task(issue #3 §1.X 列的 5 类失败 task)
Q9. 跑分要不要做 confidence interval(每个 task 跑多次)
Q10. 跑分占 GPU 与训练冲突
5. 风险 / 依赖
6. 时间估算
全部完成估算: 2–3 个工作日(如果各开放问题决策不卡)
7. 关联
8. 下一步即刻可做(不依赖任何 Q 决策)
最快推进路径:
如果不勾任何 Q,现在就能开始的最小动作: