OPEN SOURCE DEEP DIVE
ASPIRE:把机器人「训练」变成技能库生长的 Agentic 发现系统
ASPIRE 是 NVIDIA 联合密歇根大学、UIUC、伯克利与 CMU 开源的持续学习系统(论文 arXiv:2607.00272,Apache-2.0)。它不做梯度下降:编码智能体在闭环执行引擎里反复写、跑、修机器人控制程序(code-as-policy),把被验证的修复沉淀进可复用技能库,再用进化搜索跳出单轨迹修补。在 LIBERO-Pro 全部 80 个任务上,Claude Opus 5.5 驱动时平均成功率 99%,Robosuite 与 BEHAVIOR-1K 代表任务 100%;扰动操作任务最高提升 77%,未见长程任务零样本 31% 对基线 4%。真机侧,仿真发现的技能跨本体迁移到真实双臂站,在线学习甚至让机器人学会解魔方。
「训练」被重新定义:梯度下降换成技能库生长
ASPIRE 是 NVIDIA 联合密歇根大学、UIUC、伯克利与 CMU 在 2026 年开源的持续学习系统(论文 arXiv:2607.00272,Apache-2.0 协议)。它对「训练」做了三次替换:训练不是梯度下降,而是技能精炼;训练产物不是一份浮点权重,而是一仓库的感知运动技能;分布式训练不是切 minibatch,而是一面板的智能体各自练不同的技能。技能以 Python 程序的形式存在——code-as-policy(CaP)范式——由编码智能体(Codex、Claude Code 等)撰写、执行、诊断、修复,被验证有效的修复再沉淀进技能库供后续任务复用。
这套范式的答案硬得惊人:在 LIBERO-Pro 全部 80 个 Goal / Object / Spatial / Long 任务上,Claude Opus 5.5 驱动的 ASPIRE 平均成功率 99%,Robosuite 与 BEHAVIOR-1K 的代表任务做到 100%;扰动条件下的操作任务相对先前方法最高提升 77%,Robosuite 双臂交接任务提升 72%,长程家庭任务最高提升 32%。技能库还带来零样本迁移:代表性未见长程任务上 31% 对基线的 4%。真机侧,仿真里发现的技能跨本体降低了真实机器人编程成本,而在线真机交互学到的技能让双臂站解开了魔方。
闭环执行引擎:受限的程序运行时与可审计的运行档案
智能体写的程序跑在 cap-harness 运行时里,边界划得非常死:生成的 program.py 不能 import 任何模块,拿不到 NumPy、文件系统、网络、原生仿真器、奖励函数与成功判谓;它只能调用注入的顶层工具。工具分两层:shared_atomic 是单原语调用(get_observation、segment_text、mask_to_point_cloud、estimate_geometry、generate_grasps、solve_ik、plan_motion、step、execute_trajectory、set_gripper 等),shared_high_level 是这些原语的本地组合(localize_object、select_grasp、move_to_pose、move_to_joints、open_gripper、go_home 等)。每个 benchmark 再注入自己的扩展命名空间:libero.*、robosuite.*、behavior.*(后者含移动底盘 navigate_to_pose 与躯干 move_torso)。
感知与规划不在运行时进程里,而是一组长期存活的 HTTP Provider 服务:SAM3 做文本/点提示分割,Contact GraspNet 出抓取候选,PyRoki 做 IK,cuRobo 做碰撞感知轨迹规划;拓扑声明在 configs/environments.json,硬件绑定在 configs/profiles/(随箱附 rtx5090 与 l40 两套 profile)。仿真器环境(LIBERO、Robosuite、BEHAVIOR-1K)只装客户端依赖,共享同一套 Provider 栈——模拟器安装因此很轻,一个 Provider 实例服务所有仿真客户端。
每次 cap-harness run 都落一份不可变档案:run.json(身份与配置)、outcome.json(程序状态、任务/协议成功、聚合奖励、timing 分桶)、manifest.json(每个文件的 SHA-256)、episode/(每控制 tick 一条动作与状态记录)、trace/(父子相连的程序与 Provider span)、media/(每相机一路 H.264 视频、运动调用前后的无损关键帧、SAM top-1 掩膜叠图)。奖励与成功判谓从不出现在生成程序可见的结果里——智能体只能靠视觉与状态证据判断成败,这正是它能学会「验证」而不是「背答案」的原因。timing 分桶互不相交,一次 1000 步 episode 的记录开销约 4 毫秒。
Fix Loop:按失败模式调试,只有被复现的修复才能晋升
仓库把整条学习回路打包成两个 agent skill:iterative-debugging(Fix Loop)与 evosearch(进化搜索),Claude Code 与 Codex 各有一份。Fix Loop 里协调者智能体兼作课程设计者:每轮从技能库当前能力出发挑任务,给每个 pending 任务派一个 worker。worker 只看一张初始观测图就开始写代码,然后在开发种子(LIBERO 为 51–65)上调试;调试按失败模式组织而不是按种子组织,每个版本都在全部开发种子上打分;选出的程序再在 unseen-check 种子(66–80)上量一次,才交给协调者跑 held-out 评测(种子 1–50,即 HELDOUT_COUNT)。
技能晋升有一道硬门:任务提议新技能时,另派一个 verifier 智能体只凭技能库与提案文本(不看提案者的代码)在前几个开发种子上两次尝试内复现修复;只有 verified 的提案才进 skills/ 目录。技能库因此不会塞进「只在某颗种子上碰巧有效」的片段。evosearch 面向 Fix Loop 啃不动的难任务:以 Fix Loop 产出的 fix_code.py 为 candidate_A,做 K=8 的多候选进化搜索,再走同一套验证与 held-out 流程。
flowchart LR
A["观察初始场景
RGB-D + 关节状态"] --> B["智能体撰写 program.py"]
B --> C["cap-harness 记录运行
视频 / 关键帧 / trace"]
C --> D{"开发种子 51-65
按失败模式诊断"}
D -- 未达标 --> E["读 trace 与关键帧
合成修复"]
E --> B
D -- 达标 --> F["unseen-check 66-80
再 held-out 1-50"]
F --> G{"verifier 仅凭技能库
两次内复现修复?"}
G -- 通过 --> H["晋升进 skills/ 技能库"]
G -- 失败 --> I["留在任务目录
不入库"]
H --> B
证据链:三个基准、十二个模型与一条成本前沿
ASPIRE 的表现随底层编码智能体的能力缩放。在 10 个 LIBERO-Pro 任务上,成功率从 GPT-6 Luna 的 15% 一路升到 Claude Opus 5.5 的 99%;而最强模型并非最贵:Sonnet 5.5 以每任务 12 美元同样站到 99%,Opus 5 花 60 美元只有 91%。跨 LIBERO-Pro、Robosuite 与 BEHAVIOR-1K,Opus 5.5 在每个任务上都落在 97–100% 区间。
| 编码智能体模型 | 10 个 LIBERO-Pro 任务成功率 | 每任务 API 成本 |
|---|---|---|
| GPT-6 Luna | 15% | $0.83 |
| Haiku 5.5 | 68% | $4 |
| GPT-6.1 Sol | 88% | $10 |
| Sonnet 5.5 | 99% | $12 |
| Claude Opus 5.5 | 99% | $18 |
| Opus 5 | 91% | $60 |
BEHAVIOR-1K 上的长程家庭任务(R1 Pro 双臂 + 移动底盘,Isaac Sim)同样呈现模型阶梯:Opus 5 与 Opus 5.5 在四个代表任务上几乎全满,GPT-6 Astra 紧随其后。
| BEHAVIOR-1K 任务 | Opus 4.6 | Opus 5 | Opus 5.5 | GPT-6 Astra |
|---|---|---|---|---|
| Trash Navigation | 92% | 100% | 100% | 96% |
| Trash Task | 88% | 100% | 100% | 96% |
| Radio Navigation | 100% | 100% | 100% | 96% |
| Radio Task | 88% | 92% | 100% | 96% |
真机:System 2 操作员 runbook 与 YAM 双臂站
真机侧是一套完全独立的执行栈,文档是 docs/system2.md 操作员 runbook。服务拓扑为:SAM3(8114)与 cuRobo(8118)两个 Provider、左右臂各一个 yam-servers 进程(SocketCAN 驱动达妙电机)、CAP MCP 服务(8222)外加一个 Viser 可视化页(8080,实时 3D 机器人模型 + 相机视图 + Go home 按钮)。--allow-motion 是安全闸门:服务端不带这个旗标就拒绝一切动作命令并禁用 Home 按钮;agent 启动器带旗标时,新会话先开双夹爪、回 home,并回报 home_verified 与 0.03 rad 容差内的关节残差。
仓库的 AGENTS.md 给 System 2 智能体定了执行纪律:只通过注册的 mcp__cap__* 工具动作,禁止改源码或 shell 包一层绕路;维护以对象为中心的工作状态(计划、对象身份、已验证关系、未决谓词);机器人位姿与夹爪闭合只描述执行,不证明抓取或放置完成——完成必须由返回的图像与测量证据建立。随箱四个真机任务食谱:解魔方、拧盖倒药丸、药丸入瓶并拧盖、倒扣套杯,全部是文本技能(接触策略、恢复路径、物理完成判据),不依赖录制回放或固定坐标。
真机结果分两条线。其一是跨本体 sim-to-real:v0.1 的长程收桌(table bussing)技能在仿真由 Claude Opus 4.6 发现、真机由 GPT-5.5 执行,技能文本跨 embodiment 与机器人 API 复用。其二是在线真机学习:GPT-6 Astra 直接在物理双臂站上练,解魔方、套杯、拧瓶盖、药丸入瓶,且解魔方的效率随练习逐轮提升——技能库在真机上同样复利。
安全边界与工程纪律
ASPIRE 对安全边界的表述直白得少见:CaP 运行时里的生成程序是受限的(无 import、无文件与网络、无奖励),但编码智能体自己的试验进程不是沙箱——它执行语言模型生成的 Python 且拥有完整 import 权限,watchdog 也不构成隔离。README 因此要求:生成代码跑在无凭据、无敏感挂载的隔离主机上,限制网络,且永远不给仿真智能体碰物理硬件的权限;真机操作另需 runbook 的控制项与操作员单独授权。
工程细节里藏着大量实测教训,值得直接抄:Provider 监督脚本在前台 trap INT/TERM/EXIT,终端一关整栈全倒且不重启(要存活就自己 setsid nohup);LIBERO/Robosuite 的夹爪动作是速度而非位置,set_gripper 只接受 0.0 与 1.0,中间值会白烧 60 个 tick 还停在全开;go_home 从折叠姿态一次不收敛,需要连发三次(调用会累积,所以重复有效);MuJoCo 的 EGL 设备枚举无视 CUDA_VISIBLE_DEVICES,必须同时设 MUJOCO_EGL_DEVICE_ID,否则 GPU 0 争用会表现为间歇深度图失败,看起来像策略 bug;请求不可用的规划后端会返回类型化失败,harness 永不隐式回退。
上手路径
仿真侧的最短路径是把仓库交给编码智能体:按 README 的 quick-start 提示词让它读 .claude/skills/iterative-debugging/SKILL.md 与 docs/libero-pro.md,跑 libero_goal_swap 十个任务;主机 prerequisites(CUDA、uv、SAM3 的 Hugging Face 门禁 token)见 docs/host-setup.md。环境用 scripts/bootstrap_libero.sh / bootstrap_robosuite.sh / bootstrap_behavior.sh 各自独立引导,指纹未变的 bootstrap 是 no-op。结构健康用 cap-harness doctor 与 cap-harness validate --plan(跨 embodiment 同一入口),单程序执行用 cap-harness run,多种子扫批用 run-batch。要复现论文规模实验,先明确 suite 与实验名(Fix Loop / Evosearch / 零样本迁移 / 库规模缩放 / 推理时缩放 / token 消融),agent 会先报任务、种子表、试次数、GPU 与凭据需求并等你确认再发车。
ASPIRE 的意义或许不在某个基准数字,而在它把「机器人学到了什么」变成了一个可以 diff、可以 review、可以带 DCO 签名贡献的仓库:技能是文本,进步是 commit,复利是库的生长。