Token导航 LogoToken导航TokenDH.com

乔治亚理工学院与苏黎世联邦理工学院联手:让AI智能体“跟着老师学”,软件修复能力直逼30B大模型

更新时间 2026-05-20来源 科技行者正文 6720字阅读约 21分钟

这项由乔治亚理工学院与苏黎世联邦理工学院联合开展的研究,以预印本形式发布于2026年5月,论文编号为arXiv:2605.12913,有兴趣深入探究的读者可通过该编号查阅完整论文。

一、当AI助手开始"跑偏":为什么训练方法很重要

假设你正在教一个孩子学骑自行车。最传统的方法是:你骑给他看,然后让他照着模仿。问题在于,你展示的每一个动作都是在路况完美的情况下完成的——平坦的地面、好天气、没有障碍物。但真正骑车时,孩子会遇到坑洼、急转弯,甚至突如其来的小石子。因为他从来没在这些真实场景里练习过,一旦出现意外,他就不知道该怎么办,只能手忙脚乱地摔倒。

大型语言模型(可以理解为"具备强大文字理解与生成能力的AI系统")在扮演智能体角色时,面临的正是这个困境。所谓"智能体",就是能够自主执行多步骤任务的AI——比如帮你阅读一个软件项目的代码、找到其中的问题、修改文件、最终提交修复方案。这个过程往往需要连续完成几十个步骤,每一步的结果都会影响下一步。

目前主流的训练方法大致分为两类。第一类叫"监督微调",可以理解为"看老师示范然后照做"——用一个更强大的老师AI生成大量示范轨迹,然后让学生AI死记硬背这些操作步骤。这种方法给了学生非常详细的指导,但有一个根本缺陷:老师示范的场景都是顺风顺水的,学生AI一旦在真实使用中犯了一个小错误,接下来的状态就和训练时完全不一样了。错误会像滚雪球一样越滚越大,最终整个任务彻底失败。研究人员把这种现象叫做"协变量偏移",用骑车来理解就是:你在平路上练了一百遍,到了有坑的路上还是不会处理。

第二类叫"强化学习",可以理解为"自己摸索、靠结果奖罚来学习"——让AI自己执行任务,只在最后给出一个对或错的信号。这种方法解决了上面的问题,因为AI是在真实场景里练习的。但它又带来了另一个困难:反馈太稀疏了。AI做了几十步操作,最后才知道成功还是失败,根本不清楚是哪一步出了问题。就像学骑车时,你练了半小时,教练只说"没学会,继续练",却不告诉你哪里做错了,效率极其低下,而且如果一开始就摔倒了,也就没有什么有价值的经验可以总结。

还有一种更新的方法叫"在线策略蒸馏",它试图结合两者的优点——让学生AI在自己产生的轨迹上接受老师的指导。但这里有一个"冷启动"的麻烦:学生AI在训练初期能力很弱,自己跑出来的轨迹往往在中途就失败了,老师只能在这些失败的残局上打补丁,效果依然有限。更麻烦的是,这种方法需要能够直接读取老师AI的内部概率数据,如果老师是GPT或Gemini这类商业系统,根本就拿不到这些数据。

研究团队由此提出了一个核心问题:有没有一种方法,既能给学生提供丰富详细的指导,又能让它在真实场景中练习,同时还能避免初期因能力太差而浪费时间?

二、从经典算法中找到答案:让学生和老师交替掌舵

解答这个问题的灵感来自一个有几十年历史的算法:DAgger(Dataset Aggregation,数据集聚合)。这个算法在2011年由卡内基梅隆大学的研究者提出,当时是为了解决机器人控制中的类似问题。其核心思想非常朴素:在每一次练习中,既让学生做一部分动作,也让老师接管一部分,然后把老师在学生产生的状态下做出的正确示范记录下来,供学生学习。

研究团队将这个思想移植到了多步骤AI智能体的训练中,并针对大型语言模型的特点做了精心改造。

具体来说,他们设计了一种"交替掌舵"的轨迹采集方式。在每一轮训练中,对于每一步操作,系统都会随机决定:这一步由学生AI来执行,还是由老师AI来执行?这个随机概率在训练初期倾向于让老师多做,随着训练进行逐渐转向让学生多做。这样一来,早期轨迹主要由老师引导,不容易出现失控的局面;后期轨迹越来越多地反映学生自己会遇到的真实状态。

