先看一个已经很常见的系统形态:一个编码 agent 坐在仿真器前面,读任务说明,从技能库里挑感知、抓取、运动规划的函数,拼成一份可执行的策略代码;跑几十个 episode,把日志拿回来读,改代码,再跑。这套循环在 2026 年已经有一批系统在做,Voyager 式的技能库、CaP-X 式的编码基准、ENPIRE 式的真机自改进,路子都差不多。

问题是,这套循环里有四个可调的旋钮:用哪个模型、给什么样的技能库、反馈怎么报、课程怎么排。工程上大家往往是四个一起动,涨了就说方法有效,跌了也不知道是哪一块坏了。这篇 50 页的报告把四个旋钮拆开,一次只动一个,其余全部冻结,然后在九个任务上把它们各自的贡献量出来。

我先给最反直觉的一条:真正卡住的不是“信息不够”,而是“信息变不成正确的策略补丁”。论文原话是瓶颈往往不在能不能拿到足够的信息,而在能不能把它解释成正确的策略更新。这条结论贯穿了它后面的六个 finding,也决定了你该先补哪一块。

一、先给结论:四个因素不在一个量级,方向也不一致

四个旋钮分别被操作化成了什么

受控实验最怕的是“控制”只是嘴上说说。这篇的做法是给每个旋钮定义一条可执行的变化轴,其他全部冻结。模型轴换的是编码 agent 本身,推理档位也算一个设置;技能轴换的是技能库里给什么、给多少、给不给源码;反馈轴换的是报告的粒度与空间表示;课程轴换的是训练实例的排布顺序,具体是从特权状态迁移到视觉感知。

因素怎么变主结果(留出成功率)
模型10 个设置:换编码 agent 与推理档位零样本 33–67%,两轮后 44–81%
技能全库 / 有文档无源码 / 只给工具新代码占比 4–24%,增益 1–40 点
反馈3 档时间粒度 × 4 档空间表示25 / 36 / 52%;19 / 30 / 40 / 52%
课程特权状态先学再迁视觉,有 / 无总体 52% 对 46%,任务级 −47 到 +84

三条和直觉相反的结论

  • 反馈不是越细越好。按每个机器人动作报(per motion)总体 36%,按每个语义技能报(per skill)总体 52%——更细的那一档更差。原因是感知类步骤不产生位移,在“每个动作”这个单位里根本没有位置,而失败常常就埋在感知上。

  • 世界坐标信息完备不等于 agent 能用。论文里有一档反馈只给世界坐标系下的物体位置与关系,原则上这份状态足以推出一切操作需要的关系;实测总体只有 30%,最差的任务是 0%。把同样的状态换成物体坐标系再补上零件标注,同一批场景、同一个初始策略,总体到 52%。

  • 课程能加速也能锁死。同一个特权到视觉的课程,在 Threading 上把成功率从 2% 抬到 86%,在 Tool Hanging 上从 63% 压到 16%。它不是“平均有点用”,而是分任务地放大或摧毁。

图 1
图 1|论文开篇举的三类失败:左边是抓取与放置策略不匹配,中间是没算清被持物体的几何与间隙,右边是可变形物体难以用局部动作决策。

二、受控实验长什么样:五个加四个任务,一条闭环

任务、技能库与它们的规模

任务分两套。VABAR 里五个接触密集的操纵任务:Tool Hanging、Syringe Packing、Gear Meshing、USB-C Insertion、Cable Routing。MimicGen 里四个长程多阶段任务,用 Medium(D1)布局:Kitchen、Coffee、Threading、Mug Cleanup。五个 VABAR 任务各自压不同的能力:Tool Hanging 压的是抓取时别挡住环、搬运时别撞钩子;Syringe Packing 要把 150 毫米的注射器竖起来穿过 55 毫米的开口,是全篇最长的任务,中位 episode 一万一千多控制步;Gear Meshing 是唯一有时序目标的任务;USB-C Insertion 每侧间隙 0.15 毫米,还有一根线在拖;Cable Routing 直接操作可变形物体(图 3)。

技能库是 open-robot-skills,30 个技能、72 个脚本,每个技能是一个带 SKILL.md 的目录,里面写清什么时候适用、状态怎么流、声明了哪些工具、有哪些具名出口。再加上每任务 70 到 78 个底层工具,构成 S = S0 ∪ Sg ∪ Sτ ∪ SA:S0 是机器人与传感器原语,Sg 是通用技能,Sτ 是任务专家技能,SA 是 agent 自己写的代码。专家技能那一层是人工 VABAR 视觉策略的入口脚本,一共 11 个 bundle、43 个入口;其中最少的 Tool Hanging 只有一个胶水脚本,因为人类策略本来就是用 Sg 里的 15 个脚本拼的。

