南洋理工团队用百年图灵机概念,机器人任务成功率做到70.24%
2026年的机器人竞赛场上,发生了一件挺让人意外的事。当时排行榜上排名靠前的,是一堆有着炫酷名字的模型:GPT-6 Astra、π0.5、各种打着"世界动作模型"旗号的新秀。这些模型动辄几十亿参数,靠海量真实机器人数据训练出来,代表着当下机器人智能的最高水平。它们在一个叫RoboDojo的测试里,最好成绩是31.38%
2026年的机器人竞赛场上出了件挺让人意外的事。
榜单前列当时站着一批名号响亮的模型,
GPT-6 Astra、π0.5,以及各种打着"世界动作模型"旗号的新选手。它们的参数动辄几十亿,训练时喂进大量真实机器人数据,被视作当前机器人智能的顶尖代表。可到了RoboDojo这个测试里,它们中最好的也只拿到31.38%的任务成功率。
结果几个来自南洋理工大学的研究者站出来说,我们不用任何AI模型,就写代码,成功率能做到70.24%。
第二名的成绩,差不多被甩开了一倍有余。更耐人寻味的是,他们拿出来的"武器"并非什么新式神经网络架构,而是图灵机——一个快一百年前就存在的老概念。
**这篇论文要说的事情听起来有点反常识:在机器人领域,最前沿的解法可能不是更聪明的AI,而是回到最朴素的代码逻辑。**
这事值得掰开揉碎讲讲。
### 机器人智能的三条路,走到了同一个坑里
先说说现在主流的机器人控制到底是怎么工作的。
第一种叫VLA
VLA(视觉语言动作模型):这类神经网络模型做的事,是把摄像头拍到的画面连同语言指令一起,直接映射为机器人的动作指令,π0、OpenVLA都属于此列。
VLA的思路并不绕弯:大量"看到什么画面、该做什么动作"的数据喂进去,让它自行学出一套映射关系。这套关系藏在模型几十亿个参数当中,某个具体决定究竟怎么来的,谁也讲不明白。
另一条路叫Agent Harness,即智能体框架。做法是让一个大语言模型(比如GPT)在任务执行途中反复自问"现在该干什么?",模型吐出文字指令,再转成机器人动作。这种方案因为有"推理"环节,看上去更灵活,可每做一个决定都得调一次大模型,慢且贵。
还有第三种思路,过去几年在机器人代码圈里低调流行,叫"用模型写代码当策略"。Code as Policies这类工作就是例子:语言模型当场写一段代码,拿去控制机器人完成任务。限制也很关键——代码是临场生成的,这一局用完就丢,下一局任务重新开始,模型又得从零现编。
三条路方向各异,却有一个共同之处:**状态,也就是机器人需要掌握的"世界此刻是什么样子",要么埋在模型权重里无从查看,要么记在一堆文字记忆里靠不住,要么就交由外部感知模型临时给出一个结果。**
这就是论文作者觉得别扭的地方。他们提出一个很朴素的类比:机器人和它所在的环境,其实就是一台图灵机。
图灵机:计算机科学中最基础的一种抽象计算模型,1936年由阿兰·图灵提出。它由一条存符号的"纸带"加上一套读写规则构成,规则保持不变,纸带内容一变,同一套规则就能处理不同输入。
图灵当年那句话用在这里很贴切:"发明一台单一的机器,用来计算任何可计算的序列是可能的。"规则不动,带子会动,图灵机的秘密全在这里。对应到机器人身上,这台"图灵机"的纸带就是机器人自身与周边环境的状态——桌上的碗在哪个位置、机械臂关节转到多少度,而规则则是驱使它行动的策略。
只要状态能被准确记下来,规则又足够完备,理论上压根不用一个会"思考"的模型实时插手,纯代码就能把整个任务跑完。这正是论文的核心主张,名字叫Code-Only-as-Policy,简称COAP。
### 想象一下,你去一个完全陌生的厨房做饭
COAP这个设计思路,其实可以用一个很具体的场景来理解。
设想你去一个陌生人家里帮忙做菜。要是完全不记路、不记东西搁在哪儿,每回转身都得重新"看一眼环境再决定下一步",做菜效率会很低,也容易出错——比如扭头看见一把刀,却忘了盐已经放过,又撒了一遍。
**换一种做法:进了厨房先花点时间,把每样东西的位置记成一张清单,盐在左边第二个抽屉,油在灶台右侧,之后照着清单上的记录一步步操作,不必每步都重新观察、重新判断。**
COAP与VLA/Agent Harness的根本差别就在这里。前者维护的是一份精确、持久、看得见的"清单"(代码变量里的状态),后者每走一步都得靠"感觉"(模型推理)重新判一次。
不维护这份清单会怎样?论文给出了具体数字。RoboDojo的记忆类任务里(比如记住某个颜色在哪个杯子底下),COAP成功率89.9%,最强的Agent Harness方案只有46.6%,VLA方案更低,仅33%左右。差了将近一倍,原因不复杂:没有"清单"的系统,看一眼忘一眼,物体一旦被遮挡,位置信息就丢了。
状态的管理要分门别类来做。
那这份“清单”在COAP里究竟是怎么维护的?论文把它拆成了三块。
第一块是环境状态,负责记下各个物体的位置、尺寸和类别,还有它们彼此的空间关系,比如A摆在B上面。每条记录还带一个误差值、一个来源和一个时间戳,用来说明这条信息是何时、以何种方式测到的,以及有没有失效。
第二块是机器人状态,直接取自机器人自己的传感器,涵盖关节角度、末端执行器所处位置、夹爪张开合拢的程度。
把这两块合到一起,就相当于图灵机里那条“纸带”。
第三块叫任务状态,它不在纸带上,更像图灵机内部那个判断“眼下走到哪一步”的寄存器。它记的内容包括任务执行到第几步、每个物体分给了哪只手臂、重试过几回。
三类状态各有各的更新来源:机器人状态每一步都从传感器直接读;环境状态由专门编写的感知代码从摄像头画面中测量得到;任务状态则是任务程序自己在运行过程中更新的。
感知*:就是从摄像头拍到的RGB图像里辨认出物体的位置、朝向、大小等信息,这里走的是传统计算机视觉路线(基于NumPy和OpenCV这类工具库),并非训练出来的黑箱神经网络。
有个细节值得单独说:COAP的感知代码是“白盒”的,透明可查。具体做法是把机器人的三维网格模型投影到摄像头画面中,先遮掉属于机器人自身的像素,剩下那些与桌面颜色不一致的区域就是候选物体。接着用一条简单的几何公式,把图像上的像素点换算成真实世界的三维坐标。这条公式说白了就是解一条从摄像头出发、穿过该像素的射线,看它与桌面平面交在哪里。
也就是说,某次识别出了错,比如把飞镖盘认成了耳机(论文里真发生过这个案例),开发者可以顺着“射线交点”这套逻辑一步步往回查,定位到出问题的那一环,再直接改代码修掉。VLA或者Agent Harness做不到这一点,因为那些系统的判断过程根本不可见。
一套代码库,几十个任务反复调用。
COAP另一个关键设计在于:它不为每个任务单独写一套代码,而是维护一个共享代码库,供不同任务调用。
论文给了一个具体数字:新任务跑起来时,83%的代码行数来自这个共享库,任务专属逻辑只占17%。
这个比例靠什么实现?论文的解释是代码做了分层:任务程序在最上层,只管“做什么”,比如先做A再做B;往下一层是操作物体的具体方法,比如抓取、搬运、放置;再往下是感知和运动控制层,负责测量、路径规划这类“怎么做”的细节。
拿抓取举例,代码不是按“这是杯子”还是“这是积木”分别写的,而是按抓取方式来写:从顶部抓、抓边缘、抓把手、抓碗沿。这样一来,一个新出现、从没见过的物体,只要形状对得上某种已有的抓取方式,就能直接套用现成的抓取逻辑,不必从零写起。
论文还设计了一种“默认关闭参数”的机制,用来保证新功能不破坏老功能。比方说有个任务需要把抓起的物体斜着往上提,而不是垂直往上提,工程师就给抓取函数加了个新参数lift_dir,默认值仍是原来的垂直方向,只有传入了新参数的那个任务才会走新行为,其他调用这个函数的老任务完全不受影响。
这套机制背后有个数学表达:用B表示某个任务在某套代码和某组观测数据下的执行轨迹,要求对于没有主动传入新参数的任务i,加入新功能δ之后的执行轨迹必须与加入之前完全一致。说白了,新增功能只能当“选配”,不能变成“强制升级”。
**这种思路,很像一家大型软件公司维护一套底层基础库:新团队接手新项目,不用把轮子重新发明一遍,而是在已有的、经过千锤百炼的基础设施上,添一点自己的业务逻辑。**
要是没有这套共享库设计会怎样?每个任务都从零写代码,开发新任务所花的时间会线性甚至更糟地累积,而且老任务很可能因为新代码的改动而悄悄崩掉。论文专门测过:冻结库之后再开发新任务,老任务在相同场景下的成功率,开发前是78.4%,开发后是79.9%,统计检验显示没有显著下降(p值0.16)。换句话说,加新功能基本不会把旧的东西搞坏。
出了错怎么办,靠的是“倒带”。
执行过程中出问题在所难免,关键看系统怎么应对。
COAP的做法叫“回溯重试”(backtrack and re-attempt)。状态被完整记录在代码变量里,系统随时知道任务走到哪一步、上一次确认成功的状态长什么样。一旦某个检查没通过(比如抓取之后发现没抓稳),系统可以直接退回上一个确认有效的状态,换一种方法再试,而不是让错误一路累积到任务彻底失败。
论文统计了实际运行数据:在出问题的那些场景里,76%的情况下系统能自己察觉到出了问题;其中34%会立刻换个方法重新尝试,包括重新测量物体、换一个抓取角度之类的调整。
**这就像在高速公路上开车:如果导航系统压根不知道你走到哪个出口了,一旦错过路口,只能一路开到底再想办法;但导航实时知道你的精确位置,错过路口的那一刻就能立刻重新规划路线,代价小得多。**
那要是没有这套状态追踪和回溯机制呢?论文里放了一张很直观的对比图:没有检查机制的系统,只要一步失败,整个任务就当场终止。图上显示,任务步骤增加到30步时,这类系统的成功率会从接近100%一路掉到个位数;有回溯能力的系统,下滑速度则慢了1.7倍左右。任务越长,差距越明显。这也解释了为什么COAP在长时程任务(Long-Horizon)上的优势没那么夸张,只比第二名高13个百分点——长任务本身对哪种方法都更难,但即便如此它还是第一。
没有模型意味着什么
COAP被低估得最厉害的一点,恐怕是效率。
运行时完全不调用任何AI模型,一次控制决策在普通CPU上的中位耗时只有0.3毫秒。论文给出了和其他方案的算力对比:每局任务消耗的算力,COAP只有VLA方案的0.8%到2.4%,只有Agent Harness方案的0.03%左右。
差距为什么这么大?VLA每一步(或每个动作块)都得跑一次几十亿参数的神经网络前向计算;Agent Harness更夸张,隔一段时间就要调一次超大规模语言模型,还得带上不断变长的上下文文本。COAP运行时就是普通代码,该做什么早就想清楚、写进逻辑里了,不需要临场“思考”。
成本上的好处也很实际。调用大模型要花钱,算力成本、API费用都算,而COAP的代码一旦写好,之后每一局跑起来的成本几乎可以忽略不计。
代码也能“自我进化”
论文里最有意思的部分,可能是COAP的开发方式。整个代码库不是人工一行一行敲出来的,而是由AI编程助手(论文里用的是Claude Opus 5.5)在一个闭环流程里自己写、自己测、自己改。
这个过程被称为RSI。
RSI(递归自我改进):这套开发思路是让系统反复审视自身表现、找出毛病、改动自己的运行逻辑,而且每改一次都得验证清楚是不是真比原来强。
论文设计的流程很讲究。编程助手先在自己定义的开发数据集上调试代码,通过看录像、对比测量状态和模拟器里的真实数据,找出问题出在哪儿;随后在一批独立的验证数据上评估修改有没有带来提升,只有提升幅度超过某个阈值(用来排除运行本身的随机噪声干扰)的改动才会被正式采纳。整个过程中测试数据和验证数据是分开的,开发阶段完全不碰最终要考核的测试集。
更妙的地方在于,每个候选修改方案本身就是能直接跑起来的完整代码,不用再训练;于是大量方案可以同时丢到不同“分支”上运行,并行比出谁的效果更好。论文把这一过程称为“广度优先搜索”(BFS):在一个个决策点上(比如“杯子该怎么抓”),先铺开好几种可能做法(抓杯沿、抓把手、抓侧面……),让它们同时跑,选出表现最好的那个,再走向下一个决策点。
论文给了一组具体实验数据:每轮只试1个修改方案,被采纳的概率是17%左右;每轮并行试8个方案,采纳概率能冲到77%,预期获得的提升幅度也从2.5个百分点涨到12.4个百分点。代价是要更多并行算力,但换来的是更快拿到有效改进——单线测试需要大约20小时,并行测试只需要2.3小时左右。
**这个过程让我想起小区里修路。一条路出了问题,一次只能派一个工人去试一种修法,试错速度很慢;但要是能同时派八个工人,各自尝试不同的修补方案,当天晚上就能比较出哪种方案最耐用,第二天就全面推广。并行,本身就是效率的来源。**
这套方法到底跑赢了多少
设计思路说了这么多,该看实际成绩了。
RoboDojo这个基准测试专用于衡量机器人的通用操作能力,共含42个双臂协作任务,覆盖记忆、精度、开放指令理解、泛化能力、长时程操作五个维度;每个任务用三个随机种子各跑50次,最终结果统一由官方评测脚本给出,以免出现各家自说自话的情况。
COAP最终拿到70.24%的总体成功率,比排行榜上此前最好的方法(一个叫PhysicalRSI的智能体加VLA混合方案,31.38%)高出38.86个百分点;比最强的“世界动作模型”方案(29.64%)高出超过40个百分点,比最强的纯VLA方案(27.96%)也高出超过40个百分点。
拆开维度来看,情况更有看头。记忆类任务COAP拿下89.9%,高出第二名39.6个百分点;精度类任务拿到75.1%,领先第二名41.6个百分点。这两类任务恰恰最能说明“状态有没有被准确记住、测量够不够精确”的价值,差距也正好是最大的。泛化类任务包含新物体、新场景、新干扰物的随机化设置,COAP在此拿到65.7%,领先33.1到35.2个百分点。只有长时程任务的领先幅度最小,仅13个百分点,这与前面说的“任务越长、失败累积的风险越大”正好对得上。
| 维度 | COAP | 最强VLA | 最强世界模型 | 最强智能体框架 |
|---|---|---|---|---|
| 记忆 | **89.9%** | 33.0% | 41.2% | 46.6% |
| 精度 | **75.1%** | 26.9% | 33.5% | 32.5% |
| 开放指令 | **64.1%** | 8.5% | 22.9% | 24.9% |
| 泛化 **65.7%** | 27.9% | 23.8% | 15.6% || 长时程 **56.4%** | 43.4% | 26.8% | 37.3% || 总体成功率 **70.24%** | 27.96% | 29.64% | 31.38% |
表格里最抢眼的,是五个维度上COAP全都排在第一位,没有哪一项掉队,而不是某一项单独冒尖。学术圈的基准测试里,这种局面其实不常见。多数方法都有取舍,这类任务强、那类任务弱。能全面压住对手,说明这套设计思路碰到的可能是更靠底层的东西。
### 这套方法也不是万能的
论文对自家局限并不回避,错误分析那部分写得相当实在。
失败案例被研究者分成四类。占35%的第一类叫感知错误,场景一旦随机化(比如换了房间、换了桌面风格),某个物体就可能被认错。论文举的正是前文那个例子:随机化场景里,一个飞镖盘被当成了耳机。第二类叫接触错误,占27%,多发生在抓软性、会形变的物体时,比如夹爪夹住衬衫下摆,布料太软,半路滑脱了。第三类叫逻辑不完整,占29%,像推动积木的函数,自己的检查机制已经发现积木没转到位,却没有接着重试。第四类叫代码设计不够好,占8%,比如某个尺寸阈值被写死成常数,结果一个偏小的手表被错误过滤掉。
前两类被归为“状态表示的局限”,占62%;后两类归为“代码逻辑的局限”,占37%。论文把COAP能力的天花板直接点明:**状态测量得越准、代码逻辑写得越健壮,COAP能做到的上限就越高。反过来说,这个方法眼下的短板也正好卡在这两处。**
还有一点得说清楚:所有结果都出自仿真环境。到了真实世界,摄像头参数、机器人尺寸、物体大小这些COAP目前依赖的“已知常量”都要重新测量和标定,接触相关的参数(抓取力度、搬运速度之类)大概率也得重新调。这是论文自己承认的局限,不是外人臆测。
### 这篇论文站在谁的肩膀上,又会被谁接着往前推
COAP并非凭空冒出来的,它顺着好几条脉络往前走。
往回看,2023年的Code as Policies(发表在ICRA)算是“用代码当策略”这条路的早期代表,让语言模型现场写代码去调用感知和控制接口。但那套系统里,状态还是靠外部感知模型实时提供,代码也是每局重新生成,用完就扔。同年的VoxPoser做了类似尝试,让语言模型写代码来组合空间价值地图。这些工作证明了“代码可以当控制逻辑的载体”,可“状态怎么持久化、代码怎么跨任务复用”这两个核心问题都没解决,而COAP补上的恰好就是这块拼图。
往前看,论文提到的RHO和EmbodiedSWE是更接近COAP的尝试,让编程助手离线写出一整套程序,而不是现场生成。但状态来源依然依赖外部感知模型(比如SAM、Molmo),或者仿真器给的“上帝视角”数据,没能做到COAP这样自己测量、自己维护状态的闭环。论文作者明确把这个差异当作核心创新点来强调。
往更远看,机器人之外的领域也有类似思路在萌芽。2024年的CodeAct(发表于ICML)把可执行代码当作智能体的“动作空间”,而不只是输出文本;更早的Voyager让游戏智能体在与环境交互的过程中,持续积累一套可复用的代码技能库,这和COAP“共享库跨任务复用”的设计思路,其实是同一种哲学在不同场景下的体现。论文提到的RoboRSI(2026年的工作)也尝试用多智能体协作做机器人的递归自我改进,但执行阶段依然保留了一个VLM在做决策,黑箱问题没有根本解决,而这正是COAP想彻底绕开的坑。
把这几个线索并排放在一起,一个走向就浮出来了:**代码的角色正由“工具”转向“接口”,它不再只是替AI去调用外部功能,而是把决策本身接了过来。**比起某个单项性能数字,这个变化恐怕更该被盯住。
写在后面
读完这篇论文,我脑子里一直转的一个问题是:过去几年大家默认的方向都是“让模型更大、数据更多”,为什么很少有人认真问一句“状态能不能干脆写在代码里”这种看着有点返璞归真的问题?
论文中有个细节,我认为可以单独拿出来讲。作者写到,抓住碗沿快速搬运时碗会滑脱,他们的解决办法是补上一行代码,把这种抓法下的搬运速度压下来。一行代码,对应一个具体的物理失效情形。这种“点穴式”的修法,黑箱模型根本办不到——你不可能对一个几十亿参数的神经网络说“把你学到的某个权重微调一下”,只能重新灌数据、重新训练,再指望它这回总算学会了,同时别把别的任务弄坏。
这让我想到软件工程里一场由来已久的争论:规则引擎和机器学习,到底该选哪个。早些年做反欺诈的人大多为这事犯难过。规则引擎看得懂、调得动,出了故障能准确找到位置;机器学习管得宽,能挖出人没料到的规律,可它是个黑箱,一旦出错,很难讲清问题出在哪。这篇论文在某种程度上,等于在机器人领域把这道老题又提了一遍,给出的答案还挺出人意料:至少在眼下这个阶段,规则引擎(也就是精心写出来的代码)或许比黑箱模型更靠得住。
论文没有展开的一点是,这套办法放到真实世界里是否照样管用。仿真环境里,物体的三维模型、尺寸、摄像头参数全是已知且精确的,这正是COAP感知代码能跑得这么好的关键前提。真实世界中,这些参数都得现场测量,测量误差会怎样波及整个系统的稳定性,目前还没有答案,却很该继续追问。
Q&A
Q1:Code-Only-as-Policy(COAP)是什么?
A:COAP这条路子,是让机器人完全用代码干活,不依赖AI模型。它把机器人与环境当成一台图灵机,状态(物体位置、机器人姿态等)由代码变量记下来,决策交给代码逻辑,运行过程中不必调用任何神经网络模型。
Q2:COAP和VLA、Agent Harness相比效果怎么样?
在RoboDojo的42个双臂任务测试里,COAP的成功率达到70.24%。这一成绩比表现最好的智能体框架方案(31.38%)高出38.86个百分点,比最强的VLA方案(27.96%)高出超过40个百分点。记忆、精度、泛化等五个维度上,COAP也全部排在第一。
那COAP的代码库又是怎么来的?
靠AI编程助手(Claude Opus 5.5)自主完成。它在一个闭环流程里包办了写代码、调试、测试以及是否采纳修改的判断,全程没有人工介入。开发过程中,它会并行尝试多个修改方案,思路类似广度优先搜索,再挑出效果最好的那个合并进主代码库。