但最关键的设计在这里:无论这一步是谁在执行,系统都会同时询问老师"你会怎么做",并把老师的回答记录下来作为训练标签。也就是说,即便这一步是学生自己做的,学生的动作进入了环境、产生了真实的状态变化,老师依然会在这个由学生造成的状态下给出示范。学生事后就可以对照:我当时是怎么做的,老师会怎么做,哪里不一样,从而学习改进。

用骑车的比喻来理解:你和一位有经验的教练轮流骑同一辆车,但有一个规则——无论是谁在骑,教练都会在旁边同步演示"我此刻应该怎么操作"。当你骑到一个坑洼路段,你可能用了错误的方式处理,但教练同时示范了正确处理方式。你在事后复盘时就能清楚地看到:在这种糟糕的路况下,正确的应对是什么样的。

研究团队还设计了第二种变体,叫"AggreVaTe风格"的滚动方式。这种方式不是每步随机切换,而是先让学生连续走一段,再在某个时间点把剩余部分全部交给老师来完成。这样就形成了"学生开头、老师收尾"的完整轨迹,学生产生的前半段状态是真实的、可能包含错误的,老师在这些状态上完成后半段则保证了轨迹整体上是成功的有价值的示范。

这两种方式都在解决同一个问题:确保学生能在它真正会遇到的状态上看到正确示范,而不是只见过老师在完美状态下的操作。

在训练目标上,研究团队采用了一个非常直接的方式:把老师在每个状态下生成的回答当作"正确答案",让学生尽可能接近这些答案。这是一种密集的、每步都有反馈的监督信号,比强化学习那种"最后才知道对不对"的方式信息量丰富得多。

三、一个统一视角:把所有训练方法放在同一张地图上

为了更清晰地说明这种方法的独特之处,研究团队构建了一个统一的分析框架,把所有主流训练方法用同一套语言来描述。

他们发现,所有训练方法都可以用三个问题来刻画:训练用的状态(AI面对的场景)从哪里来?训练用的答案标签从哪里来?每个训练样本的重要性如何权衡?

传统监督微调的回答是:状态来自老师的轨迹,标签也来自老师,每个样本权重相同。优点是标签质量高,缺点是状态来自老师、和学生真实遇到的不一样。

强化学习的回答是:状态来自学生自己的轨迹,标签也是学生自己的动作,权重则是根据这个动作好不好来调整。优点是状态是真实的,缺点是标签质量差、反馈稀疏。

在线策略蒸馏的回答是:状态来自学生轨迹,标签也是学生的动作,但权重用老师的评分来调整。它比强化学习多了一些老师的智慧,但状态仍然完全依赖学生自己走,早期容易失控。

而这篇论文提出的方法的回答是:状态来自学生与老师混合生成的轨迹,标签则始终来自老师,每个样本权重相同。它用混合轨迹解决了"状态不真实"的问题,又用老师标签保证了"指导质量",还用相同权重避免了复杂的奖励估计问题。

这张"地图"清晰地展示了各方法的权衡关系,也说明了为什么这种新方法在理论上能够填补其他方法的空缺。

四、把AI变成软件工程师:真实实验的挑战与设计

研究团队选择了一个相当有难度的测试场景:让AI解决真实的GitHub软件问题。这是一个极长链条的任务——AI需要在一个真实的代码仓库里,先浏览文件结构、理解代码逻辑,然后找到导致问题的具体位置,再动手修改代码,最后提交补丁。这个过程往往需要连续进行几十次操作,且每一步的判断失误都可能让整个后续工作白费。

实验中,充当"学生"的模型是来自阿里云的Qwen3系列,分别选用了40亿参数(4B)和80亿参数(8B)两个规模。充当"老师"的则是更强大的Qwen3-Coder-30B-A3B-Instruct,一个拥有约300亿参数的大模型(但实际激活参数约为30亿)。老师模型在所有实验中都保持不变,不参与训练,只负责提供示范。

训练数据来自SWE-Gym,这是一个包含2438个真实软件工程任务的训练环境,每个任务都配有可执行的单元测试,可以自动判断修复是否成功。研究团队额外保留了100个任务作为内部测试集,最终评测则使用SWE-Bench Verified,这是一个由人工验证的标准化软件修复基准测试,共有466个有效任务。

在具体实现上,每轮训练采集512条任务轨迹。对于DAgger风格的采集方式,老师介入的概率从100%出发,每轮降低20个百分点,最终稳定在60%。也就是说,到第三轮训练时,平均每一步有60%的概率是老师执行,40%是学生执行,学生产生的状态开始占据相当比例。共进行5轮这样的迭代。整个训练在4块A100 GPU上完成,与竞争方法使用相同的计算资源。