图 2
图 2|四个旋钮套在同一条自学习闭环上:初始化策略、在仿真里跑、拿反馈、改代码,横轴是迭代轮次,纵轴是任务成功率。

一个回合里到底发生了什么

论文把闭环写成一个更新式:第 k+1 轮的策略,是编码 agent A 在拿到第 k 轮反馈、并参考此前全部编辑历史之后,对自己策略的一次改写。

πk+1=A(πk, fk, {(πj,fj)}j<k),fk=F(πk,{τi}) \pi_{k+1}=A\left(\pi_k,\ f_k,\ \{(\pi_j, f_j)\}_{j<k}\right),\qquad f_k=F(\pi_k,\{\tau_i\}) πk+1​=A(πk​, fk​, {(πj​,fj​)}j<k​),fk​=F(πk​,{τi​})

其中 f_k 是反馈函数把这一轮训练集上的运行结果渲染成的报告,τ_i 是训练实例。目标是让策略在整个初始位姿分布上都能成:

π∗=arg⁡max⁡π Exi∼B[J(π)] \pi^{*}=\arg\max_{\pi}\ \mathbb{E}_{x_i\sim B}\left[J(\pi)\right] π∗=argπmax​ Exi​∼B​[J(π)]

这里 B 是初始物体位姿的分布,J 是逐物体的成功指示。注意 f_k 不是标量奖励:它是一份文本报告,可以带图,可以带中间状态,这正是后面所有反馈实验的操作空间。

一个回合的流程比这句话琐碎得多(图 2),这也是这篇论文值钱的地方——它把 harness 的每个卡点都写出来了。

仅示意:一个自学习回合(附录 C.1 / C.3)
generate   k=0 写 π0,只读文档与技能库
preflight  1 集不计分(≤1500 步)
           分不清“跑不起来”与“跑失败”
           崩溃 → 最多 2 次修复会话
train      4 个训练实例,记逐步骤返回值
feedback   渲染 FEEDBACK.md,唯一反馈
improve    提案 → guard + validate.sh
           被拒带违规项修 2 轮 → π_{k+1}
validate   5 个验证实例,定停不停
held-out   10 个留出实例,不回灌

隔离手法:所有臂从同一个初始策略出发

这是我读这篇时最在意的一处。反馈实验的每一个非参考条件,都不是“重新训一个”,而是从参考运行的那个初始策略 π0 出发,并且先把参考运行自己 k=0 的训练批次用新渲染器重渲一遍,再开始迭代。这样两行数字之间的差,只能来自报告的写法,不能来自“这一轮的初始代码碰巧更好”。

主实验的规模是:10 个 agent 设置(Opus 5 的三个推理档位各算一个)× 5 个任务 × 每任务 5 次独立运行,每设置两轮反馈;每轮 4 个训练、5 个验证、10 个留出实例。课程实验另算:MimicGen 8 轮特权加 8 轮感知(Fable 5.1),VABAR 5 加 5(Opus 5),每任务 3 次运行,7 个任务 × 3 = 21 对。

还有一个口径必须说清楚:表里的 @k 不是“第 k 轮那一刻”的分数,而是前 k 轮里最好的一次留出成功率;被保留的那个 iterate 是验证分数第一次达到最高的那一版。这意味着两件事——第一,报出来的数略偏乐观,因为它取的是最好的一次;第二,验证集选的是“第一次最高”,而不是“最后一次”,所以中途偶然撞对的一版会被留下来。

图 3
图 3|九个任务的真机渲染:左边五个是 VABAR 的接触密集任务,右边四个是 MimicGen 的长程任务,每格都是执行前与执行后的对照。

协议里那些被钉死的量

受控之所以成立,除了“一次只动一个轴”,还因为下面这些量在每个运行里都一样。读它的数字时要一直记着这些前提:

  • 每个任务实例只跑一次、只按物体计分,episode 结束条件是策略返回(再等 60 个控制步稳定,Gear Meshing 是 120 步)、撞到步数上限或仿真发散。
  • 步数上限按任务固定:Tool Hanging 8,500、Syringe Packing 22,800、Gear Meshing 6,000、USB-C Insertion 9,000、Cable Routing 13,000。
  • 运动栈与分割后端按任务固定,从不混用:Tool Hanging 与 Syringe Packing 用 cuRobo,其余三个用 OSC;分割是 SAM3 或颜色阈值。
  • 任务指令逐字取自任务文档,同一个任务的 19 个实例共享同一句指令,实例之间只差随机生成的场景。
  • 反馈里永远不给 sim.check_success 与特权状态读取器,因为“目标是什么”正是 agent 要学的东西。

