EmbodiedSkills:把 VLA 的动作预测装进可检查的闭环里
机器人最容易让人误判的时刻,不是它把一个物体抓歪了,而是它看起来每一步都做得像样,最后却没有完成任务。比如“把容器放到盘子上”:机器人可能已经看到了容器和盘子,也能生成一段合法的机械臂轨迹,但它没有确认容器是否真的抓稳,没有检查盘子是否在可达位置,更没有在一次失败后重新规划。动作会吐出来,任务却可能停在半路。
这正是 EmbodiedSkills 试图拆开的矛盾。VLA,也就是 Vision-Language-Action 模型,通常被理解为把视觉观测和语言指令直接映射成机器人动作。这样的模型擅长回答“下一步手臂该怎么动”,却不天然负责回答三个更麻烦的问题:现在执行的前置状态满足了吗,刚才那一步真的成功了吗,如果没有成功,应该回到哪一步重来。论文的核心判断很明确:长时序任务的难点,常常不是动作本身不合法,而是动作被放进了错误的状态里。 EmbodiedSkills
为什么“会吐动作”不等于“能完成任务”
把任务写成一条从指令到动作的直线,最省事的做法是让模型一次性预测一串动作。对“拿起红色方块”这样的短任务,它可能已经够用。可一旦任务变成“先把方块放到中间位置,再按按钮,最后把它放回原来的垫子”,每一步都会改变下一步所依赖的世界状态。机器人需要知道方块是否已经到位,按钮是否真的被按下,以及“原来的垫子”究竟是哪一个。
这里有三种容易混在一起的失败。第一种是动作合法但状态不对。机械臂可以执行“向前移动”,但如果夹爪没有抓住目标,这个动作并没有推进任务。第二种是动作完成但结果没被验证。机器人发出放置动作,不等于物体已经稳定落在盘子里。第三种是失败没有恢复路径。模型若只继续输出下一段动作,前面一个小误差会变成后面所有动作的前提。
早期的语言规划路线已经展示了反馈的重要性。Inner Monologue 会把 success detector、object detection 或人工反馈转换成文本,追加到 planning prompt,再让语言模型在语言空间里更新下一步预测。它比一次性生成计划更能应对扰动,但安全约束仍然主要存在于 prompt 里。模型可以读到“上一步失败了”,却没有一个独立的执行层强制拒绝不满足前置条件的下一条命令。Inner Monologue
EmbodiedSkills 因而把问题换了一个问法:模型不再直接发布物理命令,而是提交一份 Execution Proposal,也就是执行提案。提案要先经过 runtime 的检查,执行后还要留下结果证据。模型负责提出“想做什么”,runtime 负责判断“现在能不能做,以及做完算不算完成”。