与之对比的基线方法包括:传统监督微调(使用老师生成的684条成功轨迹训练)、强化学习GRPO(在293个专门挑选的中等难度任务上训练)、以及在线策略蒸馏(学生自己走轨迹、老师提供概率指导)。所有方法都在相同的智能体框架OpenHands下运行,使用相同的工具集。

五、数字背后的故事:实验结果究竟说明了什么

在内部测试集SWE-Gym Holdout上,4B模型经过DAgger训练后达到了17%的解决率,而在线策略蒸馏是16%,监督微调是15%,强化学习GRPO是8%,未训练的基础模型只有5%。在更权威的SWE-Bench Verified上,4B的DAgger模型达到了27.3%,在线策略蒸馏是23.4%,监督微调是22.9%,强化学习是11.6%,基础模型是11.2%。

8B模型的结果更加突出。DAgger训练后在SWE-Bench Verified上达到29.8%,在线策略蒸馏是26.2%,监督微调是23.4%,强化学习是8.2%,基础模型是7.7%。

这些数字的意义或许在与其他系统的横向比较中才能真正显现出来。目前公开发布的同规模系统中,最强的7B级别软件修复智能体R2E-Gym-7B-Agent在SWE-Bench Verified上得了19%——而这篇论文训练的4B模型就已经超过了它,达到27.3%。更令人注目的是,这个4B模型还超越了大量8B规模的系统,包括SkyRL-Agent-8B-v0(9.4%)和SWE-smith-LM-7B(15.2%)。

至于8B的DAgger模型,它以29.8%的成绩超越了SWE-Gym-32B这个320亿参数系统(20.6%),与更强的R2E-Gym-32B-Agent(34.4%)和SWE-Dev-32B(36.6%)的差距也只剩下不到7个百分点。换句话说,一个只有32B系统四分之一参数量的模型,在同样的软件修复任务上已经逼近了32B系统的性能水平。

研究团队还专门考察了训练样本数量与性能的关系。在训练样本只有3000条时,DAgger风格训练就已经在内部测试集上达到12%、在SWE-Bench验证子集上达到20%,而在线策略蒸馏此时只有9%和13%。这印证了"老师介入避免冷启动"的预期效果:在学生还很弱的早期阶段,老师的频繁接管保证了轨迹不会过早崩溃,从而为学生提供了高质量的起点。随着训练样本增加到8000条以上,DAgger方法持续提升,而监督微调在达到一定水平后开始出现性能回落,验证了协变量偏移会随着训练深入而逐渐显现的理论预测。

六、"跑偏"程度的量化:协变量偏移被真实测量到了

研究团队还做了一个比较精妙的分析,直接测量了训练方法是否真的减少了"学生在真实场景中跑偏"的问题。

他们的方法是:从100个任务中分别让训练好的模型自己走完轨迹,然后在这些学生自己产生的状态上,比较学生模型和老师模型做出决策的差异程度。差异用"反向KL散度"来量化——这可以理解为:如果老师和学生在同一个状态下都要做选择,他们的选择有多大的不同。差异越小,说明训练越成功地让学生在真实遇到的状态下接近了老师。

结果非常清晰。监督微调训练的模型在训练初期差异快速下降(从约0.27降到0.10),看似不错,但随后又反弹回约0.126——这正是协变量偏移的典型表现:模型在老师示范的状态上学得很好,但随着它自己的能力增长,它开始走到老师从未示范过的状态,差异就再次扩大了。

相比之下,DAgger风格和AggreVaTe风格的训练模型在差异降到0.10附近后,就一直保持稳定,没有出现反弹。这意味着随着训练深入,这些模型在自己真正会遇到的状态上,始终保持着与老师相近的判断方式。在使用8000条训练样本时,两种混合训练方式比监督微调减少了约20%的偏移程度。

与在线策略蒸馏相比,混合训练方法在早期(约3000条样本时)就已经接近0.10的低差异水平,而在线策略蒸馏此时仍然维持在约0.126。这支持了研究者关于"冷启动"问题的判断:在线策略蒸馏早期因为学生自己走轨迹容易崩溃,产生了很多无效的训练信号,所以收敛更慢。

七、AI犯错的方式也在悄悄改变

