ASPIRE:把一次调试,变成后续任务能用的经验

核心元信息

维度 内容
方法全称 Agentic Skill Programming through Iterative Robot Exploration
论文版本 arXiv:2607.00272v2,2026-10-20;本笔记记录 2026-10-24 的研读
研究机构 NVIDIA、UIUC、UMich、UC Berkeley、CMU
项目与代码 项目主页 · 官方仓库
策略形式 语言模型编写的 Python 机器人控制程序,调用固定的感知、几何、规划与控制 API
仿真评测 LIBERO-Pro、Robosuite、BEHAVIOR-1K;跨任务零样本迁移使用 LIBERO-90 → LIBERO-Pro Long
真机评测 双臂 YAM:仿真技能辅助三项操作;另有连续三轮魔方操作的在线技能学习
主要比较对象 CaP-Agent0,以及 OpenVLA、π₀、π₀.₅ 等策略;具体测试协议不同,不能只按模型名比较

一句话本质 (TL;DR)

ASPIRE 把机器人编程做成一个能积累经验的调试过程:看清哪一步失败,多写几种修复程序,用执行结果筛选,再把可复现的修复方法留下来。

学习发生在两个地方:当前任务的程序在改进,跨任务的技能库在增长。语言模型权重保持不变。这不是新的 VLA 训练算法,也不是把机器人低层控制全部交给语言模型。

对话攻克与认知记录(Aha Moments & Q&A)

Q1:技能库里到底存什么?

不是只有可直接调用的函数,也不是把整段成功任务程序原封不动地存下来。主要保存的是:什么情况下容易失败,遇到这种情况应怎样修改程序。

以接近桌上的收音机为例,值得留下的不是某次成功导航的绝对坐标,而是“靠近障碍物边界时,当前站位可能落入碰撞缓冲区;应尝试目标周围其他方向的可达站位”。它可以出现在感知提示、导航恢复、抓取约束、运动片段或调试流程中。

因此,技能库更像机器人程序员的工程经验笔记。部分条目可以带代码示例,但“函数”与“经验”并非互斥的两种技能。

Q2:一次碰巧成功,为什么不应直接变成技能?

原 Actor 跑通只能说明当前程序在部分调试场景里有效。系统还会让另一个 Verifier 根据技能提案独立尝试原任务,再由协调器检查 API 合规性及可复用性。

这一步检验的是:提案本身是否足以帮助另一个智能体复现修复。它能减少把偶然成功和含糊总结写进技能库的风险,但不保证对所有未见环境都有效。Verifier 不是在完全独立的最终留出测试集上训练或调参。

Q3:执行记录与一段机器人视频有什么不同?

记录以一次 API 调用为单位,把“调用了什么、传了什么参数、返回什么状态”和调用前后的图像联系起来。模型可以围绕失败的那次规划或抓取查看证据,不必从整段视频反推程序执行到了哪里。

返回 SUCCESS 不等于感知一定正确;图像、位姿及后续结果仍需交叉检查。执行记录提供的是更好的诊断依据,不是自动生成的因果证明。

Q4:程序进化搜索不就是多重试几次吗?

区别在于下一次尝试怎样产生。单线调试只修改当前版本;ASPIRE 参考历史表现最好的程序和它们尚未解决的失败,每轮提出多个候选,再以实际执行成功率筛选。

搜索对象是完整的机器人程序,因此既能调整参数,也能改操作顺序、感知流程或接触策略。多候选增加了跳出原策略的机会,但不保证每轮都会出现根本不同的解法。

Q5:跨本体迁移的是动作、代码,还是知识?

在 Franka 仿真到 YAM 真机的实验中,传过去的是文本技能作为上下文指导。真机智能体仍然使用自己的感知、标定、控制接口,还要运行、检查和修复程序。

所以应称为“仿真经验减少真机编程与调试成本”,不能写成“不经真实交互即可零样本部署”。论文真正不允许目标任务调试的零样本实验,是 LIBERO-90 技能迁移到未见 LIBERO-Pro Long 任务。

Q6:系统图怎样既能读懂,又不把创新点删掉?

本次讨论先后否定了两种画法:只堆“闭环、进化、复用”等术语,读不出具体动作;压成普通的“写代码—执行—修改”流程,又丢掉了 ASPIRE 与普通智能体的区别。