账单要先说,不然没法判断结论的适用范围

全部实验 631 个配置、约 2,500 个 agent 编辑会话、约 27,600 次 rollout(附录表 20 给的精确总计是 2,459 个会话与 27,620 次 rollout),其中 131 个配置属于“被替换的一遍”或“砍掉的臂”。算力是 17,900 GPU 小时(RTX PRO 6000 Blackwell)加 2,700 GPU 小时(A100),约七万美元;编码 agent 的推理另算,约三万六千五百美元。这个量级说明一件事:它不是一个能随便复现的 benchmark,而是一次性的普查。你要在自己系统上复用它的结论,只能挑其中一两个对照去做。

顺带记一组 harness 层面的干预率,它比成功率更能反映这类系统的日常:静态 guard 会拒掉约 9% 的首版提案,且全部是“运行时计算工具名”这一类无法静态判定的写法,一轮修复后都能通过;preflight 崩溃率 3%,修复会话救回其中 88%;每 100 个会话还有 11.6 次 revert,其中 42% 是因为训练成功率反而下降、35% 是因为最近接近距离变大。换句话说,这套循环里有相当一部分算力花在“把错误提案拦下来”上,而不是花在学习上。

三、因素一:模型——零样本看不出差距,两轮之后拉开三十点

同一个起点,四种命运

先看表。这张表是整篇的主表,十个设置加一行人类策略,报的是留出集上逐物体的成功率,@0、@1、@2 分别是零样本、一轮反馈后、两轮反馈后(原文口径是“前 k 轮里最好的一次”)。

模型@0@1@2两轮增益
人类策略82–––
Opus 5 xhigh456474+29
Opus 5 high416281+40
Opus 5 low576774+17
DeepSeek V4384344+6
Sonnet 5454646+1
Kimi K3394346+7
Fable 5.1445764+20
GPT-6 Astra434748+5
Opus 5.5677477+10
GPT-6 Sol334153+20

看第一列,零样本的成功率挤在 33% 到 67% 之间,四个设置的起点几乎一样:Opus 5 xhigh 45%、Fable 5.1 44%、GPT-6 Astra 43%、Sonnet 5 45%。如果只看零样本,你会得出“模型差别不大”的结论,然后选最便宜的那个。

两轮之后,这四个起点相同的设置变成 74%、64%、48%、46%。同一条反馈、同一批任务、同一个初始策略,最大的差距有 28 个百分点。这就是 Finding 1:模型能力的差别在策略初始化时还不明显,在自学习阶段才显形。

会写和会修是两种能力

论文用一张编辑结果分解图说明这件事:把每一轮针对“被报告的失败技能”的编辑按结局分成四类——修好且成功率涨、修好但成功率没涨、同一个失败还在、换成了另一个失败。同一个失败现象,有的模型能定位到上游改对,有的只会把报错那一行改得更稳。

我认为这个区分对工程选型很实用。你现在用模型跑自学习,大概率只是在测它“会不会写一份能跑的代码”;真正决定收敛的是它“能不能从一份执行日志里定位到该改哪一行”。前者考的是代码能力,后者考的是归因能力,两者在榜单上不是同一个分数。

四类结局各自的含义,值得单独列一下:

  • 修好且涨点:定位到了上游,并且改动落在正确的语义步骤上,这是唯一一种真正在学习的编辑。
  • 修好但成功率没涨:把这一条失败路径堵住了,但没有覆盖到其他实例,收益被其他失败吃掉。
  • 同一个失败还在:改动是表面化的,比如加了一次重试、调了一个阈值,根因没动。
  • 换成了另一个失败:修一处引入一处,这类编辑在弱模型上很常见,表现为总分原地打转。

贵不等于强,这一条可以直接省钱

论文在成本附录里给了一句很硬的话:花费不跟随成功率。Fable 5.1 的输入、缓存写入和输出单价都是 Opus 5 的两倍,25 次运行的设置花掉 417 美元,两轮后 64%;Opus 5 high 与 Opus 5.5 各花了不到它一半,两轮后分别是 81% 和 77%。最便宜的一档是 DeepSeek V4,同一个 25 次运行的设置只花 33 美元,两轮后 44%。

这组数字不能读成“便宜模型也行”——44% 对 81% 是两倍的差距。能读出来的结论是:在这个任务族里,单价和最终成功率之间没有单调关系,选型必须自己跑那两轮,不能按价格排序。

四、因素二:技能——对弱模型是墙,对强模型是脚手架

按行追代码来源,看它到底用了什么