研究团队还做了一项定性分析,用另一个大型语言模型(Claude Opus)充当"法官",对所有没有成功解决任务的轨迹进行分类,找出主要失败原因。这项分析揭示了一些有趣的规律。

未经训练的基础模型有接近48%的轨迹根本没有提交任何代码修改,它经常在中途迷失方向,不知道该做什么。强化学习训练的模型情况几乎没有改善,提交率仍然只有约53%,这与前面的性能数字一致:强化学习在这个任务上收益甚微。

监督微调和在线策略蒸馏都大幅提高了提交率(分别到97.6%和98.5%),说明它们成功教会了模型"要提交修复"这件事。但监督微调的提交代码中有20.3%存在语法错误或运行时错误,说明它学会了"提交的动作",但代码质量还有问题。在线策略蒸馏则有44.3%的失败案例陷入了重复循环——模型反复做同样的操作却没有进展,这是一种"卡死"的状态,可能正是早期训练轨迹质量差导致的。

DAgger训练的模型在这两方面都有改善:提交率维持在97.9%,语法/运行时错误降到15.9%,重复循环率也明显降低(22.7%)。失败的轨迹主要集中在"上下文溢出"(57.5%),也就是代码仓库太大、对话历史太长,模型的处理能力到了上限。这是一种"努力了但力有不逮"的失败,而非"不知道该做什么"或"走错了方向"的失败。

这个变化有一层重要含义:经过DAgger训练,模型的失败原因从"能力根本缺失"转向了"处理长上下文的容量限制"。前者是训练方法问题,后者是模型本身的规模问题。这说明这种训练方式已经充分发挥了当前模型规模的潜力,剩余的瓶颈来自别处。

AggreVaTe风格的训练在"找错文件"这一失败类型上表现最好(只有15.7%),说明让老师完成轨迹后半段有助于模型学会如何在代码仓库里正确定位问题所在。

说到底,这项研究做的事情其实可以用一句话概括:把一个三十年前就有的朴素想法(让学生在自己会遇到的状态上学习)和最新的大语言模型训练结合起来,效果出奇地好。一个40亿参数的模型打败了大多数80亿参数的对手,一个80亿参数的模型逼近了320亿参数系统的水平——参数量差了四倍,但差距只剩不到7个百分点。

这对普通人意味着什么?更小的模型能做到相近的事,意味着更低的计算成本、更快的响应速度、更容易在个人设备或企业本地系统中部署。未来软件开发辅助工具或许不再需要连接到巨型云端模型,在本地跑一个经过精心训练的小模型就能完成相当复杂的修复任务。

当然,研究团队也诚实地指出了局限:目前的实验只在软件工程这一个领域做了验证,在网页操作、数据分析等其他需要多步骤的任务上是否同样有效还需要验证。同时,这种方法依赖一个更强大的老师模型,如果没有好的老师,也就无法产生高质量的示范。另外,剩余失败案例中"上下文溢出"占主导地位,说明即使训练方法改善了,模型处理超长代码仓库的能力仍然是下一个需要突破的瓶颈。

研究的完整内容和实验细节以预印本形式存档于arXiv,编号2605.12913,感兴趣的读者可以直接检索查阅。

Q&A

Q1:DAgger训练方法和普通监督微调相比有什么本质区别?

A:普通监督微调让AI只在老师示范的场景里学习,但真实使用时AI会遇到自己造成的状态,形成"学的和用的不一样"的问题。DAgger方法让学生AI和老师AI交替执行操作,在学生产生的真实状态下也收集老师示范,训练数据因此更接近真实使用场景,减少了这种偏差。

Q2:为什么4B模型能超过很多8B模型的软件修复性能?

A:参数量只代表模型规模,不代表最终能力,训练方法同样至关重要。DAgger方式让4B模型在训练时接触了更真实的操作场景,获得了更密集的老师指导,减少了"走偏"的情况,所以最终解决任务的能力超过了用传统方法训练的更大模型。

Q3:SWE-Bench Verified是什么类型的测试?

A:SWE-Bench Verified是一个软件工程修复基准测试,包含真实GitHub代码仓库的问题单,要求AI找到并修复代码中的缺陷,提交的补丁必须通过专门的回归测试才算成功解决。它由人工验证,是目前该领域的主流评测标准之一,共有466个有效任务。

文章标签合作大模型智能体
资讯来源:由AI资讯编辑整理自互联网公开内容,版权归原作者所有,未经许可,不得转载。

继续浏览更多资讯

返回资讯目录

相关资讯

更多