资讯动态

当AI帮你写代码时,它到底在优化什么

发布时间:2026/9/9 9:08:57 来源:尧图企业网站定制
你有没有遇到过这种情况让AI帮你写一个网页小工具它信誓旦旦地给了你一份代码运行起来却是这也不对那也不对。按钮点了没反应输入框改了数字页面上却没更新或者干脆页面加载就报错。你把问题反馈给它它道个歉改了改结果修好了这个功能另一个又坏了。这背后其实藏着一个挺有意思的技术问题AI模型是怎么学会写出能用的交互式网页应用的这篇来自蚂蚁集团Inclusion AI团队的论文就是在琢磨怎么让AI更聪明地从错误中学习而不是像现在这样改东墙塌西墙。先说说这事儿难在哪。写一个能交互的网页应用跟解一道数学题或者写一个排序算法完全不是一回事。数学题只有对错排序算法跑一遍测试用例就知道行不行。但一个网页应用好不好用得看它是不是真的实现了用户想要的那一堆功能点击按钮能不能弹出面板输入框改了内容页面能不能同步更新操作之后状态切换对不对。这些要求往往分散在代码的不同角落有的藏在事件处理函数里有的藏在状态更新逻辑里有的藏在DOM元素或者CSS样式里。现在训练AI写代码主流方法是强化学习里的一种叫GRPO的技术。GRPO*全称Group Relative Policy Optimization一种强化学习训练方法通过让模型对同一个任务生成多份答案比较这些答案的好坏从中学习该往哪个方向调整。这个方法不需要额外训练一个打分模型相对省事,是DeepSeek-R1等模型训练中用到的核心技术之一。这套方法本身没毛病问题出在它处理网页应用这种复杂产出时的一个致命缺陷上。GRPO的工作原理简单说就是让模型针对同一个问题生成好几份答案然后打分分数高的答案就整体被表扬分数低的整体被批评。这个表扬或批评的力度术语叫优势值会被均匀地摊到答案里的每一个字在这里就是每一段代码上。问题来了如果一个网页应用里十个功能实现对了九个只有一个功能坏了那这份代码到底该被表扬还是批评如果按整体打一个分数那对的部分和错的部分会被同等对待模型根本不知道具体是哪一小段代码需要修正。这就好比你带着一份期末考卷去找老师老师不告诉你每道题对错只说你这次考了72分比上次的68分好一点继续保持。你听完是懵的到底是哪道题进步了哪道题还得加强如果不告诉你具体哪道题错在哪你下次复习的时候根本无从下手很可能是把已经学会的知识又重新复习了一遍真正的薄弱点却被忽略掉了。放在AI写代码这件事上如果不做更精细的反馈拆解模型的每一次进步都带着很大的运气成分,可能这次纠正对了错误的地方也可能强化了本来就没问题的代码。论文管这个问题叫粒度不匹配用户看到的反馈是一个个具体功能对不对但模型接收到的训练信号却是一整份代码打一个笼统的分。为了解决这个问题研究团队提出了一套叫RCCA的方法。RCCA*全称Rubric-to-Code Credit Assignment字面意思是从评分细则到代码的功劳分配核心思路是把用户能感知到的功能对错转化成对代码里具体片段的针对性训练信号。这套方法围绕一个叫rubric的东西展开。rubric*评分细则在这篇论文里指的是每个网页应用任务对应的一组具体、可检验的功能要求比如点击按钮后面板应该打开输入框内容变化后显示区域应该同步更新。每条rubric都能独立判断满足与否。这些评分细则被分成两类。一类叫初始状态型说的是页面刚加载出来的时候应该长什么样比如该有的按钮元素在不在默认显示的内容对不对。另一类叫动态型说的是用户操作之后应该发生什么变化比如点了某个按钮之后面板打不打得开。前者一加载页面就能检查后者得真的模拟一次点击、一次输入才能验证。有了这套细致的评分标准接下来的关键是怎么把它转化成能训练模型的有效信号。研究团队从两个层面下手一个是给整份代码打分的层面一个是给代码里每一小段打权重的层面。先说打分这一层研究团队设计了一套分层奖励机制。分层奖励*把生成的应用分成四个阶段依次检查分别是输出格式对不对、源代码有没有语法错误、运行起来会不会崩溃、以及最后的功能要求满足了多少。前面三关有一关不过后面的分数就直接归零或封顶只有全部通过才能进入最细致的功能打分环节。这么设计的道理其实很直白。想象你去应聘一份工作,面试官第一步先看你的简历格式对不对有没有乱码、字段全不全第二步看你写的项目经历经得起推敲吗有没有明显造假的地方第三步让你现场试讲一下能不能讲清楚会不会当场卡壳说不出话只有前三关都过了才会进入最后一轮具体考核你的专业能力到底怎样。如果不这样一层层过滤,直接把简历有错别字和专业能力差一点混在一起打一个总分那两个完全不同性质的问题会被算成差不多的结果,面试官也就是训练算法就很难判断到底该往哪个方向指导你改进。分层奖励解决的正是这个问题:格式都不对的烂代码和格式正确但只是某个小功能没做好的代码不该被同等对待前者应该被压得更低这样模型才能学到至少得先写出能跑的代码这个底线要求。在最后这层功能打分里研究团队还做了进一步的细化处理不是简单数一数错了几条rubric而是给每条rubric标上重要性等级,分成核心功能、行为正确性、渲染质量三档,再根据违反的严重程度扣分。重要功能出了大问题扣分会设一个上限防止靠满足一堆无关紧要的小要求把大问题的分数洗回来。这就像考试里如果一道大题的核心步骤全错了哪怕字迹工整、格式规范也不能靠这些加分项把大题的分数拉回及格线。分层打分解决的是整体给多少分的问题但真正解决粒度不匹配的核心创新在于接下来的这一步把评分细则的反馈落实到代码的具体片段上。这一步叫rubric到代码的定位。研究团队让负责打分的评估器本质上也是一个AI模型不只是判断每条rubric满足没满足还要求它像写代码审查意见一样具体指出问题出在哪个函数、哪个事件处理逻辑、哪个状态变量、哪块DOM区域。这些意见会先圈出直接相关的代码片段再顺着代码的调用关系往外扩一圈找出间接相关的片段,比如一个按钮的点击事件处理函数里调用了另一个更新状态的函数那这个被调用的函数也算相关联的代码。这一步做完之后就到了整套方法里最关键的操作把这些被标注出来的代码片段对应到模型生成时候用到的具体字词token上然后给不同的token分配不同的训练权重。token*语言模型处理文本时的最小单位可以理解成模型写字时一次落笔写下的最小片段可能是一个单词、一个符号也可能是半个词。具体的权重分配是这样的如果这份代码整体表现不好也就是优势值是负的那么被标记为直接相关的代码片段对应的token会被赋予3倍的权重间接相关的赋予1.5倍其他不相关的部分保持1倍。反过来如果这份代码整体表现好优势值是正的出问题的那些片段就不再额外加强让它们保持原样,反而是那些没被标记出问题的代码会得到一个1.2倍的小幅度加强。这个设计的用意值得琢磨一下。为什么表现差的代码要重点打压问题片段而表现好的代码却不去额外表扬问题片段打个比方假设你带了一个学生练琴这次演奏总体是失败的其中有一个小节明显弹错了音,你当然要重点纠正这个小节别的地方稍微提醒一下就行,这是负优势值的情况。但如果这次演奏总体是成功的只是同一个小节其实也存在瑕疵只是被其他部分的精彩表现盖过去了你会怎么处理如果这时候还使劲表扬这个有瑕疵的小节学生反而会误以为这里弹得没问题下次继续这么弹。所以更合理的做法是不去特别强化这个有瑕疵的部分转而多鼓励那些真正弹得好的地方让学生把注意力自然地引向正确的方向。这正是RCCA里正优势值时不再额外强化问题片段的设计初衷:避免把偶然蒙对的错误片段也当成榜样固化下来。如果不做这层区分会怎样答案很直接,系统会持续把能跑起来但有内伤的代码模式当成正例强化久而久之模型学到的可能只是一种表面上过关、实际上暗藏毛病的写代码习惯。把这套完整的RCCA训练流程用在一个叫Ling-3.0-Flash的模型上这是一个拥有1240亿参数、每次实际激活51亿参数的混合线性架构MoE模型MoE*全称Mixture of Experts混合专家模型一种让超大模型在处理每个具体任务时只激活其中一部分专家网络参与运算的架构设计能在保持大模型能力的同时降低实际计算成本。研究团队先用监督微调SFT的方式让模型具备基础的应用生成能力再在这个基础上用RCCA做强化学习训练最终得到的模型叫Ling-RCCA-Flash。结果怎么样呢在专门评测交互式网页应用生成能力的MiniAppBench测评上Ling-3.0-Flash原始版本只能拿到9.05分做完监督微调之后提升到26.85分再经过RCCA强化学习训练最终冲到了41.25分。这个41.25分是什么水平它略微超过了Claude Opus 4.5的41.14分同时甩开GPT-5.1的32.00分将近10个百分点。要知道这中间的跃升绝大部分是靠RCCA这一步带来的从26.85到41.25整整拉高了14.4个百分点这个提升幅度比之前监督微调阶段带来的提升还要大。更让人意外的是这套方法训练出来的模型拿到另一个完全不同的测评ArtifactsBench上一个覆盖更广泛的视觉与交互类应用生成任务的评测集也表现出色拿到76.19分比训练前的SFT模型高出4.48分并且超过了官方排行榜上原本排名第一的GPT-5的72.55分反超3.64分。这个跨基准的提升说明了什么它意味着RCCA学到的不是如何在MiniAppBench这道特定考题上刷分的应试技巧,而是某种更通用的、可迁移的写代码能力,把优化信号精确对应到具体实现区域这件事本身就在培养一种更扎实的编程习惯这种习惯换到别的考场依然管用。这里其实藏着一个更深的问题值得多想一层。传统意义上我们训练AI模型解决问题常常满足于让它在某个具体的评测榜单上刷出更高的分数,但一个方法如果只对一个榜单有效换个场景就失灵那说明它可能只是学会了应付这道题的表面套路而不是真正学到了底层能力。RCCA这次能同时在两个完全不同的评测集上都拿到亮眼成绩某种程度上说明它抓住了一个更本质的东西:把反馈精确到位这件事本身就是一种能穿越具体任务的通用能力。当然这套方法也不是万能的。论文自己也承认它现在评测的还只是相对单页的HTML/CSS/JavaScript应用像是需要后端服务、需要持久化存储、需要用户登录认证的大型多页面应用还没有被验证过。另外整套RCCA高度依赖那个负责打分和定位问题的评估器,如果这个评估器自己判断错了把责任归咎到了错误的代码片段上尤其是当一个bug其实是由两块相距很远的代码共同导致的时候模型学到的可能反而是错误的关联这是一个还没被完全解决的隐患。写在后面读完这篇论文最触动我的一点是,它其实在回答一个比怎么写好网页代码更大的问题当我们用强化学习训练AI时反馈的分辨率有多重要。现在很多强化学习训练依然停留在一份答案打一个分的粗颗粒度上这套逻辑放在数学题这种非黑即白的场景里问题不大但一旦任务变得复杂、由多个可拆解的子目标构成这种粗颗粒度反馈就会显著拖慢学习效率,甚至学出偏差。RCCA这篇论文提供的思路本质上是把复杂任务拆解成一组可独立检验的小要求再把每个小要求的结果精确映射回产生它的那部分代码。这个思路其实不难迁移到别的领域,任何一个可以被拆分成多个独立可检验子目标的复杂任务理论上都可以借鉴这套整体打分局部定位差异化权重的组合拳。另一个让我留意的细节是论文里提到评估器不仅要判断rubric满足没满足还要生成一段自然语言描述指出问题出在哪个函数、哪个变量。这意味着这套系统里AI在用文字给AI挑错,评估模型写的诊断意见最终变成了训练信号里的权重系数。这种用语言反馈驱动训练信号的做法某种程度上打破了我原来对强化学习训练信号必须是数值化的默认印象,原来自然语言本身只要能被恰当地转化成代码位置信息也可以精确地参与到梯度更新里去。这套方法目前测的还只是相对简单的网页小应用如果哪天真要用在一个包含几十个文件、几万行代码的真实项目上那个定位到底是哪一小段代码出了问题的评估器,能不能撑得住这么大的复杂度会不会自己先犯迷糊这是我读完之后一直在琢磨的问题。QAQ1RCCA是什么ARCCA全称Rubric-to-Code Credit Assignment是一种强化学习训练框架能把用户能感知到的功能对错反馈转化成对代码具体片段的针对性训练信号解决了传统方法把整份代码笼统打分导致的训练效率低问题。Q2Ling-RCCA-Flash在测评中表现如何A在MiniAppBench测评中拿到41.25分超过Claude Opus 4.5比原始模型提升32.2分在ArtifactsBench测评中拿到76.19分超过GPT-5的官方成绩显示出跨场景的迁移能力。Q3RCCA和标准GRPO训练方法有什么区别A标准GRPO把一份代码的所有优缺点合并成一个整体分数均匀分配给每个字词RCCA则通过分层奖励和代码定位技术把训练信号精确对应到导致成功或失败的具体代码片段上实现更精细的功劳分配。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价