Orchard:一个开源的智能体建模框架 Orchard: An Open-Source Agentic Modeling Framework
以薄环境服务层为核心的开源框架,让代码、GUI、助手三类智能体共享同一套训练基础设施
前置知识
智能体轨迹(Agentic Trajectory)
智能体在外部环境中执行任务时产生的多轮交互序列,表示为 $\tau = (s_0, a_0, s_1, \ldots, s_T)$,$s_t$ 是状态,$a_t$ 是动作,$s_{t+1}$ 是反馈。一条 SWE 轨迹平均 47.5 回合、约 21K token。
本文所有训练数据(SFT 和 RL 阶段的 rollout)都是轨迹;理解轨迹的组成和长度,是判断环境服务为何需要 0.28s 延迟、为何 64K 上下文等工程决策的基础。
GRPO(Group Relative Policy Optimization)
DeepSeek 提出的 RL 算法,给定同一 prompt 采样 N 条轨迹,按组内奖励的均值和标准差标准化为优势 $A_i = (r_i - \mu) / \sigma$,用策略梯度更新。不需要单独 critic,但依赖组内方差提供学习信号。
本文的 Balanced Adaptive Rollout(BAR)算法就是针对 GRPO 在稀疏奖励场景下的两大问题(浪费算力和组别不平衡)设计的;不熟悉 GRPO 就无法理解 BAR 的目标函数。
轨迹蒸馏(Trajectory Distillation)
用更强的教师模型(如 235B 参数的 Qwen3-VL)在任务上执行多次 rollout,将成功的轨迹作为监督信号训练较小的学生模型。与「行为克隆」的区别是轨迹蒸馏天然包含多轮交互和错误恢复。
Orchard-SWE 用 MiniMax-M2.5 和 Qwen3.5-397B 两个教师模型蒸馏出 107K 条轨迹,其中 32K 条是失败的——这是「信用分配 SFT」的物质基础。
Kubernetes 原生架构
Kubernetes(K8s)提供 Pod、NetworkPolicy、Watch 等原语。Orchard Env 通过 init container 把代理注入任意 Docker 镜像,并通过 Pod IP 直连绕过 kubectl exec 的 WebSocket 开销。
理解 Pod IP 直连和 init container 注入这两个工程技巧,是看懂 Orchard Env 为何能达到 0.28s 延迟和 10× 成本优势的关键。
SWE-bench Verified
OpenAI 2024 年从 SWE-bench 中人工校验过的 500 个实例子集,给定 GitHub issue 和仓库快照,智能体需要提交能通过金标准测试套件的 patch。和原始 SWE-bench 相比,Verified 集移除了问题描述不清、测试不稳定、依赖缺失等争议实例。
这是 Orchard-SWE 的主要评估基准(67.5%),也是衡量代码智能体能力的事实标准;不理解 Verified 集就无法定位论文「open-source SOTA」的含金量。
研究动机
智能体建模(agentic modeling)的核心瓶颈不在模型架构,而在「环境层」。每条 SWE 任务的轨迹需要克隆仓库、安装依赖、运行测试套件——所有操作都必须在隔离的容器中完成,规模上推到数千个并发时,环境的生命周期管理(创建、清理、心跳、超时)、异构镜像支持(不同任务需要不同基础镜像)、冷热路径分离(频繁的 exec 调用不应走 K8s API server)成为工程地狱。现有的解决路径各有缺陷:E2B/Daytona/Modal 等托管沙箱平台对基础设施配置、定价、可复现性几乎无控制权;ProRL Agent 和 MegaFlow 这类垂直整合训练栈把环境层和 agent harness、推理调度、奖励计算耦合在一起;ROCK 等更广义的框架则没有把环境层隔离成最小服务边界。结果是轨迹数据集、训练配方、评估流水线都被绑定到特定的 harness 上,跨域、跨 harness、跨训练阶段都无法复用。
本文的目标是本文要交付一个开源的、端到端的智能体建模框架 Orchard,其核心是 Orchard Env——一个 Kubernetes 原生、薄、harness 无关的独立环境服务。这个服务要满足三个具体目标:(1) 在三个正交轴上可复用——跨任务域、跨 agent harness、跨训练阶段(轨迹蒸馏、on-policy RL rollout、评估);(2) 支持异构 Docker 镜像且零改造代价;(3) 部署在标准 K8s 集群上,比托管替代品便宜一个数量级。围绕这个环境层,作者再在 SWE、GUI、个人助手三个域上实现完整 SFT+RL 配方,并在每个域上达到开源 SOTA。
与已有工作不同的是,本文抓住了「环境层应该是基础设施,不是训练栈的一部分」这个被普遍忽视的视角。已有工作把环境管理当作训练系统的附属功能(ProRL Agent、MegaFlow)或商业云产品(E2B、Daytona),前者牺牲了模块化,后者牺牲了研究可控性。Orchard 的独特切入角度是把环境层抽成「一个 REST API 暴露的小服务」,只关心沙箱生命周期、命令执行、文件 I/O、网络策略四件最基本的事,向上不绑定任何 harness、训练器、推理后端。这一定位使得同一个环境服务能同时支撑 SFT 阶段的轨迹生成、RL 阶段的 rollout、最终评估,且在不同任务域(代码仓库 vs. 浏览器 vs. 个人工作流)之间无缝切换。配合「运行时 agent 注入」这一关键工程技巧——通过 init container 把代理拷进任意用户提供的镜像——Orchard Env 在不牺牲异构性的前提下获得了 K8s 编排的全部好处。
核心方法
Orchard 的设计哲学是「先有干净的环境服务边界,再叠加领域无关的训练配方」。架构分三层:底层 K8s 沙箱群,中间 Orchard Env 的 REST 网关,顶层任何能调用该网关的harness 或训练器。Orchard Env 内部又分三层:客户端 SDK → FastAPI 编排器 → Pod 内代理。「冷路径走 K8s API server、热路径绕开 API server 直连 Pod IP」的分离把命令执行延迟压到 0.28s,比 E2B 快 2.7×、比 Modal 快 7.3×。在这个环境层之上,作者在三个域实例化相同 SFT+RL 配方:Orchard-SWE 蒸馏 107K 多教师轨迹、引入信用分配 SFT、用 BAR 处理稀疏奖励;Orchard-GUI 用 412 SFT + 2.2K RL 任务训练 4B VLM;Orchard-Claw 用 0.2K 合成任务训练助手。三者共享同一 env 服务,但工具接口、奖励信号、harness 完全不同。
Orchard 核心创新分两层。基础设施层是「薄而解耦」:Orchard Env 只暴露沙箱生命周期、exec、file I/O、network policy 四个原语和 REST API,agent harness、训练器、推理后端、任务域都不嵌入;配套「运行时 agent 注入」和「Pod IP 直连」两个工程技巧让薄服务既灵活又快。训练方法层核心创新是「从失败中学习」+「平衡 rollout」:信用分配 SFT 用 LLM-based 时序差分价值估计,从失败轨迹中提取「上升段」,把通常被丢弃的 32.5K 未解决轨迹变成监督信号;BAR(Balanced Adaptive Rollout)针对 GRPO 在稀疏奖励下「组内方差为零浪费算力」和「组别不平衡导致优势估计有偏」两个问题,按 stride 增量采样直到能组装出正例比例落在 $[0.375, 0.625]$ 的训练组,让每个梯度批次承载最大信息量。
方法步骤详情
Orchard Env 运行分三步。(1) 创建:客户端 `POST /sandboxes` 提交 Docker 镜像,编排器转 K8s Pod 规格,init container 把 agent 拷进用户镜像并启动。(2) 执行:`exec(command)` 通过 Pod IP 直连到 pod 内 FastAPI 代理的 `/exec` 端点,命令作为子进程执行(带可配置超时,per-sandbox 锁防并发交错)。(3) 清理:后台 reconciliation loop 清理心跳过期或 Pod 被驱逐的孤立沙箱。Orchard-SWE 训练两阶段:Stage 1 SFT 用交叉熵损失,损失仅计算上升段内 token 及解决轨迹全部 token;Stage 2 RL 用 BAR+GRPO,从 SFT 检查点在 ~2K 难度过滤的 SWE-rebench V2 任务上做 on-policy rollout,奖励为测试通过 ±1。Orchard-GUI/Claw 流程类似但 SFT 池分别只有 412 和 561 条,RL 用 GPT-4.1 当 judge 给二元奖励。
技术新颖性
在环境层,与 ProRL Agent 的关键区别是 ProRL 把环境层和 agent handler 插件、LLM 推理路由、评估逻辑绑在同一个 rollout server 里,而 Orchard Env 的 REST API 显式独立于训练循环和 harness;与 MegaFlow 的区别是 MegaFlow 的环境服务与 Qwen 训练管线共同设计,第三方训练器无法接入;与 E2B/Daytona 的区别是 Orchard 自托管在标准 K8s 上、利用 spot 实例可降本 10×。在训练方法层,「信用分配 SFT」和已有失败轨迹利用方法(如 ReST、Self-Refine)的本质区别是用 LLM 作为回溯价值函数(已知结果 + 完整历史 → 估计每步成功概率),提取的是「上升段」而非整条失败轨迹的简单 SFT;BAR 与 DAPO(丢弃全 0/全 1 组)、历史成功率预过滤、rollout 后下采样这些已有策略的区别是 BAR 在「每个 prompt、每个梯度步」按 stride 在线组装目标平衡组,可以提前停止以节省算力,也可以回退到最优排序,适应性更强。
实验结果
Orchard Env 系统层(表 3-4)延迟 0.28s,1,000 沙箱全生命周期压测 100% 成功(26s/4,000 exec ≈ 154 cmd/s),Terminal-Bench 2.0 与 Docker 基线持平,spot 成本 $673/240h 比 Daytona 便宜 90%。Orchard-SWE(表 7-8)Qwen3-30B-A3B-Thinking 在 SWE-bench Verified 达 64.3%(SFT)→ 67.5%(SFT+RL),领先同尺寸基线(Qwen3-Instruct 22.0%、Coder 51.6%、GLM-4.7-Flash 59.2%、Scale-SWE-Agent 64.0%);未见 Kimi-CLI harness 上保持 45.0%,OpenSWE-32B 暴跌至 3.6%,Scale-SWE 格式无效。Orchard-GUI 4B 在 WebVoyager 74.1%、Online-Mind2Web 67.0%、DeepShop 64.0%,平均 68.4% 是当前最强开源 GUI 智能体,比 MolmoWeb-8B(51.9%)高 16.5 pt,且击败自己 235B 教师(61.2%),训练任务 2.6K 比 MolmoWeb 278.5K 少两个数量级。Orchard-Claw 用 0.2K 合成任务把 Qwen3-30B-A3B 在 Claw-Eval 从 14.3% 提到 31.7% pass3、59.6% pass@3;切到 ZeroClaw 进一步飙至 41.0%/73.9%,是所有对比模型中跨 harness 增益最大(+9.3/+14.3)。消融(表 9-10):数据规模比选择策略更重要(N=2048 策略差距仅 2.0 pt),单 harness 训练导致严重锁定(mini-swe-agent 训出在 OpenHands 上掉到 19.0%),信用分配 SFT +1.9 pt,重 SFT 基础上 RL 反而轻微退化 OOD。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| SWE-bench Verified (SFT) | Resolve rate (%) | 64.3 (mini-swe-agent) / 62.1 (OpenHands) | Scale-SWE-Agent 64.0 (OpenHands); OpenSWE-32B 62.4 (SWE-Agent) | +0.3 over strongest 30B-A3B baseline; matches 72B models |
| SWE-bench Verified (SFT+RL) | Resolve rate (%) | 67.5 | OpenSWE-72B 66.0; SWE-Master-32B-RL 61.4; CoderForge-32B 59.4 | +1.5 over best 72B; +6.1 over best 32B; SOTA at ~3B active |
| SWE-rebench V2 (Python) | pass@1 / pass@3 (%) | 22.36 / 27.94 | Claude Opus-4.5 36.11 / 36.67; GLM-4.7 27.22 / 31.67 | Approaches GLM-4.7 with much smaller model |
| Cross-harness (Kimi-CLI, unseen) | SWE-bench Verified resolve rate (%) | 45.0 | OpenSWE-32B 3.6; Scale-SWE invalid (✗) | +41.4 over OpenSWE-32B; format-valid where others fail |
| Terminal-Bench 2.0 (Kimi-CLI) | Resolve rate (%) | 20.1 | OpenSWE-32B 0.0 | +20.1; non-zero generalisation |
| WebVoyager | Success rate (%) | 74.1 | MolmoWeb-8B 78.2; MolmoWeb-4B 75.2; Fara-7B 73.5 | On par with best open-source 7-8B at 4B backbone |
| Online-Mind2Web | Success rate (%) | 67.0 | MolmoWeb-8B 35.3; Qwen3-VL-235B teacher 63.7 | +31.7 over strongest 8B; +3.3 over 235B teacher |
| DeepShop | Success rate (%) | 64.0 | MolmoWeb-8B 42.3; Qwen3-VL-235B teacher 56.7 | +21.7 over 8B; +7.3 over teacher |
| Orchard-GUI average | Avg over 3 benchmarks (%) | 68.4 | Gemini computer-use-preview 69.3; MolmoWeb-8B 51.9 | Matches proprietary at 4B; +16.5 over strongest open |
| Claw-Eval (ReAct harness) | pass3 / pass@3 (%) | 31.7 / 59.6 | Qwen3-30B-A3B-Thinking 14.3/39.8; Qwen3-Coder-30B 30.4/49.7; MiniMax-M2.5 47.2/65.2 | +17.4/+19.8 over base; SOTA at 30B-A3B size |
| Claw-Eval (ZeroClaw harness) | pass3 / pass@3 (%) | 41.0 / 73.9 | Qwen3-30B-A3B-Thinking 20.5/44.7 (ZeroClaw); Qwen3-Coder 29.8/54.7 | +9.3/+14.3 over ReAct; largest harness-swap gain in table |
| Orchard Env exec latency | Avg command exec (s) | 0.28 | SkyPilot 0.284; E2B 0.747; Modal 2.046 | 2.7× faster than E2B, 7.3× faster than Modal |
| Orchard Env cost (128 sandboxes × 240h) | Total USD (spot / on-demand) | $673 / $3,362 | Daytona/E2B $7,078; Modal $10,305 | −90% (spot) / −53% (on-demand) vs Daytona |
| Orchard Env stress test | Success rate / commands-per-second | 100% / ~154 cmd/s | n/a (only Orchard Env self-reported) | 100% across 1,000 parallel sandboxes |
局限与改进
作者承认的核心局限是单 harness 训练导致严重锁定——表 10 中 mini-swe-agent 训出模型在 OpenHands 上掉到 19.0%,反向 28.0%。Orchard-SWE 通过多 harness 蒸馏缓解但未完全解决,在 Kimi-CLI 上仍掉 19.3 pt。Terminal-Bench 2.0 上 OpenSWE-72B 0.0%,Orchard-SWE 20.1% 但绝对值低。RL 阶段有「专业化效应」:重 SFT 基础上 RL 会让 OOD 轻微退化。Orchard-GUI 仅 2.6K 任务训练,WebVoyager 上与 MolmoWeb-8B 持平或略低,提示数据规模对短 horizon 任务仍是决定性因素。Orchard-Claw 合成任务仅 192 条($4.9/任务),31.7% pass3 仍远落后 Claude Opus 4.6 的 70.8%。我自己的额外观察:(1) BAR 的 [0.375, 0.625] 区间是经验值,未给敏感性分析;(2) 信用分配价值估计器依赖 LLM 的 per-step 价值,$\varepsilon=0.05$ 阈值 hand-tuned;(3) spot 价格依赖云厂商现货供给;(4) 1,000 沙箱压测是清洁实验室结果,生产 long-tail 故障概率未量化。
独立分析的弱点
四个弱点。(1) **信用分配价值估计器可靠性未验证**。教师做 zero-shot 回溯价值估计,但教师自身对成功概率的判断可能不准确——当失败原因是教师不理解的概念时,价值曲线会系统性偏高或偏低。改进:多教师 ensemble 或 calibration(temperature scaling)。(2) **BAR 的 [$\rho_{min}, \rho_{max}$] 区间静态**。训练早期需宽松上界,训练后期需宽松下界,固定区间可能持续卡在 fallback。改进:区间随训练步数或 prompt 难度自适应(按最近 K 次平均成功率滑窗调整)。(3) **故障域未充分覆盖**。1,000 沙箱 26s 是清洁实验室结果,生产环境会遇到网络分区、镜像拉取失败、节点 OOM;agent 注入到任意用户镜像也带来安全风险。改进:镜像签名验证、默认 deny-all 网络策略、细粒度资源监控。(4) **数据规模相对教师蒸馏偏小**。Orchard-SWE 107K、Orchard-GUI 412 SFT 相比 MolmoWeb 278.5K 有 2-3 个数量级差距,论文优势是更少数据更好泛化,但要刷窄分布极值可能需 1M+ 轨迹。
未来方向
作者在文末和附录里暗示了几个方向:(1) 把环境层从 K8s 进一步抽象,兼容 Slurm+Singularity 等 HPC 基础设施,让学术机构无需云账号也能跑;(2) 把 BAR 推广到多模态 rollout(如带截图的 GUI 任务),因为当前 $\rho$ 选择依赖标量奖励,多模态奖励方差结构更复杂。基于成果可延伸的方向:(a) 把 Orchard Env 作为「harness 无关 RL 评估平台」开放,任何团队的 agent 可用同一份 sandbox 评测脚本对比,避免 leaderboard 不可比问题;(b) 把信用分配 SFT 推广到多模态轨迹(GUI 截图序列),用 VLM 当回溯价值函数;(c) 用 BAR 训练「轨迹质量评估器」反过来过滤教师蒸馏的失败轨迹;(d) 探索 spot instance 的更激进容错训练——在沙箱随时被驱逐的不稳定环境下做 RL,看能否训练出更鲁棒的 agent。
复现评估
复现评估分三层。**环境层**:Orchard Env 完全开源,可在自有 K8s 集群 1-2 天部署;最低配置 8 节点 32 vCPU/128 GiB,研究组用 2 节点 16 vCPU/64 GiB 也能跑小规模。**数据层**:Orchard-SWE 全部 107K 轨迹、Orchard-GUI 15,601 任务池和 412 SFT 轨迹、Orchard-Claw 192 合成任务均开源;SWE 任务 Docker 镜像由 Scale-SWE/SWE-rebench 预构建,用 init container agent 注入避免重 build。**训练层**:使用 Qwen3-30B-A3B-Thinking、Qwen3-VL-4B-Thinking、MiniMax-M2.5、Qwen3-VL-235B-A22B-Thinking 等公开模型,slime 训练框架开源;SFT 5 epoch、64K 上下文、cosine LR 1e-5→1e-6、global batch 128,8×H100 节点预计 2-3 天;RL 阶段 BAR+GRPO,max 150 step,rollout batch 16、group size 8,依赖 0.28s 延迟才能在合理时间内完成。**难度评估**:完整复现需多张 H100/A100 + ≥128 沙箱K8s 集群 + 容器化仓库镜像管理经验,对资源受限研究组是中等偏高门槛;复现单点设计(BAR 开源实现、credit-assignment prompt 模板)门槛较低。
论文图表
三个系统(Scale-SWE、OpenSWE-32B、Orchard-SWE)× 三个 harness(OpenHands、mini-swe-agent、Kimi-CLI)× 多个任务的 resolve rate 矩阵。Orchard-SWE 在所有 cell 都保持 45.0-64.3%,而 OpenSWE-32B 在 Kimi-CLI 上掉到 3.6%(SWE-V)和 0.0%(T-Bench 2.0),Scale-SWE 在所有非原生 harness 上输出格式无效(✗)。
Orchard-SWE 最具说服力的实验——展示跨 harness 和跨任务泛化性,是单 harness 训练问题的直接证据。
Orchard-GUI 数据集组成:Full Set 15,601 tasks(PAE-WebVoyager 2,537 + InSTA-v3 13,064),其中 4,103 all-success、4,934 all-failed、6,564 mixed。SFT Trajectories 仅 412 条(全部来自 PAE-WebVoyager)。RL Tasks 2,198 条(PAE-WebVoyager 734 + InSTA-v3 1,464)。最后一列是落在 SimilarWeb Top-100 站点上的任务数。
展示 Orchard-GUI 极小数据量(412 SFT + 2,198 RL 任务)下达到 68.4% 平均的事实,是'数据效率'声明的证据。
GUI 智能体大表,分 Proprietary Models 和 Open-Source Models 两组。Orchard-GUI 4B SFT+RL 在 WebVoyager 74.1、Online-Mind2Web 67.0、DeepShop 64.0、avg 68.4,是开源最强(avg 比 MolmoWeb-8B 51.9 高 16.5 pt),接近 Gemini computer-use-preview 69.3;训练只用 2.6K 任务,远少于 MolmoWeb 278.5K。
Orchard-GUI 的核心结果表——以 4B 模型在三个 benchmark 上全面领先开源、强追闭源。