图注:概览图展示 EmbodiedSkills 的六个阶段 Observe、Plan、Preflight、Execute、Verify、Recover,以及 executable skills 所处的闭环关系。图中箭头把观察、规划、执行后的验证与失败恢复串成循环,表达模型提案由运行时组织和检查的整体结构。EmbodiedSkills
这六个阶段不是一次性的流水线。Observe 更新对环境的认识,Plan 产生子目标,Preflight 检查执行条件,Execute 只推进一个有边界的动作块,Verify 判断结果,Recover 根据失败证据修改上下文。完成一轮之后,系统重新回到观察。闭环的价值不在于“有一个反馈箭头”,而在于反馈能够改变下一次被允许执行的动作。
Execution Proposal:把模型决策当作“提案”而不是“命令”
“提案”这个词听起来像是措辞变化,实际却对应一条清晰的系统边界。普通的模型直出动作是:模型生成什么,机器人就尝试执行什么。Execution Proposal 则把输出拆成结构化决策,例如运行某个 skill、推进当前阶段,或者结束任务。每个决策都要交给 runtime。runtime 可以接受,也可以阻断,并且要记录被阻断的决策和相关证据,而不是静默地把它改写成某个动作。
一个提案至少要回答四件事。它属于当前阶段吗,所调用的 skill 是否允许在这里出现,输入参数的类型和来源是否正确,动作完成后需要观察到什么结果。这样,模型的能力和执行系统的责任被分开。模型可能看错了,但看错不再自动等于机器人立刻执行;runtime 可能不知道目标的真实语义,但它仍然可以检查接口、状态和数据新鲜度。
这与 Inner Monologue 的差别不在于有没有反馈。Inner Monologue 的反馈回到 prompt,模型再做一次语言规划。EmbodiedSkills 的关键动作是把部分约束移出 prompt,放进 runtime guard。前者要求模型“记住规则并遵守”,后者让系统在物理执行前“检查规则是否满足”。因此 Execution Proposal 不是 prompt feedback 的别名,也不是 Inner Monologue 的简单升级,而是重新划定了学习策略与执行运行时之间的边界。
具体到容器和盘子的例子,planner 可以提出“运行 place-container skill”,同时给出目标盘子和执行预算。Preflight 先检查容器已经被抓住,盘子仍在可观察区域,相关 observation 没有过期,低层 VLA 可用。条件不满足时,提案被拒绝,系统可能重新观察或回到规划阶段。条件满足后,低层策略才生成动作。动作完成后,Verify 再检查容器是否处在盘子上。若没有,Recover 不必把整个任务当作成功,也不必盲目继续,而是带着失败证据重新决定。
Executable-Skill Interface:让闭环成为一份可执行的合约
EmbodiedSkills 的核心工程选择,是在高层 VLM 和低层 VLA 之间放入一个共享接口。高层 VLM 负责把指令拆成语义子目标,并选择可执行 skill。低层 VLA 负责把当前 active subgoal 转换成动作块。环境和机器人状态则从底部回流,供下一轮观察和验证使用。论文在实例化中使用 Qwen3-VL 作为高层 scheduler,并使用 OpenPI/π0.5 作为低层 VLA,但方法图本身强调的是角色分工,而不是某两个模型的永久绑定。