技能实验的做法很巧:把零样本策略的每一行代码归一化后,逐字去匹配专家任务技能、通用库里人类也用过的技能、通用库里人类没用过的技能,剩下的算 agent 新写的。于是每个设置的策略都能画成一根堆叠条,左边是“抄来的”,右边是“自己写的”。

结果的分化非常干净。反馈后涨得最多的几个模型,新代码占比也最高:Opus 5 xhigh 24%、Opus 5.5 18%、Fable 5.1 12%。它们的用法是把专家技能当底子,在不够用的地方加或改任务特定的逻辑。反过来,Sonnet 5、DeepSeek V4、Kimi K3、GPT-6 Astra 只写 4% 到 7% 的新代码,更多依赖技能库里已有的行为,两轮后停在 39% 到 46%。

图 4
图 4|零样本策略的代码来源分解:横轴是代码行数,四段颜色分别是专家技能、人类用过的通用技能、人类没用过的通用技能、agent 新写的代码,右侧是各自的零样本成功率。

用得多不等于用得好

这里有个容易被忽略的反例。Kimi K3 用了最大份额的“人类没用过的通用技能”,占它代码行的 13%,但它新写的代码依然很少,两轮只涨 7 点。也就是说,“更广泛地调用技能库”和“能改造技能库”是两件事。

Finding 2 的说法是:专家技能对弱模型是边界,对强模型是脚手架。弱模型基本只在技能库已经表达过的行为空间里组合,强模型会挑着复用、也会挑着背离人类给的实现,造出新的任务特定做法。这对做平台的人是个提醒:你把技能库做得越全,弱模型越可能被这个库的形状锁住,而不是被它解放。

给不给源码,这篇没给出干净答案

技能实验还设了两个受限臂:一个是“有文档可调但看不到源码”,一个是“只给底层工具、把通用技能整层拿掉”,各 25 次运行。这两个臂的价值在于把“技能的接口”和“技能的实现”分开。

但主文没有把这两个臂的成功率单独列成表,能读到的只有两处旁证:受限臂的 preflight 崩溃率是每 100 个会话 7.4 次,全体平均是 2.7 次;“只给工具”那一臂在 Cable Routing 上任何留出 episode 都没能分割出电缆,而这两个受限臂合计 25% 的感知类失败份额,全部来自“只给工具”这一臂在 Cable Routing 上的运行。所以“要不要把技能源码交给 agent”这个问题,这篇给了失败模式,没给胜负。我认为这是它最诚实也最不完整的一块。

五、因素三:反馈的时间粒度——故障点不等于出错点

三种粒度,同一批失败

反馈实验把报告的时间单位换成三档:按 episode(整条轨迹一次总结)、按 motion(每个不与语义技能对齐的机器人动作)、按 skill(每个语义技能)。全部臂从同一个初始策略(总体 3%)出发。

任务初始策略per episodeper motionper skill
总体3253652
Tool Hanging074590
Syringe Packing0905550
Gear Meshing0108070
USB-C Insertion00020
Cable Routing1717027

总体看,per skill 52% 明显高于 per motion 36% 和 per episode 25%。但这个平均数掩盖了任务级的反转,而反转本身才是这篇论文最有信息量的地方。

一个具体的归因故事

Tool Hanging 上,per episode 只有 7%。论文把失败过程写出来了:agent 反复把失败归因到最后的“伸手去挂”那一段,于是不停改那一段,但真正的错误在更早——它对扳手环的估计就是错的。它改的是故障点,不是出错点。

换成 per skill 之后,同一个任务到 90%。因为技能级反馈记录了每个语义步骤前后的状态变化和返回值,那个错误的环估计在“抓取”这一步就暴露了:环没有被夹住,或者夹住的位置偏了。

Gear Meshing 是同一个模式,10% 到 70%。而 Syringe Packing 正好相反:per episode 就有 90%,因为注射器留在容器口外面或者横在开口上,这个几何错误在最终状态里直接可见,根本不需要中间信息。Cable Routing 是另一种形状:per skill 27%、per episode 17%、per motion 0%,最细的那一档同样归零,但中间粒度并没有被“最终状态已足够”抵消掉。

为什么 per motion 会漏掉感知

这是我认为整篇最值得抄的一条机制。per motion 报告的是每个机器人动作的结果,但感知步骤不产生位移,它在“每个动作”这个单位里没有位置。所以一次“没识别出红色启动按钮”的失败,在 per motion 报告里什么都不留。

数字上很干净:USB-C Insertion 在 per motion 下是 0%,per skill 下是 20%;Cable Routing 在 per motion 下是 0%,per skill 下是 27%。这两个任务的失败里有相当一部分来自感知,per motion 结构性地看不到。

