跳到主要内容

本周小抄:一个模型装不下所有前端框架

阿简
阿简

· 阅读约 4 分钟

为什么一个模型写 React 挺顺,换成 Vue 就编译不过?

有个词叫负迁移。简单说,同时学几个框架,学到的不是通用能力,是互相污染。这个词是从迁移学习那边借来的,本来讲的是先学会 A 反而拖累学 B。

11 月 1 日 arXiv 上挂了一篇论文,就研究这件事。题目很长,Phase-wise MLLM Tuning for Multi-framework WebUI Code Generation。NeurIPS 2026 收了,27 页。

这期就这一条。不是没别的可收,是它把一件我含糊了很久的事讲清楚了。

失败不是写得差,是写串了

论文把编译失败拆成两类。

一类是框架专有语法混着用。React 的写法和 Vue 的写法出现在同一份文件里。

另一类更麻烦。代码没违反通用语法,却违反了目标框架自己的约束。

前一类编译器一眼就报。后一类有时候能跑,只是行为不对。等你发现不对,半小时过去了。

负迁移这词不新,用在这儿是头一回

我印象里,前端代码生成这块之前更多在比谁的通过率高。很少有人把“框架之间互相踩”单独拎出来当问题。

拎出来这件事本身就有价值。问题被命名了,才好谈怎么治。这也是我挑这条的原因。它讲的不是怎么把分数刷高,是怎么把一种错分清楚。

归一化那一步,最值得抄

第一个环节叫归一化映射。保留每个框架的原生语法不动,只把变量命名和字面量内容带来的噪声压下去。

这一手挺土。但普通人能直接用。

你给模型的示例里,变量名越花,它越容易把注意力花在命名风格上。命名规整一遍,等于替它省掉一层干扰。这层干扰对模型和对人都成立。这条不用训模型,改 prompt 就行。

离线估关系那一步,我没吃透

第二个环节在离线阶段估框架之间的异质性和兼容性,再按“最大化分阶段目标”反推出训练怎么分组、组的先后顺序怎么排。

异质性,白话讲是差得有多远。兼容性,是能不能互相借鉴。这两个东西平时没人量化,他们拿来当分组的依据。说白了就是先排课程表,再上课。

老实说,“最大化分阶段目标”具体怎么算,我只看懂个大概。先放在这儿,等我读明白再补。

意图我看懂了。它不想靠人凭感觉决定“先学 Vue 再学 React”,而是让数据自己排顺序。

按阶段调 adapter

分组和顺序定下来,按阶段分别调 adapter。目的很直接,别让几个框架互相干扰。

三个环节串起来,本质上是承认了一件事。一个模型内部装不下所有前端框架。装不下就分开装,排好队,一个一个来。

结果:编译成功率也赢了

多个基准上,生成质量和编译成功率两项都优于基线。

编译成功率这项我更在意。编译失败是这套流程里最贵的一种错。模型自己不知道哪错了,得人回头一句一句看。省下的是这部分时间。

只用一个框架的人,跟这事有关系吗

有。

你现在可能只写 Vue,或者只写 React。但手上同时有两个项目,一边一个,你就已经在手动模拟这篇论文要解决的问题了。

手动模拟的做法通常是开两个对话,各说各的,别让它们知道对方存在。这跟分组调参是一个思路的低配版。低配也管用。

我不太放心的地方

分组和顺序是离线算完就固定的。

可前端框架不动是不可能的。Vue 大版本一升,很多写法直接作废。React 那边约束也在变。评估做一次,顺序定一次。这套东西的保鲜期,可能比论文的 27 页短。

不过我这个担心也可能是反的。正因为框架会变,把“框架之间的关系”显式写出来,比让模型自己从数据里悟更好改。改一个参数,总比重新训一遍便宜。

这句写完我有点后悔,因为两边都能站。留在这儿吧。

论文里我没看到关于框架版本迭代的讨论。如果有,是我漏了。

留给普通人的

你不会去训一个分阶段 adapter。

但“分组”这个思路可以抄。别在一个对话里让它同时

阿简
阿简

每周替你把 vibe-coding 圈的大事筛成一张小抄,被讲玄的概念一句话搞懂。

查看主页 →