图注:方法架构图以四层关系展示 High-Level VLM、Shared Executable-Skill Interface、Low-Level VLA Policy 与 Environment / Robot State。高层通过接口提出子目标,低层生成 bounded action chunk,环境状态再回流到上层,图中箭头体现 propose、execute 与 observe 的方向。EmbodiedSkills
接口里的每个 skill 被写成一个 typed contract:
$$ k = (\mathcal{X}_k, \mathcal{Y}_k, \mathrm{pre}_k, \mathrm{exec}_k, \mathrm{post}_k, \mathrm{fail}_k) $$
其中,输入和输出有各自的 schema,pre 定义前置条件,exec 定义实际操作,post 描述执行后的状态更新,fail 则把失败映射到明确的状态和证据。它像一份给执行系统看的函数签名,但比普通函数多了“执行前必须成立什么”和“执行后需要证明什么”。
例如,一个 place-container skill 的输入不是一句含糊的“把它放好”,而可以包含目标物体、目标区域以及与当前观察关联的证据。若这份证据太旧,或者它来自已经失效的状态,runtime 不应把它当作新动作的授权。论文特别强调 provenance 和 freshness。换句话说,系统不仅检查“字段有没有”,还检查“字段从哪里来,以及现在还可靠吗”。
论文把 runtime guard 分成三类。G_skill 检查提案是不是当前阶段允许的 RunSkill,skill 是否属于当前阶段,以及它需要的资源和条件是否全部满足。G_advance 检查当前阶段是否已经拥有足够的退出证据。G_finish 则负责终止。任何 guard 失败,系统都记录被 block 的决策及其证据。这样,policy 的概率性输出被包在一个确定的状态转移规则里。
Execute 阶段还不能让低层 VLA 无限输出。它生成的是 bounded action chunk,可以理解为一小段带边界的动作序列。runtime 会检查 chunk 的长度、约束是否满足、动作是否仍对应当前 subgoal 和 observation,以及具体动作序列是否合法。一个语义子目标可以需要多个 chunk。每执行一块,verifier 都可以决定继续、重新观察、重新规划、恢复或推进,而不是把整个子目标硬塞进一个过长的 action horizon。
这也解释了为什么“稳定接口,下层可替换”很重要。OpenPI 的 π0.5 是一个具体的低层 VLA,它结合 flow matching action expert 与 action chunking,把连续动作分布转成适合实时控制的动作序列。EmbodiedSkills 借用的是低层执行能力,不把整个 runtime 设计绑死在 π0.5 上。π0.5
训练:同一份合约怎样让组件分头学习
如果部署时所有决策都混在一段自由文本里,训练也很难知道错误究竟来自 planner、VLA 还是 verifier。EmbodiedSkills 的做法是把一次交互记录成结构化轨迹。每个时刻的样本包含全局目标、当前阶段、图像、压缩后的状态、可用 skill 集合和历史 trace,监督目标则只对应当前组件要做的决策。
可以把它抽象成下面这张表。重点不是每个字段的名字,而是“上下文”和“预测目标”被明确分开。
| phase | 训练样本中的关键字段 | 当前组件预测什么 | 监督来源 |
|---|---|---|---|
| Observe | 图像、场景状态、历史 trace | 场景证据与状态更新 | 观察结果与轨迹记录 |
| Plan | 全局指令、当前阶段、可用 skill | 有序语义子目标 | 规划轨迹 |
| Preflight | subgoal、robot state、资源与 freshness | 接受、阻断或补充检查 | 前置条件与 guard 结果 |
| Execute | observation、robot state、active subgoal | bounded action chunk | 子任务级 demonstration |
| Verify | post-action observation、active subgoal | Continue、Advance、Replan 或 Recover | 结果证据与环境 evaluator |
| Recover | failure evidence、历史状态 | 修订后的执行上下文 | 失败恢复轨迹 |
低层 VLA 只在自己的输入输出接口上学习,例如 observation、robot state、active subgoal 和 action sequence。高层 scheduler 则在与部署一致的 decision trace 上做 component-level SFT。论文还强调训练和部署要使用同一套 history-compaction 规则。否则训练时模型看到完整历史,部署时却只能看到压缩历史,接口虽然相同,实际输入分布已经变了。
Qwen3-VL 被用于高层,是因为它原生支持交错的 text、image、video context,上下文窗口达到 256K,并把 agentic decision-making 作为定位之一。这些能力与长期观察历史和多步调度相契合,但 EmbodiedSkills 没有明确说明使用哪个 Qwen3-VL 变体,因此不应把某个具体尺寸归给这篇论文。Qwen3-VL
论文也讨论了在可靠环境 evaluator 可用时进行 GRPO 式 online adaptation。不过它明确把 online optimization 定义为可选 refinement,不是 component-level supervision 的替代,也不是后面 headline 数字的来源。这一区分很重要:论文的主结果首先来自结构化接口、组件监督和部署一致的轨迹,而不是把所有提升归功于一次在线强化学习。
RoboTwin 2.0:86.20% 测的是什么
86.20% 是全文最容易被误读的数字。它不是“整个 EmbodiedSkills agent 在 50 个任务上端到端成功率达到 86.20%”,而是论文对 task-adapted low-level VLA policies 在统一接口下执行能力的报告。要读懂这个数字,先要知道评测表面有多大。