最终保留四部分内部机制:多版本程序如何筛选、执行反馈如何细化到调用、技能如何独立验证入库,以及文本经验如何指导另一种机器人。下图保存的是这一版。

核心架构与方法拆解

系统图:程序搜索与跨任务记忆如何连在一起

ASPIRE:程序搜索、执行诊断、技能积累与真机迁移 协调器分派任务,并用更新后的技能库重试早期低分任务。编程智能体每轮参考技能、历史最好的三个程序及其失败记录,提出多个候选程序。执行引擎记录每次感知、规划、抓取和控制调用的输入、输出、状态、前后图片和可用标注。智能体依据调试成功率筛选程序并继续搜索。修复经验经过独立复现和协调器检查后,存成带有适用条件、修复方法和来源的技能文本。技能用于后续任务,也能指导另一种机器人的程序编写;真机交互还可积累自己的文本技能。 ASPIRE:程序如何改进,经验如何积累 协调器:选任务、派发编程智能体 任务集完成后,用完整技能库重试早期低分任务 任务 读取已收录的技能 ① 程序进化搜索 一轮提出多种程序,再用执行结果筛选 语言模型写 K 个候选程序 参考:任务、技能、历史最好的 3 版程序 以及这些程序尚未解决的失败记录 比较调试场景中的成功率,留下好版本 连同失败记录,作为下一轮改写的依据 达到目标成功率,或用完搜索轮次后停止 调试场景与最终评估场景分开 ② 闭环机器人执行引擎 把失败定位到具体的一次调用 感知 → 规划 → 抓取 → 控制 候选程序 每次调用的执行记录 输入参数、输出、返回状态 调用前后的图片 抓取候选、轨迹等可用标注 执行记录 按需查看相关调用,而非整段视频 例:物体已找到,但接近时规划失败 搜索结束后,从验证过的修复提炼经验 ③ 技能库:把修复经验留给下一项任务 候选经验先验证,再保存为可阅读、可检索的技能文本 另一个智能体独立验证 不给原来的调试对话 只凭技能提案重现修复 在原任务的部分调试场景复测 通过 协调器检查并收录 遵守允许使用的 API 修复能被独立复现 只收录可复用的经验 写入 最终保存的技能条目 失败现象与适用条件 修复步骤与代码示例 来源任务、验证记录 以 Markdown 文本保存 把已有技能带到新任务 / 新机器人 ④ 跨本体迁移与真机在线学习 换机器人时迁移经验,不直接照搬动作或控制代码 Franka 仿真技能 抓易拉罐、放碗 推拉抽屉等操作经验 参考经验 YAM 真机编程智能体 按真机 API 改写程序 执行、查看记录、修复 在线学习 真机也会积累技能 把新操作经验写成文本 例:魔方支撑与防滑 用于后续真机操作 不更新语言模型权重;进步来自程序搜索与技能文本的积累。
本次研读重绘。①–③ 是论文的三个系统组件;④ 展开技能跨本体迁移与真机在线学习。窄屏可横向滚动,避免把框内文字缩小。打开原始 SVG。

1. 技能库:存适用条件与修复方法,不只存成功程序

论文 §2.2 与附录 A 将技能描述为紧凑的上下文指导,通常包含以下内容;这是内容组织方式,不应理解成所有条目都具有完全相同的严格字段格式。

内容 回答的问题 收音机接近失败的例子
失败现象 什么坏了? 已定位物体,但接近目标时反复出现规划错误
适用条件 什么情况下值得用? 目标靠近障碍物边界,候选站位受碰撞缓冲区限制
修复策略 接下来怎样改? 在物体周围尝试其他方向的站位,找到可达位置后重新观察和抓取
代码示例 怎么落到程序里? 可附多角度接近的代码草图;不要求直接复制整段任务代码
来源与验证 依据是什么? 来源任务、开发种子与相关验证结果

附录 G 给出的文件组织位于 .claude/skills/iterative-debugging/skills/,由 README.md 索引 grasp.md、localize.md、transport.md、manipulation.md 和 task-exploration.md。这里依据的是论文附录,不把未检查的仓库实现细节当作事实。

