Orchard: An Open-Source Agentic Modeling Framework
Paper: arXiv:2605.15040 Code: microsoft/Orchard Code reference:
readme-only@c1bcdc16(2026-05-14) Dataset: microsoft/Orchard
1. Motivation (研究动机)
Agentic modeling 的目标不是只让 LLM 生成文本,而是把模型训练成能在外部环境中多轮规划、调用工具、观察反馈并完成任务的 autonomous agent。论文指出当前开放研究的主要瓶颈在两层:一层是系统层,高性能 agent 往往依赖闭源 harness、托管 sandbox、私有训练系统或专有服务;另一层是训练层,很多开源项目集中在 agent orchestration / prompt harness,却没有提供可复用的大规模 trajectory distillation、on-policy RL rollout、评测与数据发布链路。
具体问题有三点:第一,软件工程、浏览器导航、个人助理这些任务需要不同 Docker image、工具接口、截图或文件系统状态,单一 harness 很容易把模型训练到某个格式里,导致换 harness 后崩溃。第二,长轨迹任务 reward 稀疏,SFT 只模仿成功轨迹会丢掉大量失败但有探索价值的 partial progress;RL 固定采样 条 rollout 又会把算力浪费在全成功或全失败的 prompt 上。第三,环境服务如果绑定 trainer、scheduler 或 agent harness,数据、recipe 和模型就很难跨任务复用。
Orchard 要解决的是:构建一个薄的、Kubernetes-native、harness-agnostic environment layer,并在它上面展示三条可复用 agentic training recipe:Orchard-SWE、Orchard-GUI、Orchard-Claw。这个问题值得研究,因为一旦环境层能稳定提供 sandbox lifecycle、command execution、file I/O、network policy 和 REST API,SFT、RL rollout、评测、不同 harness 与不同任务域就可以共享同一套基础设施,开源社区也更容易复现实验、迁移数据和比较训练方法。
Figure 1 解读:左图把 SWE-bench Verified resolve rate 放在参数规模轴上,Orchard-SWE SFT+RL 用 30B-A3B 规模达到 67.5%,接近大 10–30 倍的 frontier MoE。右图显示 Orchard-GUI 以 4B VLM backbone 达到 WebVoyager / Online-Mind2Web / DeepShop 平均 68.4%,接近 Gemini computer-use-preview 的 69.3%,强调论文的核心动机:如果 environment layer 和训练 recipe 做对,小模型也能在 agentic task 上接近大模型或闭源系统。
2. Idea (核心思想)
核心 insight 是:agent 能力训练的可复用边界不应放在某个 harness 或 trainer 内,而应下沉到一个薄的 environment service。Orchard Env 只负责 sandbox 生命周期、执行、文件、网络隔离与 API;trajectory collection、SFT、RL、evaluation 和 harness 都在它上层组合,因此同一个环境层可以服务 SWE、GUI 和 Claw 三个很不同的 agentic domain。
关键创新是把“开源 agent 框架”从常见的 prompt/harness 编排推进到可训练的 agentic modeling stack:SWE 中用 credit-assignment SFT 学失败轨迹的 rise segment,用 BAR 提升稀疏 reward RL 的信息密度;GUI 中用少量高质量 browser trajectory + judge-grounded RL 训练 4B VLM;Claw 中用合成 workflow 任务和跨 harness 训练验证技能迁移。
与 E2B / Daytona 这类 managed sandbox service 相比,Orchard Env 强调 self-host、Kubernetes-native 和低成本;与 MegaFlow / ProRL Agent 这类 rollout/training infrastructure 相比,它不是把环境管理耦合进 trainer,而是保持独立 REST service;与 Browser-Use、OpenHands 等 harness 相比,它不规定 agent loop 和 tool schema,而是让多个 harness 都能复用同一 sandbox substrate。
更深一层看,Orchard 的方法论把 agentic modeling 拆成三个可迁移层次:第一层是 environment substrate,保证所有任务都能被 sandbox、执行、回收和审计;第二层是 trajectory substrate,把 teacher rollout、失败轨迹、judge verdict 和 harness trace 都保存成可训练数据;第三层是 optimization substrate,用 SFT 给模型初始 tool-use prior,再用环境真实反馈做 RL。这样的分层使 SWE 的 bash/file-edit loop、GUI 的 Playwright screenshot loop、Claw 的 productivity-tool loop 可以共享同一套基础设施,但不强迫它们共享同一个 agent prompt 或 tool schema。
3. Method (方法)
3.1 Overall framework: Orchard Env 作为薄环境层
Figure 2 解读:图中间的 Orchard Env 是核心抽象,向上连接 trajectory distillation、SFT、RL rollout 和 evaluation,向下连接 SWE Docker、browser sandbox、Claw tool environments 等异构任务环境。顶层的 Orchard-SWE、Orchard-GUI、Orchard-Claw 不是三个独立系统,而是三种使用同一 Env primitive 的 recipe:它们共享 sandbox lifecycle / execution / file / network API,但各自拥有不同 harness、teacher、reward 和 model backbone。
Orchard Env 的设计目标可以概括为三个 requirement:
- Thin, standalone service boundary:环境管理从 agent harness、model serving、training orchestration 中拆出来,调用方只依赖稳定 API。
- Low-cost image compatibility:通过 runtime agent injection 支持任意任务 Docker image,不要求为每个 SWE repository 或 browser task 重建镜像。
- Accessible and cost-practical at scale:运行在标准 Kubernetes / cloud VM 上,能使用 autoscaling 和 spot instance,避免托管 sandbox 的高额长时 rollout 成本。
3.2 Orchard Env architecture