每一档粒度会漏掉什么

把三档放在一起看,各自的盲区很清楚:

  • per episode 只看到结局,看不到过程。它适合“错误在最终状态里直接可见”的任务(Syringe Packing 90%),不适合“错误发生在更早一步”的任务(Tool Hanging 7%)。
  • per motion 看得到动作,看不到不产生动作的决策。感知、规划被拒、自检中止这些环节在它里面没有单位,所以 USB-C 与 Cable Routing 直接归零。
  • per skill 看得到每个语义步骤的进出状态与返回值,代价是你要在策略里显式定义“步骤”和“具名出口”,这恰好也是 harness 强制要求的那件事。

Finding 3 的表述是:反馈在语义上有意义的策略决策这一级报,比在可用的最细时间步上报更有用。多阶段操纵里,被观察到的失败可能远晚于导致它的那个决策。

六、因素三续:反馈的空间表示与策略结构

同一份状态,四种写法

空间表示这一档更细:四行分别是只报结果、报世界坐标下的状态与关系、报物体坐标系下的状态与关系、再补上零件标注。四行描述的是同一个场景状态,只是关系被显式化的程度不同。

任务只报结果世界坐标物体坐标加零件标注
总体19304052
Tool Hanging15256390
Syringe Packing45605050
Gear Meshing0506070
USB-C Insertion00020
Cable Routing33132727

从 19% 到 52%,中间没有换模型、没有换技能、没有换任务,只换了同一份状态的写法。Tool Hanging 上更夸张:15%、25%、63%、90%。

信息完备不等于可推理

世界坐标那一行是最有说服力的一格。原则上,给足了世界坐标,agent 完全可以自己做坐标变换,算出扳手长轴与竖直方向的夹角、算出爪子沿长轴的偏移。实测它做不到:总体 30%,USB-C 上 0%。

物体坐标那一行把这些关系直接写出来——长轴偏离竖直 83 度、爪子沿长轴偏 35 毫米——Tool Hanging 立刻从 25% 跳到 63%。零件标注那一行更进一步,把“环的半径 14 毫米、环目前不在柄上”这种功能几何说出来,Tool Hanging 到 90%(图 5)。

图 5
图 5|同一份失败状态的四层写法:a 只报结果,b 世界坐标,c 物体坐标系,d 零件标注;四张图配的是同一帧。

策略结构:人类写中间路点,agent 写重试

再往下一层,论文比较了人类写的策略和 agent 学出来的策略在结构上的差别。人类策略经常把几何结构显式化:反复感知与重注册、显式的中间路点、专门的规划阶段。这些中间位姿编码的是几何先验——从更安全的方向接近、保持间隙、经过那些更容易找到可行解的构型。

agent 学出来的策略更多是在粗粒度的操作步骤外面套验证、重试和恢复。它们能复用带有几何结构的动作,但在自己生成或修改策略时,不太能重建“为什么需要这个结构”(图 6)。

图 6
图 6|人类(H)、Astra(A)、Fable(F)三种策略的结构对比:方块颜色是感知、运动规划、抓取规划、移动、决策,右侧是两轮后的成功率。

具体案例是 Syringe Packing。机器人要把 150 毫米的注射器穿过 55 毫米的开口,同时考虑注射器作为运动系统的一部分、周围障碍、再定向所需的间隙、插入姿态。人类策略用碰撞世界、被持物体注册、带碰撞感知的路点、带朝向约束的插入把这套依赖显式写出来。而在没有专家技能的运行里,19 份自写初始策略中有 17 份把注射器平着搬过或放在开口上方。反馈能让 agent 认识到错误,最后也能采用“在盖子上方转向、垂直下降”这类启发式,但它们倾向于把修复写成间隙常数、抬升高度和重试,而不是一个通用的碰撞感知模型。

图 7
图 7|同一个任务的两条运动计划:人类(蓝)先到一个无碰撞的位置再转向,agent(红)的计划几乎没有再定向的余量。

Finding 5 由此而来:对碰撞几何与空间关系的推理,仍然是 agentic 机器人运动规划的关键瓶颈。agent 能认出局部的几何错误,但很难把物体位姿、被持物体几何、障碍、间隙整合成一个连贯的、碰撞感知的运动计划。

还有一个细节值得单独记:Cable Routing 的接触记录里没有那根可变形电缆。这意味着任何一档反馈都不会报“抓到了电缆”或“搬动了电缆”,也不会有任何一个 episode 被报成“达成了与电缆的接触”。这一格的数据缺失是仪器层面的,不是方法层面的——读这张表的 Cable Routing 列时,要知道它测的是端口与绑扎,而不是线缆本身。