经验进入共享库的过程:

  1. Actor 在调试场景中检查失败、修改程序并验证修复,提交结构化 findings,区分可迁移模式与任务特有细节。
  2. 附录 G 提到 lint_skills.py 会先检查提案,再派发 Verifier;本文不推测未给出的全部检查规则。
  3. 新的 Verifier 根据提案,在原任务的一部分种子上独立复现,标记有效、存在缺陷或尚未验证的条目。
  4. 协调器检查允许使用的 API,只收录经过复现且可复用的经验。

下一项任务接收的是这些提炼后的技能,而不是上一名 Actor 的整段聊天和全部原始轨迹。

**反向迁移(Backward Transfer)**处理任务先后顺序带来的差异:早期任务的技能库小,后期任务能使用更多经验。任务集完成后,协调器允许对早期低分任务进行一次单独回访,使用完整技能库重新调试。它不是把新技能无条件套到每项任务上,也不是零样本评测的一部分。

2. 执行引擎:把失败与发生失败的调用对齐

机器人程序失败,可能出在物体定位、候选抓取、逆运动学、路径规划或接触后的状态恢复。只反馈“任务没成功”,很难知道该改哪一段。

ASPIRE 对每次感知、规划、抓取和控制调用记录:

  • API 名称、输入、输出与返回状态;
  • 调用发生前后的关键帧;
  • 可用的视觉证据,例如定位覆层、抓取候选、物体位姿或规划结果。

论文 Figure 2 的诊断过程:

  1. 感知返回收音机位置,视觉记录显示机器人找到了目标。
  2. 后续 navigate_to_pose 多次返回 PLANNING_ERROR。
  3. 查看导航目标及相关日志后,Actor 发现候选位置距离桌边约 20 cm,落入避障缓冲区。
  4. 修复导航站位的生成方式:围绕收音机尝试不同接近方向,再从可达一侧重新观察并抓取。

因此修复集中在接近路径,而不是盲目更换感知提示或抓取器。这里不额外指定“改成大于 30 cm”,也不把该导航错误归到正文未明确指定的某个规划后端。

引擎并不固定一次任务的图像数和 Token 数;程序长度、调用数量以及智能体实际查看的证据都会影响开销。“每个动作前后记录关键帧”不能推出“一个任务固定只有十张图”。

分块增量执行是另一项重要边界:在 BEHAVIOR-1K 评估中,智能体会根据当前记录生成下一段代码。它不同于 LIBERO-Pro / Robosuite 搜索结束后固定一个程序,再跨留出种子运行的协议。

3. 程序进化搜索:保留好版本,同时寻找其他做法

单线修复容易一直沿着原策略微调。例如某种接近方式本身不可行,继续修改同一路线的距离参数未必有用。ASPIRE 扩展到多个候选程序,而不是只维护一条修改链。

设搜索历史为 H\mathcal{H},技能库为 L\mathcal{L},调试种子集合为 SdbgS_{\mathrm{dbg}}。论文 Algorithm 1 的核心可写为:

{Pik}k=1K=ProposeRepairs⁡(M,τ,Top3⁡(H),L,H)\begin{aligned} {P_i^k}_{k=1}^{K} &= \operatorname{ProposeRepairs}\bigl(\ &\quad M,\tau,\operatorname{Top3}(\mathcal{H}),\mathcal{L},\mathcal{H}\bigr) \end{aligned}

这里负责生成候选的是编程智能体 MM;协调器主要管理任务与技能库。历史同时保存程序、调试分数和执行记录。

每轮包含三件事:

  1. 参考优胜程序与残留失败,提出 KK 个候选;候选可以改变参数,也可以改变控制逻辑或任务策略。
  2. 在调试种子上执行,记录成功率和新的失败证据,加入搜索历史。
  3. 达到成功阈值 θ\theta,或用完 TT 轮后,选定最优程序;从调试历史提炼已验证模式,并在分离的留出种子上做最终评估。

“一次留出评估”指搜索完成后对固定程序进行一轮评测,不是只运行一个随机场景。LIBERO-Pro 每项任务有 50 个留出种子。

更强模型展示了“先把书放倒再推入架下”等不同接触策略。它说明程序表示允许改变做事方法,但案例本身不能证明这种策略一定由进化搜索而非普通迭代调试产生。进化搜索的独立收益应看消融,而不是凭某个视频推断。

4. 跨本体与真机在线学习:经验能迁移,控制仍需适配

