PAPER DEEP DIVE
Harness VLA:用记忆引导的智能体把冻结 VLA 驾驭成可靠的操作原语
语言条件操作既需要精确的富接触控制,也需要对语言、场景和长时程的稳健推理。端到端视觉-语言-动作(VLA)模型提供强大的局部视觉运动技能,但它们是在分布内任务轨迹上训练的,在语义重定向、目标重绑定、空间布局偏移和局部接触不稳定等部署扰动下常常失效。LLM 编码智能体提供互补的语义与组合推理,但纯解析原语在不规则抓取、受限放置和铰接物体交互上表现很差。本文提出 Harness VLA,一个记忆增强的智能体框架:它把一个冻结的 VLA 暴露为可重试的富接触原语,并与一个小型固定的解析原语库组合,用于接地、暂存、搬运、导航和释放。框架不去扩大技能库,而是从任务特异的执行轨迹、全局成功规则和失败模型中学习这些固定原语的工作范围。通过把语义重接地、非接触执行和 VLA 重暂存上提到规划器,同时把冻结 VLA 留给局部富接触阶段,Harness VLA 在不微调的前提下把预训练 VLA 扩展到其原始轨迹分布之外。在被扰动的桌面操作、家庭厨房操作和 clean-to-randomized 双臂操作上,Harness VLA 在 LIBERO-Pro 和 RoboCasa365 上分别比最强相关基线高出 38.6 和 27.1 个百分点,并在 RoboTwin C2R 上达到 58.4%。代码开源于 https://github.com/RLinf/RPent 。
Harness VLA:用记忆引导的智能体把冻结 VLA 驾驭成可靠的操作原语
论文信息:Harness VLA: Steering Frozen VLAs into Reliable Manipulation Primitives via Memory-Guided Agents · Yixian Zhang、Huanming Zhang(共同一作)、Feng Gao、Xiao Li、Zhihao Liu、Yi Nie、Chunyang Zhu、Jiaxing Qiu、Yuchen Yan、Jiyuan Liu、Wenhao Tang、Jiaji Rao、Zhengru Fang、Changxu Wei、Yu Wang、Wenbo Ding、Chao Yu · 清华大学 / Striding AI / 普渡大学 / 中科院自动化所 / 无问芯穹 / 港科大 / 中关村学院 · arXiv:2607.08448v4(2026-09-02 更新)· 项目主页 harnessvla.github.io · 代码已开源:github.com/RLinf/RPent
一句话总结:不改 VLA 一个参数,把它从"跑完整条轨迹的策略"降格成"一个可重试的富接触原语 vla_act",再由 LLM 编码智能体在一个固定的 6+1 原语库上做记忆引导的组合调度——LIBERO-Pro 上比最强公开基线高 38.6 个百分点,RoboCasa365 上高 27.1 个百分点。
一、问题从哪里来:两种范式都把责任放错了地方
语言条件操作这件事,长期被两个方向从相反两端逼近。一端是端到端的视觉-语言-动作模型(VLA),直接从机器人轨迹里学富接触的视觉运动控制;另一端是 LLM 编码智能体,用语言模型的推理能力去组合显式的感知与控制 API。这篇论文对现状的诊断相当直接:两种范式都很强,但都把过多的责任压在了错误的组件上。单体 VLA 必须在一个策略内部同时吸收语言接地、长时程组合和底层控制;编码智能体则必须靠手工设计或自己生成的 API 去实现物理上极其精细的交互。
先看 VLA 这一侧。从 RT-1、Octo 到 RT-2 与 Open X-Embodiment 建立的跨本体协同训练范式,再到 OpenVLA 把这条路线开源化、$\pi_0$ 与 $\pi_{0.5}$ 用流匹配拿到显著增益,以及 GR00T、Gemini Robotics 把它扩展到人形与通用本体,端到端策略的进步非常快。它们真正强的地方是局部的、以图像为条件的接触:抓不规则物体、在紧公差下放置、操作那些对解析控制器来说太脆的机构件。
它们弱的地方同样明确——一旦离开训练轨迹分布就会退化。一个在分布内轨迹上训出来的模型,可能既知道怎么抓牛奶盒也知道怎么开水龙头,但当语义目标被重定向、目标谓词被重新绑定、物体布局被挪动、或者短技能需要被组合成更长的例程时,它就开始出错。论文里 Figure 3 给出的终态帧非常有说服力:在 Object-Pro 的任务扰动设定下,视觉场景几乎没变而指令已经把目标换掉了,$\pi_{\mathrm{RLinf}}$ 却重复了标准任务里的行为;在 Goal-Pro 的位置交换设定下,物体布局变了,它仍然把物体推向训练时的那个区域。换句话说,这类策略的语言通道在很大程度上是退化的装饰。
再看编码智能体这一侧。Code as Policies、ProgPrompt 把机器人控制重构成程序合成,让模型在精心准备的感知与运动 API 上写可执行程序;RoboCodeX、ViperGPT、VisProg 把它扩展到多模态程序合成;更近的 Cap-X、ASPIRE 这类工作则引入了更丰富的感知、工具使用、反馈和持久执行状态。问题在于,机器人操作领域扩展这类系统的方式,往往仍然是不断扩大原语库或技能库。而纯解析原语——确定性的运动学或基于模型的控制器,比如 IK 搬运、腕部旋转、底盘运动、夹爪开合、释放——恰恰在不规则抓取、受限放置和铰接物体交互上表现很差。
作者提出的反命题是:把原语库固定住、保持小规模,让智能体去学怎么编排它。这个视角来自软件工程智能体的经验——SWE-agent、OpenHands 这类系统证明了"可执行代码是 LLM 智能体很强的动作表示",而真正让模型决策可执行的,是包在外面的那层 harness:结构化工具接口、持久状态、执行反馈循环和记忆。本文借的是 harness 这个原则,而不是"动作必须是代码"这个要求。
图 1(论文 Figure 2):部署扰动把可能的任务配置扩展到冻结 VLA 覆盖的分布内轨迹之外。直接跑 VLA 可能试图跨越整个被扰动的空间,在抵达目标前就失败。Harness VLA 把任务分解成局部的富接触 VLA 调用与解析原语控制:解析原语负责感知当前目标、重新绑定任务、在 VLA 兼容的局部区域之间搬运机器人,而 vla_act 只在那些区域内部的富接触阶段被调用。
二、形式化:一个回合制的智能体执行循环
环境 $\mathcal{E}$ 由刚体物理引擎驱动(实现上是经由 Robosuite 的 MuJoCo)。在每个时间步 $t$,环境暴露一个多模态观测元组:
$$o_{t}=\left(I_{t}^{\text{rgb}},\,I_{t}^{\text{d}},\,q_{t}\right)$$
其中 $I_{t}^{\text{rgb}}$ 是智能体视角的 RGB 图像,$I_{t}^{\text{d}}$ 是与之共对齐的度量深度图,$q_{t}$ 是机器人本体感受状态(末端执行器位姿与夹爪状态的拼接)。一个任务由自然语言描述 $\ell$ 与一个二值完成谓词 $\mathcal{G}$ 共同定义,$\mathcal{G}$ 只在回合终止时作为稀疏成功信号暴露出来。
关键的形式化选择在这里:作者不把视觉运动策略当作一个独立的层级,而是把所有底层控制机制——包括冻结的预训练 VLA $f_{\theta}$ 和全部确定性操作空间控制器——统一进一个预先定义好的原语库 $\mathcal{P}$。任务回合被建模成高层智能体规划器 $\Pi$ 与物理引擎之间的自回归、回合制交互。在每个执行回合 $t$,规划器处理当前观测 $o_t$、任务描述 $\ell$,以及从 Task Specific Memory 与 Global Memory 检索到的上下文,然后为选中的原语发出一个结构化 JSON 调用:
$$c_{t}\in\mathcal{P},\qquad c_{t}=\{\texttt{action},\ \texttt{args}\}$$
物理引擎直接接收这个调用,在仿真器里执行对应的物理运动,直到该原语的内部后置条件被满足;原语终止后,引擎给出下一个观测 $o_{t+1}$ 与更新后的机器人状态 $q_{t+1}$。这个"环境—规划器"循环持续迭代,直到目标谓词 $\mathcal{G}$ 被满足或者最大步数预算耗尽。
这里有一个容易被忽略但很重要的约束:规划器永远不直接发出底层力矩、关节目标或动作块。它只能选择一个原语,并从语言、RGB-D 观测、本体感受和记忆里绑定该原语的参数。整个动作空间被压成了一个封闭的、可审计的 JSON 契约。
三、Harness 架构:两阶段生命周期
Harness VLA 把机器人操作包装成 REPL(读取-求值-打印循环)的形式。Harness 是规划器与环境之间的运行时契约,它负责:暴露原语 schema、把决策序列化为 JSON 命令、执行原语、刷新 RGB-D 与本体感受观测、记录轨迹、检索两类记忆、执行重置与预算策略、并通过基准谓词检查进度。因为 harness 把所有细粒度执行都下放给了原语库,规划器 $\Pi$ 才得以完全专注于组合推理。
智能体在 harness 内的生命周期被明确切成两个阶段,这个切分是全文实验协议的骨架。
探索式引导阶段(Exploratory Bootstrapping)。智能体在任务的单个参考实例上自主与环境交互,去发现一个可行解。这个阶段规划器被独家授予 reset 原语的访问权,并在宽松的墙钟预算下运行。由于原语词表是固定的,探索完全集中在迭代式组合上:尝试不同的暂存顺序、不同的预接触位姿、不同的 vla_act 调用时机、不同的提前返回终止阈值。它观察每次原语调用的物理效果,失败就修正路线。
部署评测阶段(Deployment Evaluation)。在未见过的环境变化上正式评测时——包括位置交换、指令重定向、以及跨多个初始状态种子——harness 施加严格的执行制度:reset 原语被完全禁用,操作步数预算被显著缩短。规划器从 Task Specific Memory 检索预先算好的 JSONL 轨迹,用实时 RGB-D 观测动态接地它,并参照 Global Memory 里积累的成功规则与失败模型确定性地执行。论文报告的所有基准数字都来自这个严格阶段。
任务成功与否一律由基准提供的二值完成谓词判定。原语级别的后置条件——比如 vla_act 或 release 的返回条件——只决定单个原语何时把控制权交还规划器,绝不被当作最终任务成功判据的替代品。这个区分很关键,否则"看起来抓起来了"就会被误记成成功。
图 2(论文 Figure 1):系统总览。给定任务描述、RGB-D 观测与机器人状态,智能体规划器从固定原语库里选择结构化调用,而不是直接发出底层动作。库里把冻结 VLA 暴露为 vla_act 用于富接触行为,用 move_to、rotate、set_gripper 等解析原语做感知条件的暂存、搬运、姿态调整与释放。Task Specific Memory 存参考种子探索得到的成功命令轨迹用于少样本重接地,Global Memory 存可复用的成功规则与失败模型。底部条带展示了一次在稀疏 VLA 调用与解析控制之间交替的回合。
四、统一原语接口:六个解析原语 + 一个学习型原语
原语库 $\mathcal{P}$ 是暴露给规划器的唯一动作接口。每个原语由单个 JSON 对象调用,在环境内执行直到内部后置条件达成,然后连同刷新后的观测一起交还控制权。$\mathcal{P}$ 被组织成两个操作族。
解析原语是确定性的、基于模型的控制器,由机器人运动学直接给出,不需要任何训练数据。它们再分两类:组合式原语接受一个世界坐标系下的空间目标,运行内嵌求解器去协调多个自由度;原子原语则把某一个内禀通道——腕部朝向、夹爪状态或底盘速度——驱动到一个参数化设定值。VLA 原语 vla_act 是一个学习型策略调用,把一个 prompt 和实时摄像头映射成动作块,用于局部富接触行为。探索用的 reset 工具只在引导阶段使用,不计入操作原语。
| 原语 | 类型 | 角色 | LIBERO | RoboCasa365 | RoboTwin C2R |
|---|---|---|---|---|---|
move_to | 组合式解析 | 用环境内嵌求解器把末端执行器移到世界坐标笛卡尔目标 | 是 | 是 | 是 |
move_pose | 组合式解析 | 移动末端执行器同时协变俯仰等姿态变量,用于可达性受限的构型 | 是 | 组合实现 | — |
rotate_wrist | 原子解析 | 保持当前空间位置,施加腕部偏航设定值 | 是 | — | 是 |
rotate_pitch | 原子解析 | 保持当前空间位置,施加腕部俯仰设定值 | 是 | 是 | — |
set_gripper | 原子解析 | 在固定步数内把夹爪驱动到张开或闭合设定值 | 是 | 是 | 是 |
release | 原子解析 | 在释放后置条件下张开夹爪 | 是 | 是 | 是 |
vla_act | 学习型 VLA | 短爆发执行冻结 VLA,做局部富接触交互 | 是 | 是 | 是 |
navigate_to | 组合式解析 | 驱动移动底盘到世界坐标平面位置,做厨房尺度暂存 | — | 是 | — |
move_base | 原子解析 | 施加开环局部底盘速度设定值做精细重定位 | — | 是 | — |
arm 绑定 | 参数 | 把原语绑定到左臂、右臂或双臂任务模式 | — | — | 是 |
表 1:原语词表(整合论文 Table 1 与 Table 8)。所有基准使用同一套原语名;跨环境的差异只通过可用性、手臂绑定和实现后端表达,除非本体暴露出新的自由度,否则不引入新原语名。
这里有几个设计细节值得单独点出来。move_to 的内部后端可以是操作空间伺服、基于雅可比的控制器或 IK 规划器,但暴露出来的原语语义完全一致——这是把环境差异挡在接口之外的关键。move_pose 在 RoboCasa365 里不直接暴露,同样的行为由 rotate_pitch 与 move_to 的短组合表达。RoboTwin C2R 不增加任何新的操作原语名,而是让每个原语都能通过 arm 参数绑定到左臂、右臂或双臂任务模式;因此交接类任务被表示成 vla_act、解析搬运与 release 在双臂绑定下的组合,而不是一个单独的原语。
最要紧的一条约束是:原语词表在评测前就固定,规划器不能在部署时发明新原语。这与 ASPIRE 那类"让智能体自己生长技能库"的路线正好相反,也正因如此,本文的经验主张才是"一个小而固定的原语库在规划器学会怎么用之后是够用的"。
五、vla_act:把 VLA 变成可重试的局部尝试
vla_act 是词表里唯一的学习型原语。它绑定当前基准所用的冻结 VLA,在 prompt 与实时观测的条件下执行动作块。跨基准地,它覆盖抓取、受限放置、机构件操作、按按钮、抽屉或门的操控、插入,以及本体特异的接触行为。规划器提供一个任务条件的 prompt 和一个提前返回谓词 $\tau$,冻结的 VLA $f_{\theta}$ 随后持续发出动作块 $a_{t:t+H}$,直到 $\tau$ 被满足或动作块预算耗尽:
$$f_{\theta}:\ (\text{prompt},\ o_{t})\ \longmapsto\ a_{t:t+H},\qquad \text{repeat until}\ \tau(o_{t+k})=\text{true}\ \text{or}\ k\geq K$$
其中 $K$ 就是 JSON 里的 max_chunks。$\tau$ 可以对应一个提起并抓住的条件、一个接触状态条件、一个基准谓词,或者干脆就是动作块预算。同一个原语因此覆盖了抓取、放置、机构操作、插入和双臂接触,同时把语义接地、空间重绑定、导航、重暂存和长时程组合的责任留给规划器。
论文强调的核心不只是"暴露 vla_act",而是学会何时以及如何用它。Harness VLA 把 VLA 执行当作一次可重试的局部尝试:规划器可以先把机器人暂存到一个有利的局部观测里,调用 VLA,检查接触结果,必要时重新暂存。它不把 VLA 当一次性黑箱调用。
这套机制在源码里看得很清楚。vla_act 在 LIBERO 后端对应 robots/libero/tools.py::pi0_pick,签名直接暴露了停止谓词的实现:
def pi0_pick(self, prompt: str, *, max_chunks: int = 24,
lift_thresh: float = 0.05, gripper_closed_thresh: float = 0.06,
gripper_open_thresh: float = 0.0, descent_thresh: float = 0.10) -> dict:
"""Closed-loop Pi0.5 pick driven by ``prompt`` as the VLA instruction.
Success requires the EEF to descend by ``descent_thresh``, then rise by
``lift_thresh``, with gripper opening in
[``gripper_open_thresh``, ``gripper_closed_thresh``). Terminates early
on LIBERO ``terminated`` (official success) or ``max_chunks``."""
for c in range(max_chunks):
self._vlm_chunk(instr)
chunks_used = c + 1
z = self._last_obs_eef_z
...
注意这里 $\tau$ 的物理实现:成功要求末端执行器先下降 descent_thresh、再上升 lift_thresh,且夹爪开度落在 $[\text{open\_thresh},\ \text{closed\_thresh})$ 区间内。代码注释里还特意说明了为什么要在观察到最低点之后再追踪上升峰值——因为原始的 |peak - min| 在下降过程的底部也会触发,那是个假信号。这正是"提前返回谓词"在工程上的真实样子。
RoboTwin 后端的 robots/robotwin/primitives.py::lingbot_act 则展示了动作块粒度与预算硬约束:
def lingbot_act(self, *, chunks: int = 4, use_length: int = 50,
prompt: str | None = None) -> dict[str, Any]:
if int(use_length) != MODEL_SPEC.use_length:
raise ValueError(f"RoboTwin LingBot requires use_length={MODEL_SPEC.use_length}")
requested = int(chunks) * MODEL_SPEC.use_length
for _ in range(int(chunks)):
status = self.env.last_info["episode_status"]
budget_exhausted = step_lim is not None and \
int(status.get("take_action_cnt", 0)) >= int(step_lim)
if status.get("eval_success") is True or budget_exhausted:
break
actions = self.model.infer(observation)[: MODEL_SPEC.use_length]
块长被硬钉在 $T=50$,总请求步数是 $\text{chunks}\times T$;而 eval_success 为真或步数预算耗尽都会立刻跳出——这就是论文说的"原语级后置条件只决定何时交还控制权"在代码里的落点。规划器本身则有两个可替换后端:rpent/planner/codex.py::CodexPlanner(基于 OpenAI Codex Python SDK)与 rpent/planner/claude_code.py::ClaudeCodePlanner(基于 Claude Agent SDK),它们共享同一套 harness、记忆接口、原语库与评测协议,只有规划器骨干不同——这正是论文能把 Codex 与 CC 两行并列报告的前提。
六、文件中介的 REPL:没有特权状态的感知隔离
第 2.2 节的 harness 把执行循环实现成一个同步的、文件中介的 REPL。一个长驻的环境 worker 拥有实时仿真器状态,而规划器 $\Pi$ 只能通过序列化的原语调用和持久化的观测与它交互。规划器不能访问特权仿真器状态、物体位姿或控制器内部。
在回合 $t$,规划器读取当前观测 $o_t$、任务语言 $\ell$ 和检索到的记忆上下文,然后通过把一个 JSON 对象写入 command.json 来发出一个原语调用 $c_t\in\mathcal{P}$。对象的 action 字段是原语名,其余是对应的关键字参数。Worker 消费这个文件,在实时环境里执行选中的原语,写出下一个带索引的观测 $o_{t+1}$ 以及轻量执行记录。规划器等这些文件出现之后才选择下一个原语。索引 NN 单调递增,初始观测写在 NN=00。
| 文件 / 制品 | 角色 |
|---|---|
command.json | 规划器发出的原语调用 $c_t$ |
state_NN.json | 带步索引的任务语言、机器人本体感受、基准成功信号 |
| RGB-D / 世界坐标图文件 | 基准特异的感知证据,用于语义识别与度量重接地 |
log_NN.json | 诊断记录:被接受的命令、原语状态、步数计数、可得时的失败信息 |
done_NN.flag 或终止文件 | 同步信号,表示 worker 已完成当前原语 |
| Task Specific Memory 轨迹 | 单任务只追加的 JSONL 过程性记忆,每行一条原语命令 |
| Task Specific Memory 摘要 | JSON 语义记忆,总结结果、策略、恢复决策与失败模式 |
| Global Memory | 跨任务的成功规则与失败模型 |
表 2:文件中介 REPL 使用的文件与制品(论文 Table 7)。这些记录让整段回合可审计,同时不向规划器暴露 oracle 物体坐标。
感知隔离在 prompt 层面被写成了明确的操作规程:智能体从状态文件拿到物体名称和本体感受,但拿不到物体坐标;它必须通过在 RGB 图像上选像素、再索引对应的预计算世界坐标图来定位实体。规程还要求在同一实体可见表面上采样多个稳定像素并取稳健统计量(通常是中位数),避开边缘、桌面缝隙、孔洞、反射和背景像素,并且在机器人、相机、物体、底盘、机构件或抓取状态发生任何变化后重新定位。这条"每个原语调用都是一次实验,结果必须先观察再发下一条命令"的纪律,是重试机制能成立的前提。
七、两类记忆:过程性轨迹与跨任务规则
这是本文与既有 code-as-policies 路线最实质的分歧点。论文在相关工作里点名指出这条文献线上反复出现的两个缺陷:其一,任务特异的执行轨迹很少被表示成可复用的、参数化的记忆,因而无法在新的空间布局下再次接地;其二,失败知识很少被蒸馏进一个 Global Memory,从而无法阻止规划器重复已知的空抓、假成功或不稳定暂存选择。Voyager 证明过持久记忆能改善数字沙盒里的具身智能体,但这种以记忆为中心的设计还没有与 VLA 支撑的富接触原语结合过。本文把两者耦合起来。
Task Specific Memory 存一个已解任务实例的可复用结构,由两部分组成:一个过程性 JSONL 轨迹和一个语义 JSON 摘要。轨迹记录发出了哪些原语调用,摘要记录这个策略为什么有效、以及应该避免什么。论文给出的简化摘要形如:
{"task": "put the black bowl on the wooden tray",
"success": true,
"trace_file": "task_specific_memory_put_black_bowl_on_tray_s0.jsonl",
"strategy": "use VLA for grasping, then analytic transport and release",
"avoid": ["do not reuse reference xyz values",
"verify placement with the benchmark success signal"]}
与之配对的过程性轨迹存原语顺序:
{"action": "vla_act", "prompt": "grasp the black bowl", "max_chunks": 2}
{"action": "move_to", "xyz": [0.12, -0.08, 0.92], "gripper": null}
{"action": "release"}
这里最容易误读的一点是:轨迹是任务级的解法骨架,不是开环轨迹。它记录解析原语与 VLA 原语的次序、VLA 调用的位置、以及富接触执行/搬运/释放/验证之间的转移点。存储轨迹里的空间参数被当作参考场景绑定处理——部署时规划器复用记忆的结构,但从当前观测重新接地物体、机构件、支撑面和目标位姿。"do not reuse reference xyz values" 这条 avoid 规则就是在防止重放坐标。
Global Memory 存与任务无关的原语库操作知识,由两类条目构成。成功规则,例如"对不规则抓取或机构件交互这类富接触阶段使用 VLA 原语;在稳定抓住之后,长距离搬运与精确放置优先用解析运动"。失败模型,例如"如果夹爪闭合但物体没有随末端执行器一起移动,把这次尝试判为空抓,重新定位物体并重新暂存后再重试",以及"不要仅凭视觉接近就终止;检查基准成功信号和最新的执行记录"。
记忆是在交互过程中构建的,而不是只在回合结束后写一次。每执行完一个原语,规划器读取新观测与诊断记录,把结果分类为进展、可恢复失败或不可恢复失败。成功的回合存为 Task Specific Memory;可恢复失败留在轨迹里并在语义摘要中解释,使后续步骤记录这次纠正;失败的尝试也作为负证据保留,并可能向 Global Memory 贡献失败模型。跨多次尝试,记忆是被精炼而非简单累积的——后来的尝试如果给出更短或更可靠的解,可以替换过程性轨迹,而早期的失败观察仍作为对未来规划的约束保留下来。
在源码里,这套记忆机制落在 rpent/memory/manager.py:SCOPES = {"global", "suite"} 定义了 global 与 suite 两个作用域,_split_frontmatter() 强制每个记忆叶子必须带 YAML frontmatter 且 scope 字段合法,MemoryManager 负责叶子的写入、冲突时的新旧元数据比较、以及从 frontmatter 生成索引。Global Memory 对应 global 作用域,Task Specific Memory 挂在 suite 作用域下。
flowchart TD
A["Task language l
RGB-D o_t
proprio q_t"] --> B["Agentic planner Pi"]
M1["Task Specific Memory
JSONL trace + JSON audit"] --> B
M2["Global Memory
success rules + failure models"] --> B
B --> C{"primitive class of c_t in P"}
C -->|"analytic composite"| D["move_to / move_pose
navigate_to"]
C -->|"analytic atomic"| E["rotate_wrist / rotate_pitch
set_gripper / release / move_base"]
C -->|"contact-rich"| F["vla_act
frozen VLA f_theta
action chunks until tau or K"]
D --> G["environment worker"]
E --> G
F --> G
G --> H["observe artifacts
state_NN.json + log_NN.json
RGB-D + world map + done_NN.flag"]
H -->|"progress"| B
H -->|"empty grasp or false success"| I["re-stage with analytic primitives
then retry"]
I --> B
H -->|"predicate G satisfied"| J["write memory
parameterized trace + rules"]
图 3:Harness VLA 的真实执行回路。规划器只输出固定原语库上的 JSON 调用;解析原语承担接地、暂存、搬运、姿态与释放,vla_act 只在富接触阶段被调用;每次原语返回后先观测与诊断,失败按 Global Memory 的失败模型重暂存并重试,成功后把参数化轨迹与规则写回记忆。
八、实验设置与评测协议
评测覆盖四个基准族:桌面套件 LIBERO 与 LIBERO-Pro,家庭与双臂套件 RoboCasa365 与 RoboTwin C2R。所有评测中规划器都在同一套冻结原语词表 $\mathcal{P}$ 上操作,不允许在部署时引入新原语。VLA 原语用基准特异的冻结策略实例化,但保持统一的 vla_act 接口:LIBERO 与 LIBERO-Pro 用 RLinf 发布的 pi05_libero130_fullshot $\pi_{0.5}$-SFT 检查点(记作 $\pi_{\mathrm{RLinf}}$),RoboCasa365 用冻结的 RLDX-1 RoboCasa 检查点,RoboTwin C2R 用作者后训练的 LingBot-VLA 检查点。
| 基准 | 任务数 | 每任务试验数 | 报告回合数 | 协议 |
|---|---|---|---|---|
| LIBERO | 40 | 10 | 400 | 种子 $s_0$ 仅用于构建记忆,评测用留出种子 $s_1$–$s_{10}$ |
| LIBERO-Pro | 80 | 10 | 800 | 8 个 cell(4 任务族 × T/S 两种扰动),同上少样本协议 |
| RoboCasa365 | 50 | 10 / 5 / 5 | 340 | Atomic-Seen 18×10、Composite-Seen 16×5、Composite-Unseen 16×5 |
| RoboTwin C2R | 50 | 5 | 250 | 零样本 clean→randomized:轨迹取自 demo_clean,直接在 demo_randomized 评测 |
表 3:评测协议汇总(论文 Table 9–13)。LIBERO-Pro 的 T 指指令重定向(instruction redirection),S 指位置交换(position swap);RoboCasa365 的 seen/unseen 指任务模板是否出现在预训练集里,而非具体回合或场景是否被观察过。
RoboTwin C2R 的协议尤其严格:每个任务的 Task Specific Memory 轨迹从 demo_clean 设定下一个官方脚本专家验证过的种子获得,然后直接在官方 demo_randomized 设定的五个随机化种子上评测,不做任何额外的轨迹搜索、微调或任务级适配。专家验证只用于确保采样的任务实例在官方任务定义下可行,与方法本身无关,也不用 Harness VLA 的回合并选择种子。
九、主结果:扰动越大,harness 的增益越明显
标准 LIBERO。Harness VLA (CC) 拿到 96.0% 的总成功率(384/400),其中 Object 套件 100.0%、LIBERO-10 93.0%。与 vla_act 内部所用的同一个冻结 $\pi_{\mathrm{RLinf}}$ 检查点直接评测的 95.3% 相比,harness 在标准套件上保持了有竞争力的表现,同时把同一个策略通过可控的原语接口暴露出来,供后面的扰动评测使用。
| 方法 | Spatial | Object | Goal | LIBERO-10 | Overall |
|---|---|---|---|---|---|
| OpenVLA | 84.7 | 88.4 | 79.2 | 53.7 | 76.5 |
| NORA | 85.6 | 89.4 | 80.0 | 63.0 | 79.5 |
| $\pi_0$ | 96.8 | 98.8 | 95.8 | 85.2 | 94.2 |
| $\pi_{\mathrm{RLinf}}$(冻结直评) | 99.0 | 96.0 | 97.0 | 89.0 | 95.3 |
| AtomVLA | 96.4 | 99.6 | 97.6 | 94.4 | 97.0 |
| Harness VLA (CC) | 97.0 | 100.0 | 94.0 | 93.0 | 96.0 |
表 4:标准 LIBERO 成功率(%,论文 Table 2)。$\pi_{\mathrm{RLinf}}$ 与 Harness VLA (CC) 均由作者在每套件 100 次试验(10 任务 × 10 种子)上评测,二者 vla_act 内部用的是同一个 RLinf 发布的 $\pi_{0.5}$-SFT 检查点。
LIBERO-Pro。这是本文的头条结果。现有端到端 VLA 在这两类分布偏移下急剧退化:OpenVLA 与 NORA 在全部八个 cell 上都是 0.0,$\pi_0$ 总体 0.3,$\pi_{0.5}$ 11.0,MolmoAct 1.5,X-VLA 3.8,AtomVLA 6.3。已报告的最强先验基线 RATS 在它报告的六个 cell 上是 43.8%。Harness VLA 用 Codex 达到 72.1%、用 CC 达到 82.4%,在头条对比中比 RATS 高 38.6 个百分点。而直接评测的 $\pi_{\mathrm{RLinf}}$ 基线在同一协议下是 50.0%——这说明增益并非仅仅来自冻结的 VLA 骨干,harness 本身贡献了 32.4 个百分点。
| 方法 | Spat-T | Spat-S | Obj-T | Obj-S | Goal-T | Goal-S | L10-T | L10-S | Overall |
|---|---|---|---|---|---|---|---|---|---|
| OpenVLA | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| $\pi_0$ | 0.0 | 0.0 | 0.0 | 2.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.3 |
| $\pi_{0.5}$ | 1.0 | 20.0 | 1.0 | 17.0 | 2.0 | 38.0 | 1.0 | 8.0 | 11.0 |
| MolmoAct | 0.0 | 0.0 | 0.0 | 6.0 | 0.0 | 0.0 | 6.0 | 0.0 | 1.5 |
| X-VLA | 0.0 | 0.0 | 8.0 | 2.0 | 9.0 | 1.0 | 10.0 | 0.0 | 3.8 |
| AtomVLA | 1.0 | 16.0 | 0.0 | 10.0 | 11.0 | 2.0 | 9.0 | 1.0 | 6.3 |
| Cap-X | 14.0 | 12.0 | 18.0 | 22.0 | 17.0 | 26.0 | / | / | 18.2 |
| RATS | 31.0 | 29.0 | 63.0 | 61.0 | 36.0 | 43.0 | / | / | 43.8 |
| $\pi_{\mathrm{RLinf}}$(冻结直评) | 42.0 | 59.0 | 71.0 | 78.0 | 45.0 | 42.0 | 49.0 | 14.0 | 50.0 |
| Harness VLA (Codex) | 81.0 | 69.0 | 94.0 | 91.0 | 75.0 | 66.0 | 52.0 | 49.0 | 72.1 |
| Harness VLA (CC) | 94.0 | 80.0 | 88.0 | 90.0 | 87.0 | 87.0 | 71.0 | 62.0 | 82.4 |
表 5:LIBERO-Pro 成功率(%,论文 Table 3)。每 cell 聚合 100 次试验(10 任务 × 10 种子),"/" 表示不可得或未报告。Cap-X 与 RATS 只报告六个非 LIBERO-10 cell,其 overall 仅对已报告 cell 取平均。T = 指令重定向,S = 位置交换。
从 $\pi_{\mathrm{RLinf}}$ 到 Harness VLA (CC) 的逐 cell 提升幅度并不均匀:Goal-S 从 42.0 涨到 87.0(+45.0),L10-S 从 14.0 涨到 62.0(+48.0),Spatial-T 从 42.0 涨到 94.0(+52.0),而 Obj-S 只从 78.0 涨到 90.0(+12.0)。规律很清楚:冻结 VLA 掉得越狠的地方,harness 补得越多。Obj-S 本来就是 $\pi_{\mathrm{RLinf}}$ 表现最好的 cell,提升空间有限;而长时程组合(L10-S)与目标重绑定加位置交换(Goal-S)正是单体策略崩溃的位置。
RoboCasa365。评测从桌面操作扩展到带移动暂存、铰接机构件和更长复合例程的家庭厨房任务。RLDX-1 直评总体 30.0%,Harness VLA 用 Codex 达到 57.1%、用 CC 达到 48.6%,Codex 实例因此比 RLDX-1 高 27.1 个百分点。分档看,Atomic-Seen 从 60.0 提到 92.0,Composite-Seen 从 21.3 提到 61.0,Composite-Unseen 从 5.0 提到 13.8——复合任务是主要增益来源,这与"规划器负责导航、暂存和局部失败后的重暂存,冻结 VLA 保持为局部富接触原语"的分解意图一致。
| 方法 | Atomic-Seen | Composite-Seen | Composite-Unseen | Overall |
|---|---|---|---|---|
| $\pi_0$ | 34.6 | 6.1 | 1.1 | 14.8 |
| $\pi_{0.5}$ | 39.6 | 7.1 | 1.2 | 16.9 |
| RLDX-1(冻结直评) | 60.0 | 21.3 | 5.0 | 30.0 |
| WorldDreamer | 66.3 | 26.7 | 9.0 | 35.3 |
| Harness VLA (CC) | 79.4 | 47.5 | 15.0 | 48.6 |
| Harness VLA (Codex) | 92.0 | 61.0 | 13.8 | 57.1 |
表 6:RoboCasa365 成功率(%,论文 Table 4)。Harness VLA 只用一个参考种子做引导;报告评测在 Atomic-Seen 上用十个留出种子、在两个 Composite 分档上各用五个留出种子。
RoboTwin C2R。零样本 clean-to-randomized 迁移上,直接评测的 LingBot-VLA 达到 50.4%,Harness VLA 把同一个冻结后端提到 Codex 58.0%、CC 58.4%;外部基线 GR00T-N1.7 为 20.7%、$\pi_{0.5}$ 为 47.9%、StarVLA 为 10.6%。这里的绝对增益(+8.0 个百分点)比 LIBERO-Pro 小得多,原因也合理:双臂交接类任务的终态本身就落在富接触阶段,解析原语能接管的部分更少——这一点在下面的完成归因数据里会被直接证实。
十、零样本对照:记忆到底贡献了什么
为了把在线规划器推理与引导得到的 harness 记忆分离开,作者在严格的零样本设定下评测 LIBERO-Pro Goal:智能体不检索目标设定的 Task Specific Memory,也不检索对应的 Global Memory。
| 设定 | 方法 | Task 0 | Task 1 | Task 2 | Task 3 | Task 4 | Task 5 | Task 6 | Task 7 | Task 8 | Task 9 | 平均 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pos (S) | Cap-X | 0.0 | 4.0 | 0.0 | 36.0 | 22.0 | 60.0 | 4.0 | 2.0 | 62.0 | 66.0 | 25.6 |
| Pos (S) | Harness VLA (CC) 零样本 | 0.0 | 10.0 | 0.0 | 20.0 | 90.0 | 0.0 | 10.0 | 80.0 | 100.0 | 0.0 | 31.0 |
| Task (T) | Cap-X | 0.0 | 0.0 | 10.0 | 38.0 | 12.0 | 4.0 | 34.0 | 12.0 | 40.0 | 18.0 | 16.8 |
| Task (T) | Harness VLA (CC) 零样本 | 10.0 | 100.0 | 90.0 | 100.0 | 20.0 | 80.0 | 90.0 | 100.0 | 100.0 | 100.0 | 79.0 |
表 7:LIBERO-Pro Goal 逐任务成功率(%,论文 Table 5)。零样本 Harness VLA (CC) 不检索 Task Specific Memory,每任务 10 个种子;Pos = 位置交换(S),Task = 指令重定向(T)。
与表 5 里的少样本 Goal cell 对照,记忆的贡献被精确地量化出来了。没有记忆时,规划器在指令重定向下保留了大部分语义重绑定能力:Goal-T 零样本 79.0% 对少样本 87.0%,只差 8 个百分点。但在位置交换下大幅下滑:Goal-S 零样本 31.0% 对少样本 87.0%,差 56 个百分点。
这个非对称是全文最有信息量的一个数字。它说明:语义重接地主要靠规划器的在线多模态推理能力,不需要任务特异记忆就能做;而空间扰动下的操作强烈依赖探索阶段发现的任务特异原语组织——解析原语在富接触阶段周围提供定位、暂存、搬运和释放,vla_act 在学到的交互点被调用并能在失败后重暂存。逐任务看,零样本 Pos(S) 的方差极大(Task 8 拿到 100.0 而 Task 1/2/5/9 是 0.0),这种"全有或全无"的分布正是缺乏稳定暂存骨架的表现。
十一、三个机制发现
发现一:规划器级语义重接地恢复了任务条件行为。表 5 里 Harness VLA 与端到端 VLA 之间的巨大差距,是在完全不改动视觉运动骨干的情况下取得的。$\pi_{\mathrm{RLinf}}$ 本来就能解这些任务的标准变体,但它的行为对任务描述和当前场景绑定的条件化很弱。Harness VLA 把语义接地显式地放到规划器层:规划器解析任务描述、从实时 RGB-D 观测解析出当前接触目标、用解析原语做暂存与重定位,并只在局部富接触阶段调用或重新调用 vla_act。语义与场景级推理归规划器,冻结 VLA 只负责在规划器提供的绑定下执行富接触操作。
图 4(论文 Figure 3 第一组第一帧):$\pi_{\mathrm{RLinf}}$ 在标准 Object 任务上的终态——任务被正确完成。
图 5(论文 Figure 3 第一组第二帧):同一个 $\pi_{\mathrm{RLinf}}$ 在任务扰动的 Object-Pro 变体上的终态。视觉场景与上图相似而指令已重定向目标,策略却重复了标准行为而没有跟随新指令。
图 6(论文 Figure 3 第一组第三帧):Harness VLA 在同一个扰动任务上的终态。规划器重新解析指令、重绑定目标,解析原语完成暂存,vla_act 只做局部富接触操作。
图 7(论文 Figure 3 第二组第三帧):位置交换扰动的 Goal-Pro 任务上 Harness VLA 的终态。同组的 $\pi_{\mathrm{RLinf}}$ 在布局变化后仍盲目把物体推向训练时区域,Harness VLA 则通过规划器重接地目标。
发现二:规划器暂存的 VLA 调用提升了冻结策略的可靠性。机制拆成两半。其一,暂存恢复了一个 VLA 兼容的局部状态:在语义重定向和空间布局偏移这类部署扰动下,原本 VLA 的视角或预接触位姿可能不再以熟悉的构型暴露正确的接触目标;规划器围绕当前场景重新暂存机器人,把目标带回一个 VLA 兼容的局部观测,同时保持正确的语义绑定。这解释了为什么 harness 能在不改参数的前提下改进一个冻结 VLA——它学的是 VLA 应该从哪里开始动作,而不是要求策略自己吸收整个分布偏移。其二,重试把接触失败局部化:VLA 执行是随机的、短时程接触在物理上是脆的,单次失败尝试不必终止整个回合;规划器观察到不完整或不稳定的结果后重新暂存机器人并重新调用 vla_act,而不让一次瞬时失败在单体长时程策略里传播下去。所以重复的 VLA 调用不是连续底层控制,而是稀疏的、规划器选定的尝试,让富接触执行变得可恢复。
图 8(论文 Figure 4a):LIBERO-Pro 上,累计任务成功作为每回合允许的最大 VLA 原语调用次数的函数。蓝色虚线是对应的冻结策略基线,灰色虚线是允许全部规划器选定调用时的完整 Harness VLA 性能。
图 9(论文 Figure 4b):RoboCasa365 上的同一分析。厨房任务的曲线在更多调用次数上继续爬升,反映移动暂存与更长复合例程对重试的需求。
图 10(论文 Figure 4c):RoboTwin C2R 上的同一分析。三个基准的共同形态是:最初几次 VLA 调用之后成功率快速上升,随后向完整 harness 结果饱和——重复的规划器暂存调用有用,但整体仍然是稀疏的。
发现三:解析原语把非接触执行与富接触控制隔离开。解析原语并不在富接触操作上替代 VLA,它们处理任务周围的非接触结构:自由空间搬运、预接触暂存、腕部或底盘重定向、后退、以及接触后重定位。这让规划器可以把 vla_act 留给真正需要学习型视觉运动控制的局部富接触阶段。一旦机器人与目标建立了稳定接触,规划器就能用解析原语把机器人移动、旋转或导航到下一个相关区域,并在下一个富接触阶段开始时再次调用 VLA。所以解析词表本身并不解富接触操作,它扩展了同一个冻结 VLA 可被复用的条件范围。
图 11(论文 Figure 6):跨基准的任务完成归因。柱状图给出成功回合中,最终基准完成谓词在一个解析原语之后触发(蓝)还是在一个 VLA 原语之后触发(橙)的比例。LIBERO-Pro 族任务大多在 VLA 建立稳定接触之后由解析原语收尾,而 RoboCasa365 与 RoboTwin C2R 含有更多终态富接触操作,如机构件操作、受限放置或双臂物体交互。
完成归因这张图把三个基准之间的增益差异解释得很干净:LIBERO-Pro 的成功回合大多以解析搬运、释放或重定位收尾,所以解析词表能接管的部分最大、harness 增益也最大;RoboCasa365 与 RoboTwin C2R 的终态谓词更常直接依赖一次富接触操作,成功回合更频繁地在 VLA 原语内部结束,可让渡给解析控制的比例自然更小。这也正是 RoboTwin 上 +8.0 个百分点与 LIBERO-Pro 上 +38.6 个百分点之间量级差异的机制解释。
十二、原语调用统计:VLA 只占少数
附录 F 给出了 Harness VLA (CC) 在三个基准上发出的全部操作原语调用的规范化统计:所有后端特异的 VLA 调用被合并进统一的 vla_act,实现层的运动宏被折叠进其暴露的解析原语,渲染、重置、笔记、空操作这类非操作辅助被排除。
| 规范化原语 | 类别 | LIBERO | RoboTwin C2R | RoboCasa365 |
|---|---|---|---|---|
move_to | 解析组合 | 6263(61.8%) | 685(40.9%) | 3004(38.7%) |
move_pose | 解析组合 | 203(2.0%) | — | — |
navigate_to | 解析组合 | — | — | 701(9.0%) |
rotate_wrist | 解析原子 | 44(0.4%) | 1(0.1%) | — |
rotate_pitch | 解析原子 | 58(0.6%) | — | 66(0.8%) |
set_gripper | 解析原子 | 1137(11.2%) | 71(4.2%) | 371(4.8%) |
release | 解析原子 | 831(8.2%) | 124(7.4%) | 76(1.0%) |
move_base | 解析原子 | — | — | 808(10.4%) |
vla_act | VLA | 1598(15.8%) | 794(47.4%) | 2746(35.3%) |
| 总计 | 10134 | 1675 | 7772 | |
| 解析原语合计 | 类级 | 8536(84.2%) | 881(52.6%) | 5026(64.7%) |
表 8:跨基准的规范化原语使用统计(论文 Table 18 与 Table 19)。每格给出该环境内操作原语调用的计数与占比,"—" 表示该原语在对应环境中未暴露。
用 VLA 调用占比 $\rho_{\text{vla}}$ 来看这三个环境的差异:
$$\rho_{\text{vla}}=\frac{N_{\texttt{vla\_act}}}{N_{\text{total}}}:\quad \frac{1598}{10134}=15.8\%\ (\text{LIBERO}),\quad \frac{794}{1675}=47.4\%\ (\text{RoboTwin}),\quad \frac{2746}{7772}=35.3\%\ (\text{RoboCasa})$$
使用模式支持了预期的非对称分解。LIBERO 里解析原语占绝对主导,仅 move_to 一项就占 61.8% 的调用,vla_act 只占 15.8%——这与任务的桌面结构相符:VLA 主要用来建立富接触的抓取或机构交互,之后的解析搬运、夹爪控制和释放完成了回合的大部分。RoboCasa365 把混合比推向移动暂存与更长时程交互:navigate_to 与 move_base 合计占 19.4%,vla_act 升到 35.3%,因为厨房任务需要在更大场景里做学习型抓取、机构操作和受限放置。RoboTwin C2R 的 VLA 占比最高(47.4%),反映双臂抓取与交接式接触,但解析原语仍然以 52.6% 提供了多数调用,用于规划好的手臂运动、释放和最终排列。
跨三个本体,冻结 VLA 都没有被当作单体端到端控制器使用,而是作为一个更大解析脚手架内部的富接触原语被调用。确切比例随本体和任务族变化,但定性分工是稳定的:解析原语处理可复现的几何与暂存,vla_act 提供难以脚本化的学习型局部交互。
十三、三个 VLA 后端与统一抽象
$\pi_{\mathrm{RLinf}}$ 沿用 $\pi_{0.5}$ 架构,把视觉观测 $I_t$、语言指令 $\ell$ 和机器人状态 $q_t$ 编码进统一的 transformer 表示,从预训练视觉语言骨干初始化并通过监督学习对齐到机器人动作空间。它采用 $\pi_{0.5}$ 引入的两阶段推理:先预测高层子任务 $\hat{\ell}$(如 "pick up the plate"),再用它条件化低层动作生成;低层策略产出连续动作块 $a_{t:t+H}$,通过 FAST 分词或基于流的连续建模表示。模型在 LIBERO-130 数据集上按 $\pi_{0.5}$ 训练协议做监督微调,本文不做任何额外训练或适配,全程冻结。它在标准 LIBERO 上 95.3%,在 LIBERO-Pro 上掉到 50.0%。
RLDX-1 以多流动作 Transformer(MSAT)为核心动作建模架构,先用基于 Qwen3-VL 8B 的视觉语言模型编码多帧视频观测与语言指令、经由 cognition token 抽取动作相关表示,再用一个记忆模块聚合历史 cognition 特征产生历史感知表示;动作模型建立在 MSAT 上,把 cognition 流与 action 流解耦,并在有物理信号时引入 physics 流,三流通过跨流自注意力联合建模。训练用流匹配扩散 Transformer 做连续动作预测,学习一个把含噪动作轨迹映射到干净动作序列的速度场,推理时按块产出动作并顺序执行部分块以实现稳定闭环控制。RoboCasa365 上直评:Atomic-Seen 60.0%、Composite-Seen 21.3%、Composite-Unseen 5.0%、总体 30.0%。
LingBot-VLA 建立在预训练的 Qwen2.5-VL 视觉语言骨干上,用 Mixture-of-Transformers(MoT)架构把视觉语言推理与动作生成分到专门的 transformer 通路,两条通路通过共享自注意力耦合,在统一多模态序列建模的同时缓解跨模态干扰;另引入一个动作专家模块,在多模态嵌入条件下预测连续控制信号。动作建模用流匹配做连续预测,并采用分块动作解码:一次前向自回归地预测一个定长动作序列,块长设为 $T=50$。它先在跨 9 种机器人本体的大规模真实双臂遥操作数据上预训练,再在 RoboTwin 操作轨迹上做监督微调以专精双臂操作,后训练完成后在直评与 Harness VLA 评测中都保持冻结。
| 后训练配置项 | 取值 |
|---|---|
| 优化器 / 学习率 | AdamW / $1\times 10^{-4}$(视觉编码器 $1\times 10^{-6}$) |
| 权重衰减 / 损失 | 0 / L1 Flow Matching(L1_FM) |
| 块长 / 最大序列长度 | $T=50$ / 2048 |
| 流步数 / 最大动作与状态维度 | 10 / 75 / 75 |
| 全局批大小 / 图像分辨率 | 256 / $224\times 224$ |
| 相机视角 | top + wrist left + wrist right |
| 精度 / 分布式 | 混合精度(bf16/fp32) / FSDP2 |
表 9:LingBot-VLA 在 RoboTwin 上的后训练配置(论文 Table 14)。该配置对应本文报告的全部 LingBot-VLA 后训练实验。
统一抽象是这套设计能跨基准成立的原因:异质的 VLA 模型被抽象成可互换的富接触执行原语,LLM 规划器负责语义接地、空间分解与长时程任务规划,而每个 VLA 只在与当前观测条件下的局部交互执行中被调用。换基准等于换 vla_act 的后端,harness、记忆接口、原语名与评测协议都不动。
十四、局限性
其一(作者自述):高层规划器与低层 VLA 之间是开环反馈。当前框架里 vla_act 返回给规划器的是原语状态与诊断记录,而不是可微或结构化的接触反馈;规划器只能通过重新观测场景来判断这次接触成功与否。这意味着失败检测依赖视觉与本体感受的事后判读,Global Memory 里那条"夹爪闭合但物体没跟着动就判空抓"的规则本质上是对开环的一种补丁,而不是一条真正的闭环反馈通道。
其二(作者自述):缺乏经由环境奖励与人类偏好的联合微调。VLA 全程冻结固然让"不改参数也能扩展"这个主张干净,但也意味着 harness 学到的调度知识完全没有回流到策略权重里。作者指出这需要未来的样本高效强化学习(例如 GRPO)来解决。
其三(作者自述):缺少细粒度图像描述,限制了高度杂乱、长时程任务中的结构化推理。感知通道目前是"RGB 选像素 + 索引世界坐标图 + 取中位数",这套度量接地在物体稀疏时够用,但在严重遮挡和杂乱堆叠下没有细粒度的语义描述支撑。
其四(笔者补充):全部评测都在仿真里。LIBERO、LIBERO-Pro、RoboCasa365、RoboTwin C2R 四个基准族都是 MuJoCo/Robosuite 系的仿真环境,论文没有任何真机结果。harness 的两个核心机制都强依赖仿真的可复现性:文件中介 REPL 的同步假设(done_NN.flag 一到就能读到一致的 state_NN.json)、以及解析原语"世界坐标笛卡尔目标 + 内嵌求解器"的可达性保证。真机上这两条都要面对传感延迟、标定误差与求解失败,重试次数与回合时长会明显膨胀——而 LIBERO 上单回合平均已经发出 $10134/400\approx 25$ 次原语调用,这个成本在真机上是否可接受,论文没有回答。
其五(笔者补充):少样本协议的引导成本没有被计入对比。表 3 显示每个任务都要先用种子 $s_0$ 跑一轮探索来构建 Task Specific Memory,而这轮探索的墙钟预算被描述为"宽松",reset 还可无限使用。基线方法没有这个阶段。虽然 RoboTwin C2R 的零样本设定和 LIBERO-Pro Goal 的零样本对照部分回应了这个疑虑(后者显示位置交换下从 31.0 掉到 87.0 的差距恰恰来自引导记忆),但引导阶段本身的成本——每任务需要多少次尝试、多少墙钟时间、多少次 reset——论文没有给出数字。
其六(笔者补充):Codex 与 CC 的排序在基准之间翻转,说明结果对规划器骨干敏感。LIBERO-Pro 上 CC(82.4)明显优于 Codex(72.1),RoboCasa365 上却是 Codex(57.1)优于 CC(48.6),RoboTwin C2R 上两者几乎打平(58.0 / 58.4)。作者把机制分析统一用 CC 作代表实例,理由是两者共享同一套 harness 与协议、只有骨干不同;但 10 个百分点量级的骨干间差异说明"用哪个 LLM 当规划器"仍然是一个需要逐基准调的实践问题,而不是一个已经解决的工程细节。
十五、总结与展望
Harness VLA 提出的是一个非对称的层级框架:把冻结 VLA 装进 LLM 驱动智能体内部的一个富接触原语接口,把搬运、姿态、导航和释放阶段委派给规划器。从 agent harness 工程的角度看,它的结论是——可靠的操作不只来自训练一个更强的策略,也来自在一个冻结策略周围套上可审计的执行循环、固定的原语契约、记忆、反馈和任务级验证。跨标准与重度扰动基准的评测支持这个判断:预训练 VLA 在被隔离到富接触视觉运动控制时最有效,把语义与空间绑定从 VLA 上抽走,可以避免单体部署中常见的灾难性失败。
把全文的数字串起来看,主张的强度是有层次的。头条的 38.6 与 27.1 个百分点是相对已报告的最强基线;相对同一个冻结后端的直评,LIBERO-Pro 上是 50.0 → 82.4(+32.4)、RoboCasa365 上是 30.0 → 57.1(+27.1)、RoboTwin C2R 上是 50.4 → 58.4(+8.0)。后者是更严格也更可信的对照,因为它把 VLA 骨干的能力完全扣掉了。而标准 LIBERO 上 95.3 → 96.0 的几乎持平,恰好说明 harness 不是靠牺牲分布内性能换鲁棒性。
作者指出的互补未来方向是把这套固定词表的组合策略与 ASPIRE 那类自动技能发现系统结合:当重复出现的原语组合暴露出某个缺失的抽象时,智能体可以提出、验证并接纳一个新的可复用技能,同时保留可审计的原语接口与 VLA 支撑的接触专精。这条路如果走通,"固定词表"与"生长词表"两条路线的分歧就会变成一个连续谱:harness 决定何时该长出新原语,而不是让技能库无约束地膨胀。
金句
"Rather than expanding the skill library, the harness learns the operating range of these fixed primitives."
——不是去扩大技能库,而是让 harness 学会这些固定原语的工作范围。
"It learns where the VLA should begin acting, rather than asking the policy to absorb the full distribution shift by itself."
——它学的是 VLA 应该从哪里开始动作,而不是要求策略自己吸收整个分布偏移。