图注:RoboTwin 2.0 总览图展示了双臂 manipulation benchmark、MLLM 驱动的数据生成流程、RoboTwin-OD 物体库和多种双臂机器人配置。图中可见 50-task benchmark、731 个物体与 147 个类别的对象库,以及不同场景和平台组成的评测环境,但没有展示具体成功率或消融数字。RoboTwin 2.0
RoboTwin 2.0 包含 50 个双臂任务和 5 个机器人平台,物体库有 731 个物体、147 个类别。Hard 条件会改变 clutter、光照、背景纹理、桌面高度和语言指令等维度,让策略面对的不只是干净场景中的熟悉轨迹。EmbodiedSkills 在这个环境里报告的 86.20%,要理解为 task-adapted 低层 VLA 在 executable-skill interface 约束下完成动作执行的宏平均能力。RoboTwin 2.0
论文表中给出的比较是:
| 方法 | RoboTwin 2.0 平均执行性能 |
|---|---|
| ACT | 29.7% |
| DP | 28.0% |
| RDT | 34.5% |
| DP3 | 55.2% |
| π0 | 65.9% |
| X-VLA | 72.8% |
| π0.5 reference | 82.74% |
| Ours | 86.20% |
这里的 82.74% 来自 LingBot-VA 附录中 π0.5 在 RoboTwin 2.0 上的 reference,不是 LingBot-VA 自身的成绩。LingBot-VA 自己的 Easy 50-task 数字是 92.93%,两者不能混成一个“π0.5 版本”的结果。LingBot-VA
86.20% 相比 82.74% 高出 3.46 个百分点。论文还报告,50 个任务中有 39 个超过参考结果,1 个持平,10 个略低。这个提升不像从零开始的架构跃迁,更像是同一个低层执行器被放进更合适的执行组织后,接触敏感和多阶段任务得到额外收益。它说明接口确实能把“会做动作”变成更稳定的“在当前子目标下做动作”,但不能把它升级成端到端全任务保证。
论文的定性轨迹把这个差别变得具体。三条成功执行轨迹从初始观察经过中间状态到终止状态,覆盖物体重新定向、多物体堆叠和 articulated switch interaction。它们展示的不是一次动作的漂亮程度,而是 planner 产生短的 visually-grounded subgoals,低层 VLA 分块执行,环境状态再被带回循环。

图注:三行仿真轨迹分别展示 RoboTwin 2.0 中随机选取的成功执行示例。每行由多个状态帧组成,画面从初始观察经过中间状态推进到终止状态,体现多步操作如何在场景中逐渐完成。图中不标注具体成功率,也不把某一行绑定到特定任务名称。EmbodiedSkills
这正是闭环架构应该提供的证据:不是模型能否生成一段动作,而是动作之后的观察是否改变了下一步决策。
LIBERO 的 97.40% 与 RMBench 的 12.5%:两个数字讲的是两种能力
LIBERO 让 EmbodiedSkills 看起来接近饱和。这个 benchmark 有 4 个套件,共 130 个任务。Spatial、Object、Goal 各有 10 个任务,LIBERO-100 有 100 个任务,分别改变布局、物体、目标,或同时改变这些因素。后续 VLA 文献常把 LIBERO-100 中的 10 个长时序子集称为 LIBERO-Long。它是一个长任务子集,但不等于显式记忆任务,因为任务相关信息仍然可以从当前观察中获得。 LIBERO

图注:LIBERO 总览图上半部以中心的 Procedural Generation 连接 Spatial、Object、Goal 和 LIBERO-100 四个程序化生成套件,每个套件配有任务场景示意;下半部展示 Distribution Shifts、Algorithmic Designs、Neural Architectures、Task Orderings 和 Pretraining Effects 五类研究主题。图中没有给出 EmbodiedSkills 或 OpenPI 的成功率。LIBERO
在同一套四套件口径下,EmbodiedSkills 报告 97.40%,OpenPI 的 π0.5 release 报告 96.85%,只高出 0.55 个百分点。分套件看,Spatial 是 99.0% 对 98.8%,Object 是 98.6% 对 98.2%,Goal 是 98.4% 对 98.0%,Long 是 93.6% 对 92.4%。最大的提升出现在 Long,达到 1.2 个百分点。这个结果与 RoboTwin 的观察相呼应:闭环和 subtask 组织在多阶段场景里更有价值,但这些数字仍然是 task-adapted low-level VLA 的接口下执行性能,不是整个 agent 的端到端成功率。π0.5
真正的反转出现在 RMBench。它同样建立在 RoboTwin 2.0 的仿真体系之上,却专门构造需要跨时刻保留信息的任务。RMBench 用 Task Memory Complexity,也就是 TMC,区分 M(0)、M(1) 和 M(n)。M(0) 表示当前观察足够,M(1) 需要保留一个过去观察,M(n) 则需要多个过去观察和反复尝试。于是,“任务很长”和“任务需要记忆”不再是同一个概念。