Figure 3 解读:架构分成 Python SDK、FastAPI orchestrator、in-pod agent 三层。冷路径(Pod create/delete/readiness)走 Kubernetes API server;热路径(exec / file / health)直接通过 Pod IP 访问 sandbox 内部的 lightweight FastAPI agent,避免 kubectl exec 和 WebSocket setup 的开销。这个设计让生命周期管理保持中心化,但命令执行不被 Kubernetes control plane 卡住。
三个组件的职责如下:
- Client SDK:提供
SandboxClient/AsyncSandboxClient,支持创建 sandbox、命令执行、文件上传下载、patch 应用、context-manager 自动清理、heartbeat 和 retry。 - Orchestrator:FastAPI Deployment,多副本可选 Redis backend;把
POST /sandboxes转成 Pod spec,注入 init container、resource limit、NetworkPolicy、readiness probe;PodWatcher用 KubernetesLIST+WATCH缓存状态,ExecManager把执行请求路由到具体 Pod IP,并用 per-sandbox lock 序列化同一 sandbox 的并发请求。 - In-pod agent:运行在 sandbox container 内的轻量 FastAPI server,暴露
/exec、file upload/download/list 和 health endpoint;命令超时会 kill 整个 process group;只在 cluster internal network 可达。
直觉上,Orchard Env 能同时支持大规模训练和跨 domain 复用,是因为它把“环境中发生了什么”变成了一组很窄的 primitive,而不是把某个 agent loop 写进基础设施。SWE harness 可以把 bash/file edit/submit 封装在上层,GUI harness 可以把 Playwright 操作和截图观察封装在上层,Claw harness 可以把邮件/日历/工具服务封装在上层;Env 只保证这些操作都发生在隔离、可回收、可并发的 sandbox 中。
3.3 Orchard-SWE: credit-assignment SFT + BAR RL
Problem setting. SWE 任务采用 SWE-bench formulation:给定 GitHub issue 和 repo snapshot,agent 需要生成 patch,只有通过 gold test suite 才算正确。主评测是 SWE-bench Verified 500 human-validated instances,辅助评测包含 SWE-bench Multilingual 和 Terminal-Bench 2.0。agent 使用 ReAct-style loop,工具包括 shell execution、file viewing/editing 和 patch submission;每个 task 在 Orchard Env 中以 2 vCPU / 8 GiB sandbox 运行。
Trajectory collection. Orchard-SWE 从 SWE-rebench、SWE-rebench V2、Scale-SWE 收集任务,用 MiniMax-M2.5 和 Qwen3.5-397B teacher 采样,每个任务采 5 条 rollout,并使用 OpenHands 与 mini-swe-agent 两种 harness。过滤包括:超过 64K tokens 的轨迹、未定义 tool call、无法 parse 的 action。最终数据包含 107,185 trajectories、19,287 unique task instances、平均 47.5 turns、约 21K tokens/trajectory,其中 74,649 resolved、32,536 unresolved。
Credit-assignment SFT. 与只保留 solved trajectory 的做法不同,Orchard-SWE 让 teacher 对失败轨迹做 retrospective value estimation。给定失败轨迹 ,teacher 在知道最终测试结果的前提下估计每步历史 的成功概率: 然后定义 per-step credit: 论文抽取所有满足 的 maximal contiguous rise segments(),把失败轨迹中真正推进任务的片段纳入监督。SFT loss 只监督 resolved trajectory 的全部 action tokens,以及 unresolved trajectory 中 rise segment 内的 action tokens: 这里 是参与 loss 的 action-token 集合;环境 observation 和 rise segment 外的 action token 被 mask。这样 unresolved trajectory 不会把失败动作直接教给模型,但会贡献 repository navigation、file localization、partial root-cause analysis 等“正确方向”的中间能力。
def extract_rise_segments(values, epsilon=0.05):
"""Paper-derived pseudocode; official repo has not released implementation files."""
credits = [values[t + 1] - values[t] for t in range(len(values) - 1)]
segments, start = [], None
for t, c_t in enumerate(credits):
if c_t >= epsilon and start is None:
start = t
if (c_t < epsilon or t == len(credits) - 1) and start is not None:
end = t if c_t < epsilon else t + 1
segments.append((start, end))
start = None
return segments
def credit_assignment_sft_loss(model, trajectory, rise_segments=None):
logits = model(trajectory.prompt_tokens, trajectory.context_tokens)
action_mask = trajectory.assistant_action_token_mask.clone()
observation_mask = trajectory.environment_observation_token_mask
action_mask[observation_mask] = False
if not trajectory.resolved:
action_mask &= tokens_inside_segments(trajectory, rise_segments)
return torch.nn.functional.cross_entropy(
logits[action_mask], trajectory.target_tokens[action_mask]
)Balanced Adaptive Rollout (BAR). SWE RL 使用 environment-grounded binary reward:最终 patch 通过 gold test suite 记 ,否则记 。固定 条 GRPO rollout 在 SWE 里会遇到两个问题:prompt 太简单时全成功、太难时全失败,group reward variance 为 0;成功率偏离 0.5 时,即使 group 不退化也会被正/负样本不平衡主导。BAR 的做法是在线、per-prompt、stride-based 组装 fixed-size training group。
算法参数包括 training group size 、maximum budget 、stride 、target positive fraction interval 和理想比例 。每次生成 条 trajectory,按 reward 分成 positive / negative / backfill,尝试选出正样本比例落在区间内且最接近 的 条;成功则 early stop,否则继续生成;到 后仍不满足,就 relaxed fallback 或 TopRanked fallback。论文实验使用 rollout batch size 16、、、、。
def balanced_adaptive_rollout(prompt, policy, reward_fn, env_factory,
group_size=8, max_budget=16, stride=16,
rho_min=0.375, rho_max=0.625):
"""Paper-derived pseudocode for BAR; not copied from released code."""
pool = []
rho_star = 0.5 * (rho_min + rho_max)
for _ in range(0, max_budget, stride):
batch = [run_agent_trajectory(policy, prompt, env_factory())
for _ in range(stride)]
for traj in batch:
traj.reward = reward_fn(traj)
pool.extend(batch)
group = try_assemble_group(pool, group_size, rho_min, rho_max, rho_star)
if group is not None:
return group
group = try_assemble_group(pool, group_size, 0.0, 1.0, rho_star)
return group if group is not None else top_ranked(pool, group_size)
def try_assemble_group(pool, group_size, rho_min, rho_max, rho_star):
usable = [t for t in pool if t.status in {"completed", "truncated"}]
positives = sorted([t for t in usable if t.reward > 0], key=lambda t: (t.status, len(t.response)))
negatives = sorted([t for t in usable if t.reward <= 0], key=lambda t: (t.status, len(t.response)))
if len(positives) + len(negatives) < group_size:
return None
n_min = math.ceil(rho_min * group_size)
n_max = math.floor(rho_max * group_size)
n_star = round(rho_star * group_size)
for n_pos in sorted(range(n_min, n_max + 1), key=lambda n: abs(n - n_star)):
n_neg = group_size - n_pos
if n_pos <= len(positives) and n_neg <= len(negatives):
return positives[:n_pos] + negatives[:n_neg]
return None最终 rollout group 内的 advantage 仍按 group-relative reward 标准化:
3.4 Orchard-GUI: generic browser harness + judge-grounded RL
Orchard-GUI 采用 browser-use agent formulation:任务由起始 URL 和自然语言 intent 定义,agent 通过浏览器界面完成任务,最终用 LLM-as-a-judge 根据 final response 和 screenshot sequence 判定成功。评测包含 WebVoyager、Online-Mind2Web、DeepShop。论文刻意不用 Browser-Use 这类 bespoke harness,而是使用通用 ReAct-style loop 和 OpenAI tools schema,动作空间包含 13 个 atomic tools:click、hover、drag、write、press_keys、scroll、goto_url、go_back、wait、new_tab、switch_tab、close_tab、done(response)。
每个 GUI episode 在 Orchard Env 中运行 Playwright-controlled Chromium sandbox(2 vCPU / 8 GiB)。输入包含 task intent、最新 screenshot、viewport、tab summary;模型输出 <think>...</think> 和 <tool_call>;工具响应连同新 screenshot 作为下一轮 user turn。为了避免 30-step rollout 的 screenshot history 撑爆 64K context,训练时只保留最近 张 screenshot,依赖此前 reasoning trace 携带历史信息。
Figure 4 解读:GUI 数据从 WebGym 的 292,092 raw tasks 出发,依次移除 evaluation overlap、child tasks、WebVoyager intents、long-tail sites、Qwen3-Embedding-8B 相似度 的近重复 intent,得到 15,601 个 deduplicated seed tasks。这个过滤链路服务两个目标:避免 benchmark leakage,同时把训练任务集中到更常见、更可评测的网站分布上。
Figure 5 解读:左侧显示 15,601 个 seed tasks 分布在 6 类 top-level domains;右侧强调覆盖率:任务池覆盖 MOZ Top-500 的 425/500(85.0%)和 SimilarWeb Top-100 的 57/100(57.0%),其中 48.5% 的任务落在 MOZ Top-500、13.0% 落在 SimilarWeb Top-100。这说明 GUI 数据不是窄站点 benchmark,而是面向 open web 的多站点训练池。
Figure 6 解读:每个 task 用 Qwen3-VL-235B-A22B-Thinking teacher 采 4 条 rollout,共得到 62,395 条 teacher rollouts。左图按四次 rollout 的结果划分:26.3% tasks 全成功、42.1% mixed、31.6% 全失败;全失败任务中 41.1%(2,026 tasks,占总池 13.0%)是 captcha 全阻塞。右图按网站展示 teacher success rate,说明失败不完全来自模型能力,也来自反爬、认证、region lock 等环境因素。
SFT 只使用 GPT-4.1 judge 判为 success 的 rollout,并且刻意不吃掉所有 successful pool:PAE-WebVoyager 成功 rollout 有 4,826 条,InSTA-v3 成功 rollout 有 26,154 条,但 SFT 只从 PAE-WebVoyager 中每 task 取最短 successful trajectory,并把每站点 cap 到 ,得到 412 个 SFT tasks / 70 个网站。RL 使用同一任务池但更严格去重(similarity threshold 0.95),得到 2,198 tasks。
GUI SFT 从 Qwen3-VL-4B-Thinking 初始化,视觉 encoder 和 multi-modal projector 冻结,只更新 language-model weights;每个 assistant turn 变成一个训练样本,只监督最后目标 assistant response,mask system prompt、历史 assistant turns 和环境 observation。SFT 训练 3 epochs,peak LR ,10% linear warmup + cosine schedule,per-device batch 2、gradient accumulation 8、8 data-parallel workers,global batch 128。
GUI RL 从 SFT checkpoint 出发,使用 multi-turn GRPO:每个任务采样一组 browser trajectories,按 trajectory-level reward 算 group-relative advantage,并广播到所有 assistant-response tokens;observation 和 tool feedback tokens 被 mask。reward 是格式检查 + binary judge:所有 assistant turn 都 parse 成合法 <think> + tool-call 且最终 done(response) 被 GPT-4.1 判成功则 ;重复格式失败导致终止则 ;其他情况为 。RL 使用 asymmetric PPO clipping(、),无 KL / entropy regularization,并采用 step-budget curriculum:先用 15-step cap 训练到饱和,再把 cap 提升到 30。
def gui_trajectory_reward(turns, final_response, screenshots, user_intent, judge):
"""Paper-derived pseudocode for Orchard-GUI reward."""
if any(not parses_as_think_and_tool_call(t.assistant_text) for t in turns):
return -1.0
if too_many_format_failures(turns):
return -1.0
verdict = judge.score(final_response=final_response,
screenshots=screenshots,
user_intent=user_intent)
if verdict == "success":
return 1.0
if verdict in {"judge_api_failure", "captcha_aborted"}:
return None # remove_sample: zero loss mask
return 0.0Figure 7 解读:红色曲线表示从 SFT checkpoint 初始化的 RL,蓝色曲线表示直接从 base model 初始化的 RL。两者训练 reward 可能接近,但 SFT 初始化在 evaluation success 上更高且更稳定,说明 browser RL 不是只靠在线 reward 搜索就够了;高质量 SFT 提供的 tool-use prior 决定了 RL 是否能泛化到 held-out evaluation tasks。
3.5 Orchard-Claw: personal assistant workflow agent
Orchard-Claw 面向 Claw-Eval 的多步日常 workflow:如邮件分类、通知处理、日历/工具使用等。任务得分由 completion、safety、robustness 聚合: 当 时记为 pass。训练和评测使用两类 harness:Claw-Eval 自带 ReAct-style harness,以及更快的 ZeroClaw Rust harness;每个任务环境在 Orchard Env 中以 2 vCPU / 2 GiB sandbox 运行。
Claw 数据通过 Claude Opus 4.6 从 Claw-Eval seeds 和 ClawHub workflows 合成,四步循环为:提出并过滤 task ideas;生成环境、文件、tool server 和 test script;用 MiniMax-M2.5 solver 生成 rollout;根据 rollout 迭代任务可行性和指令清晰度。平均每个任务合成成本 $4.9,最终得到 192 tasks。SFT 数据由 MiniMax-M2.5 teacher 通过两个 harness 各采 5 条 rollout,只保留完成任务的 trajectories;为记录 ZeroClaw 这类复杂 harness 的训练样本,作者实现 proxy LLM server,记录每次 LLM call 的 input/output,最终得到 561 trajectories 和 4,537 training pairs。
SFT 使用 Qwen3-30B-A3B-Thinking-2507,训练 1 epoch,global batch 16,64K context,cosine LR 从 衰减到 ,超长序列 left truncation;推理时扩到 256K context。RL 使用标准 GRPO,batch size 8、group size 8、150 steps;每 step 可并行 64 个异步 rollout sandboxes。reward 为 binary environment-grounded:rollout 通过所有 test scripts,则该 rollout 内所有 input/output pairs 得 ,否则得 ;不设最大 step,而设 10-minute wall-clock budget,超时 rollout 全部排除训练。
def claw_rollout_reward(test_results, timed_out=False):
"""Paper-derived pseudocode for Orchard-Claw binary reward."""
if timed_out:
return None # aborted rollouts are excluded from training
return 1.0 if all(test_results.values()) else -1.0
def claw_grpo_batch(policy, tasks, group_size=8):
groups = []
for task in tasks:
rollouts = run_parallel_claw_rollouts(policy, task, group_size=group_size,
wall_clock_budget_sec=600)
usable = [r for r in rollouts if r.reward is not None]
groups.append(compute_group_relative_advantages(usable))
return groupsFigure 8 解读:左图显示 RL 训练过程中 train / validation success rate 上升,右图显示 episode length 也随训练增长。作者的解释是:模型不只是学会更早终止,而是在更长多轮交互中完成更多任务;这支持 Claw 这类 workflow agent 需要 end-to-end rollout 训练,而不是只做短回答 SFT。
3.6 Released repo state and code-to-paper mapping
论文公式与 released code 实现差异:截至 readme-only@c1bcdc16,官方 GitHub 仓库公开但处于 Release on hold — code will be released soon 状态,仅包含 README.md、license/security 文件和 docs/figures/orchard-architecture.png;没有实际 src/orchard/、server/、agent/、training recipe、reward/loss 或 deployment scripts。因此当前不能验证论文公式与实现是否一致,也不能从 launch config 读取训练超参;上文伪代码均按论文算法写成,不代表 released code。
Code reference:
readme-only@c1bcdc16(2026-05-14) — pseudocode and mapping based on the public repo state inspected for this note
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Orchard Env overall scope, SDK/server/agent promised layout | README.md | No released class/function; README describes intended src/orchard/, server/, agent/ layout |
| Public architecture image | docs/figures/orchard-architecture.png | Static figure asset |
| Orchard-SWE / Orchard-GUI / Orchard-Claw training recipes | README.md roadmap section | Not released; README says recipes/evaluation suite/Orchard-Claw will follow |
| Datasets | Hugging Face microsoft/Orchard linked from README | swe and gui dataset configs, not source code |
4. Experimental Setup (实验设置)
4.1 Datasets and scale
| Domain | Dataset / source | Scale used in paper |
|---|---|---|
| Orchard-SWE SFT | SWE-rebench, SWE-rebench V2, Scale-SWE teacher rollouts | 107,185 trajectories; 74,649 resolved; 32,536 unresolved; 19,287 unique task instances |
| Orchard-SWE RL | SWE-rebench V2 Python subset + held-out Scale-SWE not used in SFT | filtered to about 2k instances with initial pass rate |
| Orchard-GUI full pool | WebGym raw tasks after filtering | 292,092 raw tasks 15,601 seed tasks |
| Orchard-GUI SFT | PAE-WebVoyager successful rollouts | 412 tasks / 70 websites, shortest successful rollout per task, website cap |
| Orchard-GUI RL | PAE-WebVoyager + InSTA-v3 deduped tasks | 2,198 RL tasks |
| Orchard-Claw | Synthetic Claw-Eval / ClawHub-derived workflows | 192 tasks; 561 trajectories; 4,537 training pairs |
4.2 Baselines and metrics
- SWE:对比 R2EGym-Agent、OpenHands-LM、Skywork-SWE、SWE-Agent-LM、SWE-Mirror-LM、SWE-Compressor、SWE-Master、OpenSWE、Scale-SWE-Agent、Qwen3/Qwen2.5/GLM 系列等;主指标是 SWE-bench Verified resolve rate,辅助包括 SWE-bench Multilingual、Terminal-Bench 2.0、SWE-rebench V2 pass@1/pass@3。
- GUI:对比 GPT-5 / Gemini / OpenAI computer-use-preview、UI-TARS、Fara-7B、MolmoWeb、Qwen3-VL-4B/235B;指标是 WebVoyager、Online-Mind2Web、DeepShop success rate 和三者平均值。
- Claw:对比 Claude Opus 4.6、GPT 5.4、Gemini 3.1 Pro、Qwen3.5 397A17B、MiniMax、Kimi、Nemotron、Qwen3-30B-A3B、Qwen3-Coder;指标是 ClawEval 与 。
- Environment:执行 latency、1,000 sandbox stress-test success rate、Terminal-Bench 2.0 Docker vs Orchard Env pass rate、128 parallel sandboxes × 240 hours 成本。
4.3 Training and infrastructure configs reported by the paper
- Orchard Env evaluation:8 nodes,每 node 32 vCPU / 128 GiB RAM;sandbox image 预拉取;每 sandbox 2 vCPU / 8 GiB。Stress test 使用 1,000 parallel sandboxes,每个执行 4 commands。
- Orchard-SWE SFT:Qwen3-30B-A3B-Thinking;5 epochs;global batch 128;64K context;cosine LR ;inference context 128K。
- Orchard-SWE RL:最多 150 steps;global batch 128;64K context;LR peak reported as cosine decay;rollout batch 16;training group ;;stride ;positive fraction interval 。
- Orchard-GUI SFT/RL:Qwen3-VL-4B-Thinking;vision encoder 和 projector 冻结;SFT 3 epochs,peak LR ,10% warmup,global batch 128;RL 使用 GRPO、PPO clipping 、无 KL/entropy、15-step 到 30-step curriculum。
- Orchard-Claw SFT/RL:Qwen3-30B-A3B-Thinking-2507;SFT 1 epoch,global batch 16,64K context,LR ,推理 256K;RL batch 8、group 8、150 steps、每 step 64 async sandboxes、10-minute wall-clock budget。
由于官方 repo 当前未发布 launch scripts/configs,这些训练配置只能引用论文正文,不能进一步追溯到 released config override;这是当前复现层面的主要缺口。
5. Experimental Results (实验结果)
5.1 Orchard Env system results
| Metric | Orchard Env result | Comparison / interpretation |
|---|---|---|
| Avg command latency | 0.280 s | SkyPilot Code Sandbox 0.284 s;E2B 0.747 s;Modal 2.046 s |
| 1,000-sandbox stress test | 100% success, 26 s end-to-end | 4,000 commands total, avg create 11.75 s, avg exec 0.28 s |
| Terminal-Bench 2.0 GPT-4.1 | 35.1 | Docker baseline 34.1 |
| Terminal-Bench 2.0 MiniMax-M2.5 | 54.4 | Docker baseline 52.6 |
| Terminal-Bench 2.0 Qwen3-8B-thinking | 8.8 | Docker baseline 7.0 |
| Cost: 128 sandboxes × 240h | $673 on spot / $3,362 on-demand | Daytona/E2B $7,078;spot 比 managed sandbox 低约 90% |
结果支持两点:直接 Pod-IP hot path 确实把 command latency 压到接近原生 sandbox;agent injection 没有明显损害下游 agent performance,因为 Terminal-Bench 2.0 上 Orchard Env 与 Docker baseline 在 3 个模型上都在 run-to-run variance 内。
5.2 Orchard-SWE results
| System | Base Model | Harness | SWE-bench Verified resolved |
|---|---|---|---|
| Qwen3-30B-A3B-Instruct | — | OpenHands | 22.0 |
| Qwen3-Coder-30B-A3B-Instruct | — | OpenHands | 51.6 |
| GLM-4.7-Flash-30A3B | — | — | 59.2 |
| Scale-SWE-Agent | Qwen3-30B-A3B-Instruct | OpenHands | 64.0 |
| Orchard-SWE (SFT) | Qwen3-30B-A3B-Thinking | mini-swe-agent | 64.3 |
| Orchard-SWE (SFT) | Qwen3-30B-A3B-Thinking | OpenHands | 62.1 |
| Orchard-SWE (SFT+RL) | Qwen3-30B-A3B-Thinking | mini-swe-agent | 67.5 |
Orchard-SWE 的同规模提升最清晰:相对 Qwen3-30B-A3B-Instruct,从 22.0% 到 SFT 64.3% 是 +42.3 points,SFT+RL 67.5% 则是 +45.5 points;相对 Qwen3-Coder-30B-A3B-Instruct 的 51.6% 也有明显优势。SFT 已接近 Scale-SWE-Agent 64.0%,RL 再提升到 67.5%。
| System | OpenHands SWE-V | mini-swe SWE-V | mini-swe SWE-M | Kimi-CLI SWE-V | Kimi-CLI T-Bench 2.0 |
|---|---|---|---|---|---|
| Scale-SWE | 64.0 | invalid | invalid | invalid | invalid |
| OpenSWE-32B | 62.4 | 54.9 | 28.7 | 3.6 | 0.0 |
| Orchard-SWE | 62.1 | 64.3 | 51.0 | 45.0 | 20.1 |
泛化表说明单一 harness leaderboard 会掩盖 harness lock-in。OpenSWE-32B 从 native OpenHands 62.4% 掉到 Kimi-CLI 3.6%,而 Orchard-SWE 在三种 harness 上保持 45.0–64.3%,最差 drop 为 19.3 points。论文也明确承认这还没有解决泛化问题:Kimi-CLI Verified 的 45.0% 相对 mini-swe 64.3% 仍有显著下降,完全未见过的 harness/domain 仍是挑战。
关键 ablation:
- Data scale dominates selection:SFT-only 从 512 到 2048 trajectories 的增益大于 selection strategy 差异;例如 Diverse repo 44.0 52.2(+8.2),而 2048 时所有 selector spread 只有 2.0 points。
- Cross-harness training is necessary:12K resolved trajectories 控制实验中,mini-swe 训练/评测为 57.9,但换 OpenHands 评测掉到 19.0;OpenHands 训练/评测为 53.5,换 mini-swe 为 28.0。
- Credit-assignment SFT 有效:scale-matched 32K resolved-only 为 59.3%,加入 32K unresolved rise-segment trajectories 后为 61.2%,+1.9 points。
- RL 的作用依赖 init:moderate init 在 Verified 48.1 50.1、Multilingual 22.0 28.7;heavy init 在 Verified 64.3 67.5,但 Multilingual 略回退,说明重 SFT 后 RL 更偏 in-distribution specialization。
5.3 Orchard-GUI results
| System | Steps | Training tasks | WebVoyager | Online-M2W | DeepShop | Avg |
|---|---|---|---|---|---|---|
| Gemini computer-use-preview | 100 | — | 88.6 | 57.3 | 62.0 | 69.3 |
| Qwen3-VL-235B-A22B-Thinking | 30 | — | 63.1 | 63.7 | 56.7 | 61.2 |
| MolmoWeb-8B | 100 | >278.5K | 78.2 | 35.3 | 42.3 | 51.9 |
| Qwen3-VL-4B-Thinking | 30 | — | 49.0 | 32.0 | 33.3 | 38.1 |
| Orchard-GUI-4B-SFT | 30 | 0.4k | 60.2 | 47.0 | 48.7 | 52.0 |
| Orchard-GUI-4B (SFT+RL) | 30 | 2.6k | 74.1 | 67.0 | 64.0 | 68.4 |
Orchard-GUI 的主要结论是小数据 + environment-grounded RL 在开放浏览器任务上非常有效。SFT 到 SFT+RL 的提升为 WebVoyager +13.9、Online-Mind2Web +20.0、DeepShop +15.3,平均从 52.0 到 68.4。Online-Mind2Web 和 DeepShop 上尤其明显:相对最强 prior open baseline MolmoWeb-8B,Online-Mind2Web 高 +31.7 points,DeepShop 高 +21.7 points;相对 235B teacher,也在 Online-Mind2Web / DeepShop 上分别高 +3.3 / +7.3。
局限也很直接:GUI 数据受网站环境强烈影响,15,601 task pool 中 4,934 个 all-fail tasks 里有 2,026 个是 captcha-blocked;这意味着 reward 和失败归因中混有环境不可达、反爬和认证噪声。论文通过 remove_sample 排除 judge API failure 和 captcha-aborted runs,但开放网页环境仍会限制可复现性。
5.4 Orchard-Claw results
| System | Tasks | ClawEval | ClawEval |
|---|---|---|---|
| Claude Opus 4.6 | — | 70.8 | 80.8 |
| MiniMax M2.5 | — | 47.2 | 65.2 |
| Qwen3-30B-A3B-Thinking | — | 14.3 | 39.8 |
| Qwen3-Coder-30B-A3B-Instruct | — | 30.4 | 49.7 |
| Orchard-Claw (SFT) | 0.2k | 22.4 | 50.3 |
| Orchard-Claw (SFT+RL) | 0.2k | 31.7 | 59.6 |
Orchard-Claw 用 0.2k synthetic tasks 超过同规模开源 baseline:SFT+RL 相对 Qwen3-30B-A3B-Thinking 的 从 14.3 到 31.7, 从 39.8 到 59.6;相对 Qwen3-Coder-30B-A3B-Instruct 的 30.4 / 49.7,也在 上高 9.9 points。RL 相对 SFT 的增益为 +9.3、 +9.3。
| Model | ReAct | ZeroClaw | ReAct | ZeroClaw |
|---|---|---|---|---|
| Qwen3-30B-A3B-Thinking | 14.3 | 20.5 | 39.8 | 44.7 |
| Qwen3-Coder-30B-A3B-Instruct | 30.4 | 29.8 | 49.7 | 54.7 |
| Orchard-Claw (SFT) | 22.4 | 25.5 | 50.3 | 62.1 |
| Orchard-Claw (SFT+RL) | 31.7 | 41.0 | 59.6 | 73.9 |
跨 harness 评测是 Claw 的核心证据:同一个 Orchard-Claw SFT+RL 模型从 ReAct 切到 ZeroClaw 后, 从 31.7 到 41.0(+9.3), 从 59.6 到 73.9(+14.3),增益大于对比模型。作者把这归因于训练阶段就暴露在多个 harness 中,使模型能利用 ZeroClaw 的 subagents、auto-compact 等更强 inference-time harness feature,而不是过拟合 ReAct 格式。
5.5 Overall conclusion and caveats
论文的证据链支持一个 systems + learning 的联合结论:薄、开源、harness-agnostic 的 Orchard Env 让数据收集、SFT、RL 和评测都能跨 domain 复用;在此基础上,SWE 的 credit-assignment SFT / BAR、GUI 的 judge-grounded RL、Claw 的跨 harness workflow 训练分别证明环境层不是单纯工程封装,而会影响最终 agent capability。
主要 caveats:第一,官方 GitHub 在当前 commit 还没有发布实现代码,复现只能依赖论文和数据,无法核对训练 config、reward/loss 代码或 paper-vs-code gap。第二,SWE 泛化仍未解决,Kimi-CLI 和 Terminal-Bench 2.0 相比 in-domain SWE-bench 仍有大幅下降。第三,GUI 环境里 captcha、反爬、region lock 和 judge failure 会污染 reward 信号。第四,Claw 只用了 192 synthetic tasks,虽然显示了 RL 和 harness transfer 的潜力,但与 Claude/GPT/Gemini 等闭源大模型仍有明显差距。