PAPER DEEP DIVE
几句话有大用:语言引导的机器人策略合成
研究语言引导的机器人策略合成,证明少量语言指令即可显著提升机器人策略的泛化与组合能力。
1. 论文概览:把机器人策略获取当作交互式程序合成
ARCHITECT(Agentic Robot Code-generation via HiTL Editing and Correction Tools)由华盛顿大学、微软研究院与 MIT 团队于 2026 年 7 月提出,是一个将机器人策略获取视为交互式程序合成任务的框架。它不训练端到端黑箱策略,而是利用 LLM 编码代理的推理能力,合成调用一组感知与控制工具的模块化机器人程序。当策略失败时,人类主管用自然语言给出修正,这些修正被程序执行迹(execution trace)锚定到策略代码中,并蒸馏进一个持久化的技能库——一种长期上下文学习机制,使代理能积累可复用、可解释的行为 repertoire。在 Franka Panda 机器人的 8 项复杂长时序任务(含铰接物体操作与布料折叠)上,ARCHITECT 超越了 VLA 模型 $\pi_0$、$\pi_{0.5}$ 和 Code as Policies 基线。
总览图展示了 ARCHITECT 的核心管线:自然语言指令输入 → LLM 生成策略代码 → 代码调用控制/感知/本体感受工具执行 → 失败或回合结束后人类给出修正 → 修正被合成为技能存入库 → 下次生成时加载全部技能历史。这种"闭环 + 持久记忆"的设计,是区别于一次性开环合成的关键。
2. 核心问题:VLA 黑箱为何难以纠正
论文开篇直击 VLA(视觉-语言-动作)模型的根本痛点:它们虽展现了令人印象深刻的零样本操作能力,但本质上是黑箱策略——难以解释、难以适应、失败时难以纠正。分布偏移会导致不可预测的级联失败,而用户无法在所需的抽象层级上隔离故障并局部化反馈。相比之下,模块化架构允许用户隔离失败、在所需抽象层级上定位反馈。ARCHITECT 正是要回答:能否用 LLM 的代码推理能力,构建一个既可解释又可通过稀疏人类修正持续进化的机器人策略。
六维对比图沿可解释性、可纠正性、数据效率、分布鲁棒性、任务复杂度、人机协同六个轴,将 ARCHITECT 与 Code as Policies 和 VLA 模型进行了定位。ARCHITECT 在可解释性与可纠正性轴上显著领先,代价是需要人类在环参与。
3. 方法:语言引导的策略合成
3.1 问题设定与总览
ARCHITECT 使用预训练 LLM 生成机器人策略代码,将用户输入的自然语言任务指令映射到能控制运动、响应感知输入、查询本体感受状态的机器人原语。LLM 自回归地生成函数,直到合成的代码满足指令。机器人的动作空间由控制原语决定,而代理层的动作空间由可发起的工具调用决定。
3.2 语言引导的策略合成流程
策略合成以单一输入初始化:描述任务的自然语言指令。该指令被解析并嵌入系统提示,调用 LLM 生成代码。策略代码通过一组控制与感知原语、以及 VQA(视觉问答)、本体感受、CLI 命令等工具与场景锚定。检测到失败或回合结束后,人类被询问修正。形式化地,设任务指令为 $c$,已积累技能库为 $\mathcal{S}=\{s_1,\dots,s_n\}$,执行迹为 $\mathcal{T}$,则第 $k$ 轮策略合成可表示为:
$$\pi_k = \mathrm{LLM}(c \,\|\, \mathcal{S}_k \,\|\, \mathcal{T}_{k-1} \,\|\, \mathrm{Tools})$$其中 $\mathcal{T}_{k-1}$ 是前序迭代的执行迹,$\mathrm{Tools}$ 是可用工具集的描述。人类修正 $f_k$ 在检测到失败后被采集,并被合成为新技能 $s_{k+1}=\mathrm{Distill}(f_k, \mathcal{T}_k)$ 存入技能库,使 $\mathcal{S}_{k+1}=\mathcal{S}_k \cup \{s_{k+1}\}$。
3.3 技能库与记忆:让修正不再是一次性的
人在环机器人学习的一个挑战是确保修正不是临时的。在许多现有方法中,修正被消费一次以更新策略后即被丢弃,要求人类跨会话重新纠正类似失败。技能库通过提供积累、保留与复用知识的结构化机制来解决这一问题。当人类在执行期间提供语言修正时,ARCHITECT 将其合成为技能:一条简洁的自然语言规则或代码模式,编码该调整。该技能被加入技能库——一个随交互增长的持久集合。每次后续代码生成步骤前,库中所有技能连同当前任务指令与前序迭代执行迹被载入代理上下文。这意味着模型在合成新策略时可访问学到的全部修正历史,从而避免已识别的失败模式而无需重新纠正。
3.4 工具套件:控制、感知与本体感受
工具主要由机器人控制、本体感受与感知模块组成。它们被定义为简单且通用的,以不要求任务特定假设,从而可组合灵活多样的任务逻辑。函数以自然语言输入参数化,以将语言修正锚定到可行行为。控制工具基于 cuRobo 实现运动生成,处理轨迹可达性、逆运动学与碰撞约束。感知工具包括 VQA 等;本体感受工具读取机器人状态;CLI 工具读取可用技能。这些原语共同构成完整工具集,使机器人具备通过自然语言参数化的高层推理能力。设工具集为:
$$\mathrm{Tools} = \mathrm{Control} \cup \mathrm{Perception} \cup \mathrm{Proprioception} \cup \mathrm{CLI}$$其中 $\mathrm{Control}$ 含运动规划与抓取采样,$\mathrm{Perception}$ 含 VQA 与物体定位,$\mathrm{Proprioception}$ 含关节状态读取,$\mathrm{CLI}$ 含技能库查询。
4. 实验设置
4.1 硬件与配置
实验在 Franka Panda 机械臂上进行,配置为广泛采用的 DROID 设置。机器人配备 Robotiq 2F-85 夹爪、腕部 ZED-mini 立体相机,以及场景相机 ZED 2i。ARCHITECT 使用 Claude Opus 4.6 大语言模型作为编排器。控制原语用 cuRobo 实现运动生成,处理轨迹可达性、逆运动学与碰撞约束。
4.2 任务套件
在 8 项挑战性任务上评估,分别需要多步推理、非抓取式操作、与可变形或铰接物体交互。
4.3 评估协议与指标
基线包括 Code as Policies(CaP)、$\pi_0$ 与 $\pi_{0.5}$ VLA 模型,以及消融 ARCHITECT-VLM(用自动 VLM 生成修正替代人类修正)。ARCHITECT 需要反馈来填充技能库,故最多进行 5 次带专家修正的 rollout,评估最终策略。每项任务 $N=10$ 回合,共 400 次 rollout。三项指标:成功率($SR$)为回合末目标是否达成的二值分数;目标条件召回率($GCR$)定义为:
$$GCR = \frac{\#\text{ of goal conditions satisfied}}{\text{total } \#\text{ of goal conditions required}}$$归一化任务推进($NTP$)为按有序任务准则成功的任务阶段分数除以步数:
$$NTP = \frac{\#\text{ of succeeded stages}}{\#\text{ of total stages}}, \qquad NTP \in [0,1]$$$GCR$ 擅长捕捉部分成功,$NTP$ 反映阶段性进展。综合三指标可避免 $SR$ 单一二值掩盖的部分成功信号。
设任务有 $M$ 个有序阶段,策略在第 $i$ 阶段成功指示为 $\mathbb{1}_i \in \{0,1\}$,则任务推进可表示为:
$$NTP = \frac{1}{M} \sum_{i=1}^{M} \mathbb{1}_i, \qquad SR = \prod_{i=1}^{M} \mathbb{1}_i$$可见 $SR$ 仅在全部阶段成功时为 1,而 $NTP$ 与 $GCR$ 能保留中间成功信号。
5. 结果:模块化 + 人在环全面胜出
5.1 主结果:超越 VLA 与程序合成基线
表 1 比较了 ARCHITECT-HiTL 与 CaP、$\pi_0$、$\pi_{0.5}$ 及 ARCHITECT-VLM 消融。8 项任务按挑战类型分组:
| 任务(挑战类型) | CaP SR | $\pi_0$ SR | $\pi_{0.5}$ SR | ARCHITECT-VLM SR | ARCHITECT-HiTL SR |
|---|---|---|---|---|---|
| Banana→plate (Pick-Place) | .20 | .80 | .90 | .80 | .80 |
| Block→basket (Pick-Place) | .40 | .40 | 1.0 | .70 | .70 |
| Baseball→bucket (Pick-Place) | .60 | .00 | .20 | .40 | 1.0 |
| Apple,Bread→bowl (Multi) | .10 | .40 | .40 | .00 | .80 |
| Pick bread from box (Clutter) | .10 | .40 | .40 | .00 | .70 |
| Close drawer (Articulated) | .00 | .10 | .00 | .40 | .90 |
| Fold cloth (Deformable) | .00 | .00 | .00 | .70 | .80 |
| Banana under cloth (Long Horizon) | .00 | .10 | .00 | .00 | .80 |
关键发现:$\pi_0$ 与 $\pi_{0.5}$ 在非抓取放置类任务上成功率极低(铰接、可变形、长时序任务多为 0);CaP 除抓取放置外难以完成其他任务;ARCHITECT 在 Close drawer(.90)、Fold cloth(.80)、Banana under cloth(.80)等高复杂度任务上大幅领先。此外 $\pi_0$/$\pi_{0.5}$ 表现因语言指令措辞波动而高方差,ARCHITECT 则对措辞鲁棒。
5.2 技能库摊销人类 effort
设 $Q_{\mathrm{empty}}$ 与 $Q_{\mathrm{lib}}$ 分别为空库与已填充库下每试验平均人类查询数,摊销效益定义为:
$$\Delta Q = Q_{\mathrm{empty}} - Q_{\mathrm{lib}} = 4.67 - 0.83 = 3.83, \quad p = 0.036$$比较空库 vs 已填充库(来自每位参与者前一任务会话)的 ARCHITECT:平均每试验查询数从 4.67 降至 0.83($\Delta=3.83$,$p=0.036$),6 名参与者中 3 名需 0 次修正。VLA 需额外示教才能专化到新任务,无机制在部署期纳入自由格式修正;CaP 每次指令从头合成,不跨任务摊销。ARCHITECT 则在不同任务指令下撰写的技能零成本复用,驱动了人类查询数的下降。
5.3 跨场景迁移
人类评估隔离了技能库在无 HiTL 支持时的价值。无技能时,无参与者在任务 2 成功($SR=0/6$)。载入任务 1 技能库但无进一步修正循环时,$SR$ 升至 4/6,4/6 参与者可见 $\Delta$,其余 2/6 持平于 0。成功与前任务 HiTL effort 相关:仅给 1 次任务 1 修正的三名参与者中两名任务 2 零样本失败;给 2 次及以上修正的三名全部成功。这与更密集修正迹产生更通用技能库一致。
| 条件 | 任务2 SR | 说明 |
|---|---|---|
| 无技能库 | 0/6 | 基线零迁移 |
| 载入任务1技能库 | 4/6 | 2/6 持平于0 |
| 仅1次前任务修正 | 1/3 成功 | 技能库过稀疏 |
| ≥2次前任务修正 | 3/3 成功 | 密集修正→通用库 |
5.4 人类修正 vs VLM 修正
人类修正能应对因故障或噪声传感器而难以检测的失败模式。例如深度估计误差导致夹爪在表面上方过高处释放物体时,人类能立即诊断预期与实际放置高度间的差距——这种差异仅从相机图像难以检测。人类修正还编码无法从视觉推断的物体物理直觉:如"缓慢闭合夹爪以免棒球滑脱"——这种推理对仅基于图像观测的 VLM 构成挑战。
5.5 从朴素自然语言修正合成策略
用户能自然地、无需机器人专用术语地表达修正。参与者话语示例包括"把杯子再往左抓一点"、"一直向下移动直到意面盒碰到架子",合成了导致任务成功的策略更新。
6. 局限性与未来工作
- 受底层模块性能限制:作为模块化方法,ARCHITECT 受低层原语与底层模块性能制约,如抓取采样器的噪声——若某次抓取成功未被修正,技能库中就不一定有纠正未来抓取失败的技能。随着新模型发布替换,性能有望提升。
- 修正数量敏感:技能库质量依赖修正数量。仅提供 1 次任务 1 修正的两名参与者未能无额外修正完成任务 2,说明修正数量对构建有用技能库至关重要。
- 人类在环依赖:需要人类专家提供修正,部署时的人力成本与可扩展性有待进一步研究。
- 修正质量影响未充分研究:未来工作可研究修正数量与质量如何影响最终策略。
7. 总结
ARCHITECT 是一个用于机器人策略合成的代理式框架,通过人在环代码生成与持久增长的技能库,弥合自然语言指令与鲁棒执行间的规范鸿沟。在 8 项跨 6 个挑战类别的真实世界操作任务上,ARCHITECT 在无任何机器人专用训练数据的情况下超越了 VLA($\pi_0$、$\pi_{0.5}$)与先前一次性程序合成方法 Code as Policies,其技能库通过在新领域内任务上提升性能来摊销人类 effort。核心洞见是:来自人类主管的单条自然语言修正,往往编码了与多次自主重试周期相同的诊断与物理信息——稀疏人类纠正是比扩大测试时计算更高效的规范闭合手段。
flowchart TD
A["自然语言指令 c"] --> B["LLM 编排器: Claude Opus 4.6"]
S["技能库 S_k"] --> B
T["前序执行迹 T_k-1"] --> B
B --> C["合成策略代码 pi_k"]
C --> D["调用工具: Control/Perception/Proprioception/CLI"]
D --> E["机器人执行"]
E --> F{"成功?"}
F -->|是| G["回合完成"]
F -->|否/回合末| H["人类提供语言修正 f_k"]
H --> I["蒸馏为技能 s_k+1 = Distill(f_k, T_k)"]
I --> S
S --> B



