RACaP:把代码生成挪到进化阶段,运行时只调用冻结的策略 API
「代码即策略」(Code as Policies)让模型在运行时现写现修程序,代价是推理延迟,并把可复用的物理机制与具体任务决策纠缠在一起。RACaP 把代码生成从部署时挪到进化时:部署阶段由一个 ReAct 循环调用一组冻结的、带类型的策略 API,任务适配通过参数完成,而不是重新改代码。两阶段策略用能力课程学习加自主自进化,同时改进 API、ReAct harness 与经验记忆。在 LIBERO-90 上达到 54.4% 成功率,零样本 LIBERO-PRO 45.0%,LIBERO-Long 46.0%,而 Code as Policies 基线在长时序任务上最高只有 4.0%;在 LIBERO-PRO 上成功率是基线的 2.5 倍,中位策略时间快 1.9 倍。为了上机部署,作者用拒绝采样微调把 GPT-5.6 的 ReAct 决策蒸馏进 Qwen3-VL-8B-Instruct,单次决策推理提速 13.2 倍,重复物理调用从 16 次降到 4 次。
原文 · arXiv:2609.29394「代码即策略」(Code as Policies)把程序生成带进了机器人:模型在运行时写程序、看结果、改程序。这套循环很有吸引力,但它有两个结构性代价。
背景与问题
第一个代价是延迟——每一次决策都要走一遍代码生成,动作回路被拖慢。第二个代价更隐蔽:纠缠。真正可复用的物理机制(怎么抓、怎么推、怎么拉开抽屉)与某个任务的具体决策(先抓哪个、放在哪里)被写进同一段程序,于是机制无法跨任务沉淀,任务也无法在不改动源码的情况下被适配。论文的出发点很直接:如果一个东西在所有任务里都不变,那它就不该在运行时被重新生成。
核心创新
- 代码生成移到进化阶段。 RACaP 的设计原则是「部署时不写代码」。部署阶段面对的是一组冻结的、带类型签名(typed)的策略 API,它们把可复用的物理机制封装起来,只暴露运行时可调的参数。
- ReAct 循环做运行时决策。 由 Reasoning-and-Acting 循环在冻结 API 之上选择调用:工作记忆承载当前任务状态,长期经验记忆承载跨任务积累的经验,视觉反馈用于确认结果并在失败后恢复。整个过程不修改源码,因此「适应」不会引入代码退化的风险。
- 两阶段自进化。 能力课程学习先建立基础能力,随后自主自进化同时改进三样东西:API 集合、ReAct harness 与经验记忆。与 CaP 中「每次运行临时打补丁」相比,这里的每一轮改进都沉淀为可复用资产。
- 面向真机的蒸馏。 以拒绝采样微调把大模型的 ReAct 决策蒸馏进 Qwen3-VL-8B-Instruct,使机器人端的决策延迟大幅下降。
结果
- LIBERO-90 成功率 54.4%;零样本 LIBERO-PRO 45.0%;LIBERO-Long 46.0%。
- 对比 Code as Policies 基线:长时序任务上基线不超过 4.0%;在 LIBERO-PRO 上 RACaP 成功率是基线的 2.5 倍,中位策略时间快 1.9 倍。
- 蒸馏之后:单次决策推理提速 13.2 倍,重复物理调用从 16 次降到 4 次。
局限
评测全部集中在 LIBERO 系列的仿真基准上,摘要没有给真机任务的成功率或部署规模,「面向机器人部署」目前由蒸馏指标而非硬件结果支撑。46%–54% 的绝对成功率也说明长时序操作远未解决——LIBERO-Long 上仍有近一半任务失败。API 集合的设计成本(谁来定义 API、类型系统如何随能力演进)以及自进化的安全性(当进化出的 API 或 harness 引入系统性错误时如何回滚)在摘要中都没有交代。
行业启示
RACaP 提的其实是一个软件工程问题:什么该固化,什么该留给运行时。把「可复用的物理机制」编译成带类型的 API、把「这次要做哪件事」留给 ReAct 循环,等价于把机器人策略从「每次重写的脚本」变成「有版本、有接口、可回归测试的系统」。对任何准备用 VLM 驱动真实产线的团队,这条边界——进化时写代码、部署时只传参数——比具体成功率数字更有借鉴意义,因为它直接决定了推理成本、可复现性,以及「行为出问题时能不能定位到是哪一层」。