论文 §3.6 使用 Franka 仿真中积累的三类技能,指导另一种本体和 API 的双臂 YAM:易拉罐拾取、碗放盘子、抽屉推拉。真实机器人上的编码模型是 Codex 中的 GPT-5.5;魔方在线学习使用的是 GPT-6 Astra,二者不是同一组实验。

这项迁移可以拆成:

  • 保留的内容:操作条件、失败模式、几何或接触上的修复建议,必要时附代码草图;
  • 需要重新解决的内容:真机感知、相机标定、坐标和动作接口,以及真实执行中的失败;
  • 实验检验的问题:有仿真经验后,达到第一个成功程序是否更省调试 Token,得到的程序是否更可靠。

真机在线学习是另一条经验来源。魔方实验让智能体在同一会话连续三轮交互中,逐步记下双层支撑、单层隔离、旋转轴对齐、防碰撞交接和滑脱恢复等技巧。它有人工提供的初始任务指导,也允许调用符号求解器计算转动序列;探索重点包含怎样在物理世界可靠实现这些转动,不能描述成从零发明魔方解法。

实验结果与真机表现

1. 主结果:先固定模型,再比较方法

以下均使用主实验的 Claude Opus 4.6;不把后续更强模型的数据混在同一行。LIBERO-Pro 数值来自附录 B,BEHAVIOR-1K 仅包含两项代表性移动操作任务。

评测 CaP-Agent0 ASPIRE 差值
LIBERO-Pro:位置扰动宏平均 20% 77% +57 个百分点
LIBERO-Pro:任务扰动宏平均 16% 67% +51 个百分点
LIBERO-Pro:上述两类综合 18% 72% +54 个百分点
Robosuite:双臂交接 20% 92% +72 个百分点
Robosuite:七项任务平均 68% 81% +13 个百分点
BEHAVIOR-1K:收音机拾取任务成功 56% 88% +32 个百分点
BEHAVIOR-1K:易拉罐拾取任务成功 72% 88% +16 个百分点

这些差值是百分点,而不是相对百分比提升。Robosuite 并非所有任务都进步:双臂抬升由 74% 变为 71%,螺母装配从 0% 到 9%,说明主模型下仍存在难以处理的接触任务。

评测协议也影响解释:ASPIRE 在 LIBERO-Pro / Robosuite 中先付出调试成本,得到每任务一个程序;CaP-Agent0 则为不同种子重新生成程序,并使用测试时推理和重试。表格不能直接说明两者的全生命周期计算成本相同。

2. 执行反馈与进化搜索各贡献多少?

Opus 4.6 的 LIBERO-Pro 消融配置 宏平均成功率
不加执行引擎与进化搜索的基础系统 14%
加执行引擎,进行迭代调试 62%
再加程序进化搜索 72%

在这组消融里,执行反馈带来的增益最大;多候选搜索继续处理部分剩余失败。它不是在任意模型、任意任务上都保证固定幅度收益。

3. 跨任务零样本:技能库增长后,未见任务是否更容易?

技能由 LIBERO-90 的源任务积累;目标是未见的 LIBERO-Pro Long。以下是附录 C 的精确数值,模型为 Opus 4.6。每个目标任务生成一个程序,不再进行目标任务调试、重试或技能更新。

方法 / 技能来源任务数 位置扰动 任务扰动 综合成功率
CaP-Agent0 5.2% 2.4% 3.8%
ASPIRE,空技能库 0.0% 9.4% 4.7%
ASPIRE,25 项源任务 5.6% 21.8% 13.7%
ASPIRE,50 项源任务 13.8% 29.2% 21.5%
ASPIRE,90 项源任务 22.6% 38.3% 30.5%

总体随源任务增多而上升,但不表示每项任务都单调受益。附录的单任务结果仍有下降或持续为零的情况。这里的 NN 是贡献经验的源任务数,不是技能条目数。

4. 反向迁移:后学的技能能否帮助早期任务?

Opus 5 的 LIBERO-Pro Long 实验选出五项初始低分任务,使用完整技能库重新调试,四项改善。其中两项抽屉任务从 0% 提升到 52% 和 72%;微波炉任务仍为 0%。整个 20 任务评测的成功率由 74.6% 升至 82.2%,增加 7.6 个百分点。

这是允许进一步调试后的结果,不能和上一节不允许目标任务调试的零样本成功率混用。

5. 真机迁移:减少的是到首次成功的调试消耗