七、因素四:课程——特权信息能加速,也能锁死

一个有代表性的课程:从特权状态到视觉

课程实验选的是一个很典型的做法:先让策略在带精确仿真几何的特权状态上学,再迁到只有 RGB-D 感知的非特权状态。MimicGen 上跑 8 轮特权加 8 轮感知(Fable 5.1),VABAR 上跑 5 加 5(Opus 5),每任务 3 次运行,每次在 10 个固定留出布局上评。

任务有课程:技能 / 成功率无课程:技能 / 成功率
Tool Hanging19.3 / 1628.0 / 63
Gear Meshing18.3 / 3321.7 / 40
USB-C Insertion18.0 / 3110.7 / 16
Kitchen13.0 / 3313.3 / 62
Coffee5.0 / 7611.7 / 64
Threading8.7 / 8618.3 / 2
Mug Cleanup6.3 / 939.3 / 77
总体12.7 / 5216.1 / 46

总体 52% 对 46%,看起来是“课程略好”。分任务看完全是另一回事:Threading 从 2% 到 86%,Coffee 从 64% 到 76%,Mug Cleanup 从 77% 到 93%;同时 Tool Hanging 从 63% 掉到 16%,Kitchen 从 62% 掉到 33%。

加速的三个任务做对了什么

Threading 是最戏剧性的一个:没有课程时,直接学视觉的成功率只有 2%,几乎学不动;先学特权再迁移,到 86%。这说明在长程、多阶段、感知噪声大的任务上,先用干净几何把任务结构立起来,再让它去处理感知误差,是有效的。

Coffee 和 Mug Cleanup 是温和版的同一个故事:先学结构、再学感知,迁移后还有余量。这三个任务的共同点是,特权阶段学到的操作策略在视觉下依然成立。

锁死的两个任务错在哪

Tool Hanging 是反面教材:在有精确扳手几何的特权阶段,它的留出成功率就一直低于 10%。也就是说,课程并没有给它一个好的初始化,反而让它在一个错误的策略上继续打补丁。

Kitchen 的问题更典型:它在特权阶段发展出一个依赖几何精度的抓取策略,迁移之后视觉给不了那个精度,策略就崩了。论文的说法是,课程在这里不只是提供了一个初始化,它约束了后续的自学习。

机制:结构被继承,然后被打补丁

表里还有一列技能数,这一列比成功率更能说明机制。有课程的策略在特权阶段结束时平均 12.0 个技能,迁到感知后是 12.7 个;而没有课程的纯感知策略最后是 16.1 个。

换成直白的话:特权阶段定下的策略骨架,在迁移之后基本没被重构,只被修补。这正好接上 Finding 1——模型倾向于保留并修补继承来的结构,而不是重新组织它。所以课程的影响是双份的:它给了你一个起点,也给了你一个天花板。起点对的时候,你省下了从零探索的成本;起点错的时候,你后面所有迭代都在为一个错误的结构做局部优化。

读这张表还要注意两套 benchmark 的配置并不对称。MimicGen 那一组换了更强的模型(Fable 5.1)、每轮重采样 10 个新训练布局、允许每轮最多 2 个不计分的探测 episode、反馈里带两张回合末的相机图;VABAR 那一组是 Opus 5、每轮固定同样 4 个训练布局、没有探测、只给文本反馈。所以表 4 的“总体”两行只能当各自套内的对照读,不能把 VABAR 的任务和 MimicGen 的任务放在一根轴上比。

图 8
图 8|七个任务的课程曲线:上排是留出成功率,下排是阶段奖励,虚线是迁到感知的时刻,阴影是特权阶段。

八、哪些组合会互相抵消

四个因素不是加法关系。读完六组实验,我整理出四种会互相抵消的组合,每一种都有原文数字支撑。

组合会抵消什么证据
更强模型 × 没有结构重建分数天花板最好的设置 77%,人类 82%;剩 4.1% 的用例 agent 解不掉
特权课程 × 依赖精度的策略迁移后的全部收益Tool Hanging 63→16,Kitchen 62→33
更细反馈 × 感知类错误整类错误不可见per motion 下 USB-C 0%、Cable Routing 0%
更多迭代 × 反馈不变第二轮增益衰减十行里九行第二轮增益小于第一轮

更强模型补不了缺失的结构

Opus 5.5 的零样本 67% 是全表最高,两轮后 77%,也是全表最高。但它离人类策略的 82% 还差 5 点,而按论文的差距分解,剩下的部分集中在空间推理、操纵规划和碰撞感知的运动规划上。换句话说,换更强的模型能把“能写的代码”这一层拉满,拉不动“怎么把几何关系写进策略”这一层(图 9)。

