你有没有想过,教一个AI写代码,和教一个AI修机器人、分析地震数据、设计3D零件,难度上差了多少?

答案可能让你意外:差得不是一星半点。

写代码这件事,AI已经练得很熟了。因为有海量的现成题库,比如SWE-bench这样的测试集,

**SWE-bench*:一个用真实GitHub代码库问题来测试AI能不能修复软件漏洞的评测基准。

里面每道题都配好了标准答案和验证脚本,AI写完代码一跑测试,对不对立刻知道。但如果你让AI去修一份机器人的物理参数文件,去跑一个流体力学仿真,去分析一段DNA序列,事情就麻烦了。这些任务的"正确答案"长什么样,根本没有现成的标准可以照搬。

这正是这篇论文想解决的问题。来自腾讯混元团队和几所大学的研究者们,发现了一个很朴素但很关键的事实:科学界和工程界早就有大把现成的软件在跑,比如画齿轮的OpenSCAD、算流体的OpenFOAM、处理基因序列的SAMtools。这些软件本身,就是最好的"标准答案生成器"。

问题出在哪里

训练一个能干活的AI智能体,需要两个东西。第一是参考答案,也就是正确的做法应该是什么样。第二是裁判,也就是怎么判断AI做出来的东西对不对。

对于普通软件工程任务,这两样东西相对好搞,因为代码对不对,跑一下单元测试就知道。但放到科学计算领域,裁判这件事变得异常棘手。

想象你让AI去修一个机器人的URDF文件(一种描述机器人物理结构的格式)。它改完之后,质量参数对了吗?惯性张量对了吗?这些数字之间有没有物理上的矛盾?你不能简单比较两个文件是不是字节相同,因为同一个物理结果可以用十种不同的方式写出来。但你也不能随便放水,因为一个看起来"像是对的"输出,可能只是碰巧长得像,实际上物理意义完全错误。

论文里举了个特别直观的例子。验证一个输出对不对,有三种做法。第一种是看结构,比如文件存在不存在、格式对不对。这种做法太松,AI随便输出一个假装正确的常量值就能骗过去。第二种是逐字节比较,这种做法太严,因为"value": 1.0"和"value": 1.000000"其实是同一个数字,字节比较会把正确答案也打成错的。真正靠谱的做法是第三种,语义验证,它关心的是这两个输出在业务含义上是不是一致,而不纠结格式上的差异。

这就好比批改学生的数学卷子。如果老师只检查学生有没有在答题框里写了字(结构检查),那写"不知道"也能过关。如果老师要求答案必须和参考答案逐字符完全相同(字节比较),那写"3.0"和写"3"就会被判成两个不同的答案,哪怕它们数学上一模一样。真正懂行的老师,会看这道题的解法逻辑和最终数值是不是对的,这才是语义验证的思路。如果不做这层语义判断,AI很容易用一个表面正确但实际上没有真正解决问题的答案,蒙混过关。

论文管这套方法叫"软件在环重建"(software-in-the-loop reconstruction)。

**软件在环重建*:一种自监督学习方法,拿现有的可执行软件程序当作参考答案的来源,让AI重新写一个功能相同的程序,再用这个软件本身生成的输出来检验AI写得对不对。

它的巧妙之处在于,把"参考答案"和"验证标准"这两件麻烦事,统一到同一个来源里解决了。既然软件本身就是一个可以反复运行的黑盒子,那就让它自己当裁判。

具体怎么运作的

流程说起来并不复杂。拿一个现成的软件,比方说OpenSCAD(一种用代码描述3D模型的工具),给它喂不同的输入,跑出不同的输出。研究者把这些输入输出对分成两堆,一堆叫"公开场景",给AI看,让它知道这个软件大致是怎么工作的;另一堆叫"隐藏场景",藏起来不给AI看,专门用来最后打分。

AI的任务是,只看公开的那些例子,自己写一个程序,去猜测这个软件背后的运行逻辑。写完之后,拿隐藏的那些输入去跑AI写的程序,再和软件本身跑出来的真实结果做比对。如果大部分吻合,就算过关。

论文里那个齿轮的例子特别形象。公开给AI的例子里,齿轮有6个齿;但最后考核用的隐藏例子里,齿轮变成了18个齿。这意味着AI不能偷懒直接照抄6齿齿轮的几何图形,它必须真正理解"齿数"这个参数是怎么影响整个齿轮形状的,才能在18齿的情况下也交出正确答案。