图注:RMBench 任务总览图以九行仿真示例展示 memory-dependent manipulation 任务及其关键执行帧。画面涵盖电池尝试、方块排列、遮盖方块、按钮操作等不同场景,每行由初始或中间状态到后续状态的视觉片段组成。图中没有展示任何成功率或 Mem-0 架构细节。RMBench
RMBench 的 9 个任务里,5 个是 M(1),4 个是 M(n)。M(n) 任务包括 Battery Try,需要反复尝试电池插入方向;Blocks Ranking Try,需要尝试排列并按按钮确认;Cover Blocks,需要按照步骤盖上、揭开并归位;Press Button,则要求根据数字 tile 完成计数。这里的关键不只是“下一步看什么”,而是“之前尝试过什么、哪些方案已经失败、接下来不能再重复什么”。
在这 4 个 M(n) 任务上,EmbodiedSkills 报告的 task-adapted execution 平均是 12.5%。这个数高于 RMBench 中裸 DP 的 5.0%、ACT 的 4.8%、π0.5 的 5.5% 和 X-VLA 的 7.3%,说明 typed interface、subtask decomposition 和 verification 确实带来了执行收益。但它仍低于 RMBench 配套的 Mem-0 的 28.5%。RMBench
这组差距给出全文最重要的边界判断。EmbodiedSkills 的 structured trajectory 可以让历史进入 planner 的上下文,但它没有像 Mem-0 那样把跨子任务历史拆成专门的显式 memory 模块。Mem-0 则专门保存已经完成的子任务和终止观察,并通过 memory 参与后续规划。两者都在做闭环,但解决的不是同一个缺口。Execution Proposal 能防止错误提案在错误状态中落地,却不能自动知道几轮之前已经试过哪种排列。
Press Button 的结果还留下一个不应被强行解释的反常点。EmbodiedSkills 在该任务上报告 16%,而 RMBench 官方 Table 1 中 Mem-0 报告 0%。现有资料不能确认这种差异来自什么 re-evaluation setup,因此这里能做的结论只有一个:跨论文的任务级数字需要谨慎,不能据此推断某个方法在所有按钮计数场景中更强。
消融告诉我们:闭环不是装饰
如果只看三个 headline 数字,读者可能会把 EmbodiedSkills 理解为“换了一个高层模型,再给低层策略加了几条提示”。消融实验说明事情更具体。论文在相同的 RoboTwin 2.0 任务、相同的 episodes 和 terminal evaluator 下,逐步拿掉 AgentLoop 的关键组件:
| 设置 | 接口下 task-adapted low-level VLA 执行性能 | 相对 Full 的变化 |
|---|---|---|
| Full | 86.20% | 基准 |
| w/o Verify | 48.2% | -38.0 个百分点 |
| w/o Subtask | 34.4% | -51.8 个百分点 |
| One chunk / subtask | 19.5% | -66.7 个百分点 |
先看 Verify。去掉验证后,系统仍保留动作 budget,却从 86.20% 掉到 48.2%。原因不是动作预算突然消失,而是固定的 open-loop 分配无法根据真实观察调整 chunk 数。一个动作块执行得比预想更慢或更早完成时,系统没有可靠的中间判断去决定继续还是转向。
再看 Subtask。用全任务指令替代 active subtask,性能掉到 34.4%。低层策略每一步都要从长指令中推断自己当前处在哪个阶段,以及此刻应该关注哪个物体。语义分解的作用不是把任务写得更漂亮,而是把低层策略每次需要解决的问题缩小到当前目标。
最后是 One chunk。即使保留 subtask decomposition,只允许每个子任务使用一个动作块,性能进一步掉到 19.5%。这说明“有子目标”仍然不够。许多子任务天然需要多个 bounded chunks,系统必须在每个 chunk 之后观察进展,再决定继续执行还是改变路线。验证、语义粒度和 adaptive continuation 是彼此独立的三件事。
闭环的价值与边界:它是中间产物,不是终点
EmbodiedSkills 最值得关注的地方,不是它宣称用一个 runtime 解决了所有具身智能问题,而是它把一个经常被混写的层次拆开了。policy 负责提出决策,runtime 负责检查决策能否执行,低层 VLA 负责在边界内推进动作,verifier 负责把物理结果翻译成下一次路由。这样得到的 agent layer 同时具备可训练性和可检查性。
但这套拆分有明确成本。第一,task-adapted low-level VLA 需要更多训练、存储和部署资源。论文因此把更通用的 subgoal-conditioned generalist VLA policies 视为后续方向。第二,guard 只能检查形式和状态条件,不能保证模型对目标的语义理解正确。一个 schema 完整、freshness 合格的错误 grounding,仍可能把机器人带到错误状态。第三,高层调用和 post-action observation 会带来相对于 one-pass action policy 的延迟。第四,planner、verifier 和 policy 之间的协调本身会产生 trade-off,长 episode 中的小错误仍可能累积。
更重要的是,闭环有不止一种实现。Hi Robot 走的是较轻的 natural-language whisper 路线:高层 VLM 输出自然语言命令,低层 π0 将其转成 action chunk。它的接口更像一句给低层策略的上下文指令,而不是带输入输出、前置条件和失败状态的 typed contract。因此,hierarchy 并不自动等于 runtime guard。Hi Robot
另一条路线把闭环的原子单位换成预测的视觉状态。LingBot-VA 用 video-action world model 预测未来视觉 latent,再通过 inverse dynamics 解码动作,并把真实观察重新带回 KV-cache。它和 EmbodiedSkills 都承认动作之后必须重新面对环境,但前者把记忆锚在持续的视频上下文,后者把执行锚在 typed skill 和 runtime guard。