图 9
图 9|人类策略能解的那部分用例是被什么一层层解掉的:零样本 7.3%,叠一轮自学习到 16.1%,加更强的模拟反馈 10.5%,加人类任务技能 27.0%,换更强模型 35.0%,仍有 4.1% 解不掉。

迭代本身不是解药

表 1 的十行里,有九行第二轮的增益小于第一轮:Opus 5 xhigh 是 +19 然后 +10,high 是 +21 然后 +19,low 是 +10 然后 +7,DeepSeek V4 是 +5 然后 +1,Sonnet 5 是 +1 然后 0。唯一的例外是 GPT-6 Sol(+8 然后 +12)。

失败谱系的迁移更能说明问题。从零样本到两轮后,感知类失败从 11% 降到 7%、抓取从 13% 降到 11%、到达从 9% 降到 5%、程序 bug 从 3% 降到 0%;同时放置类失败从 31% 升到 39%、步数预算耗尽从 8% 升到 14%。论文的解读是:变好的程序失败得更晚。这不是“问题被解决”,是“问题被推到更难的地方”。

而放置与步数预算这两类增长中的失败,大多不带错误信息,只能从中间结果往前追——这正好又回到 Finding 3 的归因问题。

九、这几个结论怎么用到自己系统上

先补反馈的单位,这是最便宜的一刀

如果你现在只有一个“这条轨迹失败了”的日志,第一步不是换模型,而是把报告切到语义技能这一级:每个技能进出时的状态、返回值、命名出口。代价是改渲染器,不是重训模型。

收益的参考数字是 Tool Hanging 的 7% 到 90%、Gear Meshing 的 10% 到 70%、总体 25% 到 52%。这一刀的性价比在全部实验里最高,因为它不动模型、不动技能库、不动任务。

再补空间表示里的关系

第二步是把状态写成关系,而不是写成坐标。世界坐标是必要但不充分的:论文里那一档总体 30%,USB-C 上 0%。真正起作用的是物体坐标系下的相对量(长轴偏角、爪子偏移)和零件级的功能几何(环的半径、环在不在柄上)。

这一步的收益是总体 30% 到 52%,Tool Hanging 25% 到 90%。它的实现成本比第一步高,因为你要为每个任务定义零件和关系;但它是可以按任务逐个加的,不需要一次做完。

模型和技能放在后面

按论文的差距分解,真正把人类可解用例吃下来的大头是“人类任务技能”(27.0%)和“更新的模型”(35.0%),迭代自学习本身只占 16.1%,模拟反馈再补 10.5%。这个排序和很多团队的直觉相反:大家往往先调模型、先扩技能库,最后才去改反馈。

我的读法是:这三件事不是替代关系,而是顺序关系。反馈单位不对的时候,你换更强的模型,它拿到的是同一份含糊的报告,只能把同一处代码改得更稳;空间表示不对的时候,你扩技能库,agent 会用更多技能去绕开它推不出来的几何关系。先把信息翻译成可归因的形式,模型和技能才有放大的空间。

哪几个“加量”是伪需求

按原文的消融,至少四件事不值得先做。

  • 把反馈做到每个机器人动作。总体 36% 低于按技能报的 52%,而且在感知类失败上直接归零。
  • 无脑加迭代轮次。十行里九行第二轮增益更小,且失败会往更晚、更隐蔽的地方迁移。
  • 单纯扩大技能库的覆盖面。Kimi K3 用了最大份额的通用技能,两轮只涨 7 点;弱模型用得多不等于用得好。
  • 无差别地加特权信息。它在 Threading 上值 84 点,在 Tool Hanging 上亏 47 点,取决于特权阶段学到的策略在视觉下还成不成立。

十、局限与失效场景

只在仿真里,而且是干净的那一档

论文自己写明了假设:有可靠的物理仿真器,训练与评测在同一任务类内,机器人与传感器配置固定,场景变化有界。实验主要用 VABAR 的 Level-1 与 Level-2,环境不杂乱、动作相对简单。sim-to-real 迁移、新本体泛化都不在范围内。

这一条对读者的约束很实际:它给的所有数字都是“仿真留出实例”上的,不要直接外推到真机。

单一 harness、单一提示词、单一技能库版本

四个旋钮之外的东西全部冻结了,这是受控实验的优点,也是它的边界。论文在局限里承认,提示策略与 harness 配置没有覆盖;为了做受控对比所需的 rollout 数量太大,这些因素留给后续工作。技能库锁定在 open-robot-skills 的一个 commit 上(早期三个运行用的是另一个 commit,脚本有三处不同)。

榜单是时间快照