这套做法让我想起小学数学老师出的"举一反三"题。老师只教你几道例题,比如2乘3等于6,3乘4等于12,然后出一道全新的题考你5乘7等于多少。如果你真的理解了乘法的逻辑,这道新题自然能做对;但如果你只是死记硬背例题的答案,遇到没见过的数字组合就傻眼了。如果不做这种"藏起一部分答案"的设计,AI完全可以靠投机取巧的办法,比如记住公开例子里最常见的输出直接糊弄过去,根本不需要理解真正的规律。

为了杜绝这种投机取巧,研究者专门设计了三种"作弊检测器"。第一种是看AI会不会无脑输出最常见的那个公开答案;第二种是看AI会不会找一个输入最相似的公开例子,直接抄它的输出;第三种更狠,直接给AI一个"偷看过正确答案"的超级外挂,看它能不能靠这种作弊方式蒙混过关。结果显示,这三种投机做法在隐藏测试里最高只能对上44.3%的输出字段,没有一个能完全通过验证。这说明研究者设置的考核确实逼着AI去理解真正的逻辑,而不是靠背答案过关。

论文还专门测了一下,这些软件的输出到底对输入变化有多敏感。结果是,几乎所有任务里,只要换一个输入参数,输出就会跟着变,平均有66.3%的输出字段会发生变化。这个数据很重要,因为如果软件对输入变化根本不敏感,那不管你怎么藏输入,AI都可以靠蒙混过关,这套验证机制也就失去意义了。

这套流程的好处在于它能批量复制。一个软件工作流,只要包装一次,就能衍生出很多不同的任务变体,靠的是换不同的输入参数。研究团队用这套方法搭建了一个叫SWR的数据集,里面有500个工作流,覆盖46个软件家族,横跨六大领域,包括物理工程仿真、生命和分子科学、地球和空间科学等等。

AI考得怎么样

数据集搭好了,接下来就是看AI到底能不能完成这些重建任务。

研究者先用Qwen3.8-Max这个大模型,在全部任务上跑一轮,单次尝试的通过率是22.8%。如果给三次机会,只要有一次成功就算过,通过率提高到27.9%,相当于838个任务里至少有一个版本是对的,总共积累了1422条验证通过的完整操作轨迹。

这个数字乍一看不算高,但背后的信息量很大。研究者深挖了失败的案例,发现2781个有可执行程序的任务里,竟然有1591个,输出在不同的隐藏测试场景下居然是一样的。换句话说,AI写出来的程序表面上能跑,但它压根没有真正响应输入的变化,就像一台只会说"好的"的自动应答机,不管你问什么,它都给同一个回复。这说明"写出一个能执行的程序"和"写出一个真正理解逻辑的程序",中间隔着巨大的鸿沟。

研究团队又拉来八个主流的大模型做横向对比,在一个叫SWR100的100题子集上测试。结果相当悬殊:GPT-5.6 Sol拿到了20%的通过率,遥遥领先,而其他七个模型全部挤在2%到6%之间。更扎心的是任务分布,44次成功里,43次都集中在软件工程、物理仿真、空间视觉这三个相对"好懂"的领域,只有1次成功发生在生命科学领域,地球空间科学和数据文档处理领域里,所有模型全部挂零。

这组数据的分量,不亚于当年深度学习刚开始挑战手工特征工程时的那种落差感。只不过这次的"手工特征"换成了需要深厚科学背景知识的专业软件。论文里有一个特别直观的案例,八个模型都在做同一个OpenSCAD卡扣盒子任务,公开例子里盒子高16毫米,隐藏测试里变成21毫米。GPT-5.6 Sol是唯一一个保留了盒体和盖子两部分结构的模型,其他七个模型的输出全部塌缩成了一块薄薄的平板,厚度正好等于壁厚,完全没有理解盒子高度这个参数该怎么用。这些输出在视觉上看着都像是正常的三维网格文件,可它们没有真正响应那个被改动的参数。这就是为什么论文反复强调,光看产物存在不代表产物正确。

用这些数据训练出来效果如何

光评测AI行不行还不够,这篇论文真正想验证的,是这些"验证通过"的操作轨迹,到底能不能用来训练出更强的AI。

研究者拿这1422条验证通过的轨迹,通过过采样(重复抽取)凑出3000条训练样本,去微调一个叫Qwen3.8-27B的模型。

结果相当亮眼。在Terminal-Bench 2这个考核终端智能体综合能力的评测集上,平均分从47.94%提升到53.56%,提高了将近6个百分点。在更难的长程任务评测LHTB上,从20.67%涨到27.67%。在另一个难度更高的TB4评测上,成绩从0.51%涨到3.54%,虽然绝对数字看起来都不高,但相对提升是七倍多。

