![]()
當(dāng)我們看到一段代碼時(shí),計(jì)算機(jī)"看到"的可能和我們完全不同。來(lái)自加拿大滑鐵盧大學(xué)的李銀璽、鄧云天和聶鵬宇三位研究者在2025年10月發(fā)表的這項(xiàng)研究(論文編號(hào)arXiv:2510.14972v1)揭示了一個(gè)令人意外的現(xiàn)象:那些被譽(yù)為編程神器的大型語(yǔ)言模型,實(shí)際上可能連最基本的代碼"閱讀理解"都存在嚴(yán)重問(wèn)題。
這個(gè)問(wèn)題就像是讓一個(gè)只會(huì)普通話的人去理解各地方言一樣棘手。同樣一句"你好嗎",用不同的方言表達(dá)出來(lái),這個(gè)人可能就完全聽(tīng)不懂了。在編程世界里,同樣功能的代碼可以有無(wú)數(shù)種寫法——有的程序員喜歡在符號(hào)之間加空格,有的不加;有的喜歡用下劃線命名變量,有的喜歡用駝峰式命名。這些差異在程序運(yùn)行時(shí)毫無(wú)影響,就像不同的方言表達(dá)的是同一個(gè)意思。
但研究團(tuán)隊(duì)發(fā)現(xiàn)了一個(gè)令人震驚的事實(shí):當(dāng)前最先進(jìn)的AI編程助手遇到這些"方言"時(shí),表現(xiàn)會(huì)出現(xiàn)顯著差異。這就好比一個(gè)號(hào)稱精通中文的翻譯官,聽(tīng)到"你好嗎"能完美翻譯,但聽(tīng)到同樣意思的"你好不好"就翻譯錯(cuò)了。更夸張的是,有時(shí)候僅僅是在代碼中的一個(gè)點(diǎn)號(hào)后面加個(gè)空格,AI就可能給出完全不同的答案。
研究團(tuán)隊(duì)將這種現(xiàn)象稱為"TOKDRIFT",意思是"標(biāo)記漂移"。他們發(fā)現(xiàn),問(wèn)題的根源在于AI理解代碼的方式存在根本性缺陷。AI使用的是一種叫做"子詞標(biāo)記化"的技術(shù)來(lái)"切分"代碼,就像用刀切蛋糕一樣。但這種切分方式是基于統(tǒng)計(jì)頻率的,而不是基于編程語(yǔ)言的真正語(yǔ)法規(guī)則。
舉個(gè)具體例子來(lái)說(shuō)明這種荒謬程度。假設(shè)有一段Python代碼調(diào)用一個(gè)名為"factorial"的函數(shù),寫成".factorial"的形式。當(dāng)程序員在點(diǎn)號(hào)和函數(shù)名之間加了一個(gè)空格,變成". factorial"時(shí),AI的"切分刀"就會(huì)完全改變切分方式。原本可能被切成[".factor", "ial"]這樣莫名其妙的片段,加了空格后變成了[".", "factorial"]這樣更合理的切分。結(jié)果就是,AI對(duì)同樣功能的代碼給出了截然不同的理解和輸出。
這種現(xiàn)象的普遍性令人擔(dān)憂。研究團(tuán)隊(duì)測(cè)試了九個(gè)不同的AI編程助手,包括一些擁有超過(guò)300億參數(shù)的大型模型。他們?cè)O(shè)計(jì)了24種不同的"方言"變換規(guī)則,涵蓋了程序員在日常編程中常見(jiàn)的格式差異。這些規(guī)則分為兩大類:命名風(fēng)格變換和空格風(fēng)格變換。
命名風(fēng)格變換就像是把"userName"改成"user_name",或者把"user_name"改成"UserName"。在編程語(yǔ)言的世界里,這些都是完全等價(jià)的表達(dá)方式,就像"西紅柿"和"番茄"指的是同一種蔬菜。但AI卻經(jīng)常把它們當(dāng)成不同的東西來(lái)處理。
空格風(fēng)格變換更加細(xì)微,比如在操作符前后加減空格,或者在括號(hào)周圍調(diào)整空格。這些改動(dòng)對(duì)程序的功能毫無(wú)影響,就像在句子中調(diào)整標(biāo)點(diǎn)符號(hào)的空格不會(huì)改變句子的意思一樣。但AI的表現(xiàn)卻會(huì)因此發(fā)生變化。
研究團(tuán)隊(duì)進(jìn)行了大規(guī)模的實(shí)驗(yàn),測(cè)試了三種典型的編程任務(wù):代碼修復(fù)、代碼總結(jié)和代碼翻譯。結(jié)果令人震驚。即使是表現(xiàn)最好的AI模型Qwen2.5-Coder-32B-Instruct,也有6.09%的概率在面對(duì)這些"方言"變化時(shí)給出不同的答案。更極端的情況下,某些特定的格式變化甚至能讓AI的回答錯(cuò)誤率飆升到60%。
這個(gè)發(fā)現(xiàn)的深層含義是什么呢?這就好比發(fā)現(xiàn)了一個(gè)自稱精通多國(guó)語(yǔ)言的翻譯官,實(shí)際上只是死記硬背了一些固定句式,一旦遇到稍微不同的表達(dá)方式就束手無(wú)策。當(dāng)前的AI編程助手雖然在標(biāo)準(zhǔn)測(cè)試中表現(xiàn)優(yōu)異,但它們對(duì)代碼的理解可能比我們想象的要膚淺得多。
研究團(tuán)隊(duì)還深入分析了問(wèn)題的技術(shù)根源。他們發(fā)現(xiàn),這種敏感性問(wèn)題從AI的第一層就開(kāi)始顯現(xiàn),并且在整個(gè)處理過(guò)程中持續(xù)存在。通過(guò)分析AI內(nèi)部的"思考過(guò)程",他們發(fā)現(xiàn)AI在處理代碼時(shí)確實(shí)把看似相同的代碼片段理解成了完全不同的東西。
更有趣的是,研究團(tuán)隊(duì)還發(fā)現(xiàn)了一個(gè)規(guī)律:當(dāng)代碼中的標(biāo)識(shí)符被切分成不同片段時(shí),AI的敏感性會(huì)顯著增加。這就像是把一個(gè)完整的單詞"apple"隨機(jī)切成"ap"和"ple",然后期望讀者還能正確理解這是在說(shuō)蘋果一樣荒謬。
這項(xiàng)研究揭示的問(wèn)題不僅僅是技術(shù)層面的缺陷,更是對(duì)整個(gè)AI編程助手發(fā)展方向的質(zhì)疑。如果AI連基本的代碼"方言"都處理不好,我們又怎么能指望它們?cè)趶?fù)雜的編程任務(wù)中表現(xiàn)可靠呢?
研究團(tuán)隊(duì)提出,解決這個(gè)問(wèn)題需要從根本上改變AI理解代碼的方式。他們建議開(kāi)發(fā)更加"語(yǔ)法敏感"的標(biāo)記化技術(shù),讓AI能夠按照編程語(yǔ)言的真正語(yǔ)法規(guī)則來(lái)理解代碼,而不是簡(jiǎn)單地基于統(tǒng)計(jì)頻率進(jìn)行切分。
這個(gè)發(fā)現(xiàn)對(duì)整個(gè)AI編程領(lǐng)域都具有重要啟示。它提醒我們,盡管AI編程助手在某些方面表現(xiàn)出色,但在可靠性和魯棒性方面還有很長(zhǎng)的路要走。對(duì)于依賴AI編程助手的開(kāi)發(fā)者來(lái)說(shuō),了解這些局限性有助于更好地使用這些工具,避免因?yàn)楦袷讲町惗玫讲灰恢碌慕Y(jié)果。
從長(zhǎng)遠(yuǎn)來(lái)看,這項(xiàng)研究為AI編程助手的改進(jìn)指明了方向。未來(lái)的AI系統(tǒng)需要更深入地理解編程語(yǔ)言的本質(zhì),而不是僅僅依賴表面的模式匹配。只有這樣,AI編程助手才能真正成為程序員可靠的伙伴,而不是一個(gè)容易被"方言"困擾的助手。
這項(xiàng)研究也提醒整個(gè)AI社區(qū),在追求性能提升的同時(shí),不能忽視基礎(chǔ)的魯棒性問(wèn)題。畢竟,一個(gè)在標(biāo)準(zhǔn)測(cè)試中得分很高但在實(shí)際使用中表現(xiàn)不穩(wěn)定的AI系統(tǒng),對(duì)用戶來(lái)說(shuō)價(jià)值是有限的。研究團(tuán)隊(duì)已經(jīng)將他們的框架和數(shù)據(jù)開(kāi)源,希望能推動(dòng)更多研究者關(guān)注這個(gè)重要但被忽視的問(wèn)題。
說(shuō)到底,這項(xiàng)研究告訴我們,AI編程助手雖然強(qiáng)大,但還遠(yuǎn)未達(dá)到我們期望的成熟度。在享受AI帶來(lái)的便利的同時(shí),我們也需要保持清醒的認(rèn)識(shí),了解它們的局限性,并為未來(lái)的改進(jìn)提供支持。畢竟,真正可靠的AI編程助手應(yīng)該能夠理解代碼的本質(zhì),而不是被表面的格式差異所困擾。
Q&A
Q1:什么是TOKDRIFT現(xiàn)象?
A:TOKDRIFT是指AI編程助手在處理功能相同但格式略有不同的代碼時(shí),會(huì)給出不同結(jié)果的現(xiàn)象。比如在代碼中加個(gè)空格或改變變量命名風(fēng)格,AI就可能產(chǎn)生完全不同的理解和輸出,就像一個(gè)翻譯官聽(tīng)不懂方言一樣。
Q2:為什么AI編程助手會(huì)出現(xiàn)這種問(wèn)題?
A:?jiǎn)栴}源于AI使用的"子詞標(biāo)記化"技術(shù)。這種技術(shù)基于統(tǒng)計(jì)頻率來(lái)切分代碼,而不是根據(jù)編程語(yǔ)言的語(yǔ)法規(guī)則。就像用錯(cuò)誤的方式切蛋糕,導(dǎo)致AI把同樣的代碼理解成不同的含義。
Q3:這個(gè)發(fā)現(xiàn)對(duì)程序員有什么影響?
A:這提醒程序員在使用AI編程助手時(shí)要注意代碼格式的一致性,同時(shí)要對(duì)AI的輸出保持謹(jǐn)慎態(tài)度。不能完全依賴AI的判斷,特別是在處理關(guān)鍵代碼時(shí),需要人工驗(yàn)證AI的建議是否正確。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.