模型一栏里全是带日期的新版本。论文自己说这是一次时间快照,新模型出来就要更新评测。所以“Opus 5 两轮 74%”这种数字,半年后大概只能当历史记录读。

统计口径要跟着读

主实验每个设置是每任务 5 次独立运行,报的是这 5 次的均值;附录里另给了一张带标准差的表,人类那一行没有运行、直接取 VABAR 的 Level-1 结果。课程实验每任务只有 3 次运行,曲线上的带子是三个种子复制的标准误。这两个量级都不足以支撑“某两个设置之间有 2 个点的差异”这种结论。

还有一个容易读错的点:反馈实验的所有臂都从参考运行那个 3% 的初始策略出发,所以表 2 那四行不能和表 1 的绝对水平直接比,只能在同一张表内部比。

失败最后落在哪里

两轮之后的失败谱系是:放置 49%、规划与逆解 13%、步数预算 10%、感知 8%、自检中止 7%、抓取 6%、到达 5%。放置这一类在全篇都是最大的一类,而它恰恰是“上游决策的后果在末端才显形”的那一类——这既是这篇论文的结论,也是它没有解决的部分。

十一、落地判断:什么团队该试,什么团队别碰

值得试的三个信号

  • 你的任务已经有多阶段结构,而且失败经常“报在这里、错在那里”。这是这篇论文最适配的场景,收益也最大。
  • 你有可靠的仿真器,能在同一批实例上重复跑。没有这个前提,就没有配对比较的基础,所有结论都会退化成传闻。
  • 你的瓶颈是策略的几何正确性,而不是感知精度或硬件稳定性。论文里提升最大的几个任务,都是几何关系被显式化之后立刻见效的。
  • 你已经有一个能跑的 harness(预跑、验证、留出三分)。这篇论文的一半结论都建立在“评测口径干净”这件事上。

别碰的三种情况

  • 你在做真机在线自学习,且每次试验成本很高。这篇论文的每个结论都建立在每设置 25 次运行、每次 4 训练 10 留出的规模上,真机上跑不起这个量级。
  • 你的失败主要表现为感知不到、抓不稳,而不是“决策链上游错了”。反馈粒度与空间表示这两刀切的是归因与几何推理,切不动传感器。
  • 你指望用课程解决收敛问题。它在 7 个任务里 4 个变好(Threading、Mug Cleanup、Coffee、USB-C)、3 个变坏(Tool Hanging、Kitchen、Gear Meshing),当默认配置是有风险的。
  • 你需要跨本体或换机器人。全篇固定同一套机器人与传感器配置,这一条完全没有数据。

一周能跑的最小验证

如果你想验证“反馈粒度”这一条在自己系统上成不成立,最小可行的做法是这样五步:

  1. 选一个多阶段、且失败会“报在末端”的任务,先确认它有明确的语义步骤划分。
  2. 固定模型与技能库,只改反馈渲染器,做三档:per episode、per motion、per skill。
  3. 每档 5 次运行、每次两轮、每轮 4 个训练加 10 个留出,留出集全程不回灌。
  4. 记录三档的留出成功率,同时记下每次编辑的结局类型,看它是不是在“修好且涨点”这一格。
  5. 如果三档之间的差小于表 2 里看到的那十几点,说明你的瓶颈不在这里,去查空间表示或技能接口。

这个规模大约是一篇论文里单个设置的量级,一周内能跑完,而它足以告诉你该不该继续往这个方向投。

术语速查

术语含义
S0 / Sg / Sτ / SA底层工具 / 通用技能 / 人类专家任务技能 / agent 自写代码,四者构成技能库
SKILL.md每个技能的说明文件,写适用条件、状态流、声明工具与具名出口
πk第 k 轮迭代后的策略,以可执行代码表示
@k前 k 轮反馈内达到的最好留出成功率
per skill / per motion / per episode反馈的三种时间粒度:按语义技能、按机器人动作、按整条轨迹
零件标注在物体坐标系之上再给出功能几何,如环的半径、环是否在柄上
特权状态仿真器内部精确几何,视觉策略拿不到
课程先特权后感知的训练排布,本文用 8+8 或 5+5 轮
preflight不计分的预跑 episode,用来区分“跑不起来”与“跑起来但失败”
留出实例与训练、验证都不重叠的评测实例,从不回灌给 agent
rollout一次完整的策略执行与评分

回到开头那个系统形态。这篇论文没有提出新方法,它的贡献是把四个旋钮拆开,量出各自的量级,并且诚实地报出了大量“看起来该有用、实测没用”的结果。对做工程的人来说,这类负结果比又一个 SOTA 更值钱:它告诉你哪一刀砍下去会有反应,哪一刀只是把账单变长。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