跳到主要内容
本周小抄:不报错的错

本周小抄:不报错的错

阿简
阿简

· 阅读约 4 分钟

AI 把你那段 Python 改成 JS,错在哪,有人认真数过了。

这周值得收的就一条,就这个。收不满,不硬凑。

论文 10 月 20 日挂上 arXiv,编号 2610.27868,主分类 cs.SE。三个作者,做的是跨语言代码翻译里的幻觉。

先把场景说清楚。代码翻译不是“帮我写段代码”,是“把我这段 Python 改成 JS,功能别动”。这活儿听着比从零生成简单,很多人默认它稳。

论文说不稳。

它把这类场景下的幻觉拆成三类。生成的代码跟源程序语义对不上。违反目标语言自己的规则。引入跟上下文不一致的依赖。

三类里最阴的是第一类。因为它不报错。

举个具体的。整数除法,Python 里 -7 // 2 得 -4,C 里 -7 / 2 得 -3。两边都合法,翻过去结果就变了。字符串编码、日期时区、数组越界,换个语言就是另一套默认行为。

语法挑不出毛病,编译器不吭声,跑起来也不崩。只是算出来的东西不对。

论文里那句话我记到现在:翻译任务里这种偏移危害更大,因为它可以在不报错的前提下改掉程序行为。

这句话该被更多玩 vibe coding 的人看见。自然语言模型胡编,你读一遍能觉出不对。代码胡编,很多时候得跑起来、对一遍数据才知道。

第二类其实最好办,编译器替你抓。第三类烦一点,它给你装了个项目里根本没有的包,或者调了隔壁文件里不存在的函数,报错要等到运行时。第一类最麻烦,什么都正常,就结果不对。

再说动机。既有的幻觉研究,大头在自然语言生成和代码生成两头。跨语言翻译夹在中间,形态和分布一直没被系统刻画。夹在中间的事最容易没人管,这次有人管了。

规模是这样:三个基准数据集,六组语言对,七个模型,人工标注 13,919 个幻觉案例。

一万三千多条,人工标。这个数字我看了两遍。这种活没人爱干,标完还得交叉核对,标错一条就污染整个统计。现在太多论文靠模型自己给自己打分,看到“人工标注”四个字,我先敬一分。

它比多刷两个点的榜单分数有用。涨分的消息传得飞快,数错误的活没人转。你真上手用的时候,卡你的从来不是“这个模型比那个高两分”,是它错的时候你看不出来。

论文后半段提了个缓解框架,叫 HaluCodeTran。名字唬人,拆开是两招。

一招,翻译之前先从库里检索几条相似的翻译示例,一起塞进上下文。用一句话讲,给它找几道类似的题,让它照着做。

另一招,让它按那张分类表自查一遍,哪条踩了就改。用一句话讲,给它一张错误清单,让它自己核对。

这两招,在 IDE 里干过活的人都在手动做。区别在于他们把它写成了流程,还测了。

但我更在意那张分类表。框架要跑实验,要有算力,要能复现。分类表是免费的。你把那三条抄下来,当自己的检查清单,比换个模型管用。

简单说,那三类错,本质上是三句问话。这段代码跟原来那段,行为一样吗。换个语言,这行还合法吗。它引用的东西,我项目里真的有吗。

三句问完,能挡掉一大半。

也补一句它没解决的。这论文给的是刻画和基线,不是“从此不出错”。用它的框架是在降概率,不是消除。谁拿这个当免检章,那是看错了。

还有一句实话。它那个反思式精炼具体怎么实现的,我只看了个大概,没吃透。先放在这里,等我弄明白再补一句。

还有个细节我没深挖。论文按翻译方向切了幻觉分布,不同方向错的类型不一样。具体结论我没细看,不敢乱讲。

本周就这些。

上面那条你要是试过,或者觉得我讲错了,欢迎告诉我。讲错的我补,没讲清的我改。

下周见。

阿简
阿简

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

查看主页 →