上周,微软把 Orchard 整体开源了(MIT 协议)——一个专门面向「训练和评估 Agent」的框架。最扎眼的结果是:约 30 亿活跃参数的 Qwen3.5-35B-A3B,在 SWE-bench Verified 上拿到 69.7%(配合价值模型重排后 73.0%),逼近参数大它 10 倍以上的前沿系统。同时开源的还有 107K 条 SWE 训练轨迹和完整的训练配方。
对开发者来说,这意味着「自己训一个 coding agent / GUI agent / 个人助手 agent」不再需要从零造沙箱基础设施——环境层、数据、训练脚本全是现成的,拿来就能跑。
核心思路拆解:一层底座 + 三种配方
Orchard 的设计哲学很清晰:把「环境」做成一个稳定的服务层,而不是训练栈里的一次性零件。所有配方共享同一底座,蒸馏、on-policy RL、评测全链路复用。
1. 底座:Orchard Env(Kubernetes 原生沙箱服务)
- REST API:沙箱生命周期 create / exec / files / patch / delete,协议清晰,任何语言都能对接
- Python SDK:同步/异步双模式,自带重试、自动清理和上下文管理器
- 任意 base image:agent 由 init container 注入(自带独立 Python 解释器),你的镜像里甚至可以没有 Python
- 内置 harness:codex、claude、pi、opencode、hermes 预装在每个沙箱的 PATH 上,切换 harness 只是换条命令,不用换镜像
- 隔离与成本控制:Calico NetworkPolicy 默认禁出网、每沙箱 CPU/内存/超时限制、TTL 自动清理、API Key 鉴权
性能对比(官方数据):平均命令执行延迟 0.28s(E2B 是 0.747s,Modal 是 2.046s);1000 个沙箱并行启动 100% 成功,26 秒端到端;128 沙箱跑 240 小时,按需 $3,362、spot 只要 $673(约 10 倍差价),而托管沙箱服务要 $7,078–$10,305。
2. 三种配方(Recipes)
| 配方 | 基座模型 | 训练数据 | 关键手段 | 核心成绩 |
|---|---|---|---|---|
| Orchard-SWE | Qwen3.5-35B-A3B | 107K 蒸馏轨迹 | Credit-assignment SFT · Balanced Adaptive Rollout · on-policy 蒸馏 · 基于 rubric 的过程奖励 · 价值模型重排 | 73.0% SWE-bench Verified |
| Orchard-GUI | Qwen3-VL-4B-Thinking | 0.4K SFT + 2.2K RL 任务 | 先蒸馏,再在真实网站上做在线 RL | 68.4% 平均(74.1 / 67.0 / 64.0) |
| Orchard-Claw | Qwen3-30B-A3B-Thinking | 0.2K 合成任务 | Opus 合成任务 · 跨两个 harness 训练 | 59.6% pass@3(ZeroClaw 下 73.9%) |
更有说服力的是泛化性:Orchard-SWE 在 SWE-bench Multilingual 上保住 51.0(OpenSWE-32B 只有 28.7);换到训练时从未见过的 Kimi-CLI harness 上仍有 45.0,而 OpenSWE-32B 直接崩到 3.6。Orchard-Claw 换到更强的 ZeroClaw harness 后 pass@3 涨了 +14.3——对着与 harness 无关的环境训练,才是迁移能力的关键。
3. 最难的点:信用分配(Credit Assignment)
当前环境是线性的:沙箱创建 → 驱动 N 轮 → 销毁。一条轨迹只有一个最终奖励,却要分摊到平均 47.5 轮上。论文用 retrospective value estimation 间接解决;下一步官方计划加入快照(暂停/恢复)、分支(从同一状态 fork 出 k 条继续)和前缀共享,把每轮价值从「推断」变成「实测」——这是下一轮研究的核心原语,直接做在环境层里。
关键代码:10 分钟跑通 Orchard Env
# 1. 安装(纯 Python SDK,orchard_env 目录下)
pip install -e "orchard_env[dev]"
# 2. 指向你的 orchestrator(没有的话先按文档在 AKS 上起一套,约 20 分钟)
export SANDBOX_BASE_URL="http://your-orchestrator-host"
export SANDBOX_API_KEY="your-api-key"
# 3. 起沙箱、跑命令、拿输出
from orchard_env import SandboxClient
with SandboxClient() as client: # 自动读取上面的环境变量
with client.create_sandbox("python:3.11-slim") as sandbox:
result = sandbox.exec("echo 'Hello, Orchard!'")
print(result.stdout) # Hello, Orchard!没有集群?四个脚本就能在 Azure AKS 上 stand up 一套:provision → build & push images → deploy → smoke-test,约 20 分钟搞定。非 Azure 集群和成本估算见 orchard_env/docs/deployment.md。
想训练自己的 SWE Agent?数据集和训练栈也是现成的:
# 数据集:huggingface.co/datasets/microsoft/Orchard
# swe 子集:107,185 条多轮 SWE 轨迹(19,287 个任务实例 / 2,788 个仓库)
# 含 verified 解决标签(74,649 已解决 / 32,536 未解决)
# gui 子集:3,070 条带截图的网页导航轨迹(409 个 WebVoyager 任务)
#
# 训练栈:trainer/slime/(THUDM slime 的 fork)
# RL 训练脚本在 trainer/slime/examples/orchard/
# fork 本地改动全部记录在 ORCHARD_CHANGES.md实践建议
- 想复现成绩:用 Qwen3.5-35B-A3B 基座 + microsoft/Orchard 数据,跑 slime trainer 的 orchard 示例,按论文顺序走「Credit-assignment SFT → on-policy 蒸馏 → RL」
- 想省成本:评估/回放用 spot 实例,128 沙箱 × 240h 只要 $673,比托管沙箱服务便宜一个数量级
- 想消除「训练-部署不一致」:直接看配套的 OpenForge RL(arXiv:2607.21557)——在 ZeroClaw / OpenClaw / Codex 这些真实 harness 里训练,而不是简化版重实现
- 想快速验证:不用先上 K8s,读 orchard_env 的 SDK 和 REST API 文档(docs/sdk.md、docs/api.md),自己项目里先接 SDK 跑通流程