图注:LingBot-VA 架构图展示 video stream 与 action stream 交错在同一序列中,video stream 通过 flow matching 预测未来视觉状态,action stream 根据预测转移解码动作,顶部有文本条件输入,KV-cache 将历史与后续自回归过程连接起来。图中可见的是 video-world-model 路线的模块关系,不是 typed skill contract。LingBot-VA
这两条路线说明,当前研究真正争论的已经不只是“VLA 能不能预测动作”,而是“什么东西应该成为闭环的最小单位”。EmbodiedSkills 的答案是可检查的 skill proposal,LingBot-VA 的答案是预测的下一视觉状态,Hi Robot 的答案则是一句经过训练的自然语言 whisper。每一种选择都把一部分责任放在模型里,把另一部分责任放在外部结构里。
EmbodiedSkills 也因此留下了一个比 86.20% 更有价值的研究问题:怎样在不牺牲可检查性的前提下,加入显式的跨子任务 memory,同时降低 planner、verifier 和 runtime 反复调用带来的延迟与成本。RMBench 的 12.5% 已经把答案边界写在数字里。闭环能够让错误被看见,让下一步不必盲走,但它不会自动替你记住所有过去的尝试。
会吐动作,是策略的起点;能带着证据走完下一步,才是闭环执行的门槛。
想深入可以读原文:EmbodiedSkills: A Unified Framework for Orchestrating, Training, and Deploying VLA Agents — arXiv:2609.01281
参考文献
- EmbodiedSkills: A Unified Framework for Orchestrating, Training, and Deploying VLA Agents — https://arxiv.org/abs/2609.01281
- π0.5: a Vision-Language-Action Model with Open-World Generalization — https://arxiv.org/abs/2504.16054
- Qwen3-VL Technical Report — https://arxiv.org/abs/2511.21631
- Inner Monologue: Embodied Reasoning through Planning with Language Models — https://arxiv.org/abs/2207.05608
- Hi Robot: Open-Ended Instruction Following with Hierarchical Vision-Language-Action Models — https://arxiv.org/abs/2502.19417
- RoboTwin 2.0: A Scalable Data Generator and Benchmark with Strong Domain Randomization for Robust Bimanual Robotic Manipulation — https://arxiv.org/abs/2506.18088
- LIBERO: Benchmarking Knowledge Transfer for Lifelong Robot Learning — https://arxiv.org/abs/2306.03310
- Causal World Modeling for Robot Control (LingBot-VA) — https://arxiv.org/abs/2601.21998
- RMBench: Memory-Dependent Robotic Manipulation Benchmark with Insights into Policy Design — https://arxiv.org/abs/2603.01229
- Evaluating Multimodal LLMs as Generalist Vision-Language-Action Agents for Drone Control: Commanding, Approaching, Tracking and Searching — https://arxiv.org/abs/2609.01404