Token 单位均为百万(M);成功率来自所得程序的 20 次评估。没有达到首次成功的设置,Token 统计到调试预算耗尽,而不是到一个不存在的成功程序。

真机任务 仿真技能 输出 M 总计 M 成功
碗放盘子 无 0.05 8.65 20/20
碗放盘子 有 0.04 5.11 20/20
提易拉罐 无 0.18 61.94 13/20
提易拉罐 有 0.03 6.58 19/20
推拉抽屉 无 1.33 334.92 0/20
推拉抽屉 有 0.36 81.67 11/20

易拉罐总 Token 减少约 89.4%,即约 9.4 倍,程序成功率由 65% 到 95%。放碗的最终成功率没有提高,但调试消耗减少。抽屉在无技能设置中耗尽预算仍未得到成功程序,有技能时达到 55%;这不是宣称该任务在其他预算或方法下不可解。

总 Token 包含反复读入上下文等开销,不能等同于模型新输出的 Token,更不能不区分缓存与计费方式直接换算费用。这组证据只有三项所选操作,不代表所有跨本体任务都能得到相同收益。

6. 魔方:每次有效转动更省,但整局并非持续变快

连续交互轮次 是否完成复原 整轮耗时 完成的面转动数 每次有效转动摊销时间
第一轮 否 50 分 54 秒 3 16 分 58 秒
第二轮 是 39 分 5 7 分 48 秒
第三轮 是 77 分 10 秒 25 3 分 05 秒

第一轮到第三轮的每次有效转动 Token 从 11.27 M 降到 2.01 M。这里按整轮日志摊销,包含失败、恢复和上下文压缩;半圈计一次转动,不含整体重定向。

第三轮整局反而更久,因为需要完成的转动更多。不同轮次并不是固定难度、相同动作序列的受控对照;结果支持经验积累后的效率改善,但不能单独排除局面差异、同一会话上下文和练习顺序的影响。

7. 更强模型结果的引用边界

论文报告替换底层模型后可达到更高成功率,但当前论文与项目主页存在一处口径不一致:论文 Table 3 给出 Opus 5.5 的 BEHAVIOR-1K 数据,项目主页主结果说明却写着 Opus 5.5 未在该基准评估。本笔记不把这组强模型结果用作主要证据;需要引用时应先确认相应版本与实验记录。

总结与思考 (Takeaways & Critique)

对机器人系统最有用的启发

  • 先改善反馈,再要求智能体更聪明。 若规划、抓取和感知的失败全被压成一个任务成败值,再强的模型也缺乏定位依据。
  • 跨任务值得保留的往往是失败条件及修复原则。 固定坐标的成功动作很难直接迁移,适用条件明确的经验更容易指导新程序。
  • 搜索与记忆解决不同问题。 搜索找当前任务的可行做法,记忆减少后续任务重复探索;只有其中一个,不能等价替代整个系统。
  • 语言技能是一种迁移接口,不是动力学已经消失。 新机器人仍然承担标定、感知、控制和真实接触的适配成本。

已知边界与尚未解决的问题

  1. 仍受固定 API 能力限制。 智能体能自由写程序,不代表可以表达和执行任意行为。
  2. 原语前后帧不是完整接触过程。 短暂打滑、快速碰撞等事件可能需要更密集传感记录;细粒度 Trace 改善诊断,但不保证完整可观测。
  3. 独立复现不等于广泛泛化。 部分源任务种子上的验证不足以穷尽几何、材质、任务组合和本体差异。
  4. 技能库增长还有维护成本。 过时、重复、过窄或相互冲突的条目如何检索、更新和淘汰,论文没有完全解决。
  5. 探索成本不能忽略。 LLM 调用和机器人 rollout 都有开销;真机还需要成功检测、安全复位、监控与标定,尚不是无人值守的通用学习系统。
  6. 不能由这些基准推断程序策略全面优于 VLA。 当前证据来自特定任务、接口、扰动和调试协议,也依赖成熟的感知与控制模块。

对前述口头讲解的校正

落盘保留机制,不保留未经证实的强化表述:ASPIRE 没有证明完整动作程序在真实机器人上“根本行不通”;独立 Verifier 不等于完全未见分布盲测;执行记录没有固定的图像或 Token 上限;跨本体真机结果不是零样本直接部署;魔方操作使用初始人工指导与符号求解器;书本策略案例也不应被单独当作进化搜索的因果证明。

原文与定位