更有说服力的是一个对照实验。研究团队找来另外四份同样规模的训练数据,分别来自不同的团队,叫OpenThoughts-Agent、TMax、LiteCoder-Terminal和Nemotron-Terminal。在确保每份数据占用的训练token总量完全一致的前提下(都是88.48M个"计入损失"的token,也就是AI真正需要学习预测的那部分文字量),拿SWR训练出来的模型,在全部四项评测里都排名第一。

这个结果意味着,不是"用了更多数据所以效果好",而是这批数据本身的质量更高。这就好比两个学生都花了同样多的时间复习,一个人反复刷的是贴着正确答案和详细解析的真题,另一个人刷的是网上随便搜来的未经核实的题库,最后考试成绩自然会拉开差距。如果不对数据来源做这层严格的隐藏验证把关,训练出来的模型很可能学到一堆看起来像对但实际没用的套路,表现反而可能不升反降。

团队怎么确认裁判公正

一个靠谱的训练体系,光有好数据不够,还得保证"裁判"本身公正,不然再好的数据也会被判错。

研究者为此做了一轮相当严格的压力测试。先是在开发阶段构造了3万5千多个人工制造的刁钻样本,专门测试数值误差临界点、结构正确但语义错误的输出、来自错误场景的输出等等各种边缘情况,用来校准验证器的判断标准。之后把验证器彻底冻结,不再调整,再用一批全新的、验证器从没见过的200个样本(一半正确一半错误)做盲测,结果显示验证器的误判率只有2%,无论是把错的判成对的,还是把对的判成错的,概率都控制在很低的水平。

这种"先在已知样本上调参数,再在完全陌生样本上盲测"的流程,其实很像药物临床试验的设计思路。研究人员先在实验室里反复调整药物配方,确保剂量合适;但真正要证明药有效,得找一批完全不知道自己吃的是药还是安慰剂的志愿者来测。如果没有这道盲测关卡,很容易出现"自己出题自己检验自己都说好"的循环论证陷阱,结果看起来很完美,但根本经不起外部检验。

团队还专门做了几组"同题对比"的案例分析,挑出同一个任务里,一个模型成功另一个模型失败的具体对照。其中一个机器人描述修复的任务特别典型:Qwen3.8-Max写的程序顺利通过了全部六个公开场景的检验,看起来已经完工了,结果一到隐藏测试,因为碰到一个没见过的分类数值,程序尝试把它硬转成整数,直接崩溃报错。而GPT-5.6 Sol面对同一个任务,写的程序能够优雅地处理这种没见过的新值,顺利通关。这说明"通过了所有能看到的测试"和"真正具备应对未知情况的能力",完全是两件事。

写在后面

读到这篇论文最触动我的地方,是它对"验证"这件事的态度转变。大部分研究者在做AI评测时,习惯性地把验证器当成一个背景设施,写好了就不再多想。但这篇论文花了相当大的篇幅,专门去质疑自己造的这个验证器靠不靠谱,甚至不惜做盲测、找人工复核、做压力测试去主动找自己的漏洞。这种"怀疑自己的裁判"的姿态,在我看来比方法本身更值得学习。

论文里那个"失败轨迹反而很长"的发现,也挺反直觉。常理上你会觉得,AI花更多时间琢磨、多跑几次测试,应该更容易做对。但数据显示恰恰相反,失败的任务平均交互轮次是85轮,成功的任务只要58轮。这背后其实是一种"越想越乱"的现象,AI在不确定方向对不对的时候,会反复试错、来回修改,反而把自己绕进了死胡同。这跟人考试时"越纠结越容易选错"的心理状态,倒有几分相似。

这篇论文留了一个挺大的空白没填,就是它完全没有验证这套方法能不能推广到没见过的全新软件工具上。现在的500个工作流,再怎么衍生出新任务,骨子里还是这46个软件家族的变体。如果换一个完全陌生的科学软件,这套自动验证的框架还能不能用,这个问题留给了未来的研究者。

Q&A

Q1:软件在环重建是什么?

A:这是一种自监督学习方法,拿现成的科学软件工作流当参考答案来源,让AI重新写一个功能相同的程序,再用该软件生成的隐藏测试数据检验AI写得对不对,从而解决科学领域缺乏标准答案和裁判的难题。

Q2:SWR数据集表现最好的模型是哪个?

A:在SWR100这个100题子集上,GPT-5.6 Sol表现最突出,通过率达到20%,远超其他七个参与测试的模型,后者的通过率都在2%到6%之间。

Q3:用SWR数据训练后模型提升了多少?

A:用1422条验证通过的轨迹过采样成3000条训练样本微调Qwen3.8-27B后,Terminal-Bench 2的平均成绩从47.94%提升到53.56%,在四项对比评测中均取得了最高分。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