為什么人工智能生成的代碼不夠好?如何變得更好? 原創(chuàng)
我們是否過(guò)早地標(biāo)準(zhǔn)化了人工智能生成的代碼?以下是它的不足之處及改進(jìn)方式。
近年來(lái),大型語(yǔ)言模型(LLM)迅速興起,帶動(dòng)了生產(chǎn)率的大幅提高。編程助手的蓬勃發(fā)展,數(shù)百萬(wàn)個(gè)多行代碼塊通過(guò)按鍵便可輕松實(shí)現(xiàn)生成及合并。這一切就像變魔術(shù)一樣。但在每個(gè)人的內(nèi)心深處都有一個(gè)揮之不去的想法——我真的能相信這段代碼嗎?
時(shí)至今日,質(zhì)疑人工智能在軟件開(kāi)發(fā)中的價(jià)值無(wú)疑是可笑的,因?yàn)樗缫巡豢杀苊獾馗畹俟?。微軟?bào)告稱(chēng),有1.5億開(kāi)發(fā)人員使用GitHub Copilot。Stack Overflow在2024年的調(diào)查發(fā)現(xiàn),61.8%的開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中使用人工智能。谷歌聲稱(chēng)超過(guò)四分之一的新代碼是人工智能生成的。
簡(jiǎn)而言之,人工智能生成的代碼已經(jīng)成為常態(tài)!但它真的能勝任這項(xiàng)任務(wù)嗎?
AI生成代碼存在的問(wèn)題
Exabeam首席產(chǎn)品官史蒂夫?威爾遜(Steve Wilson)表示:“讓我們面對(duì)現(xiàn)實(shí)吧!LLM不是軟件工程師。它們就像有著金魚(yú)記憶的實(shí)習(xí)生,雖然很擅長(zhǎng)快速完成任務(wù),但并不擅長(zhǎng)追蹤大局?!?/p>
隨著對(duì)人工智能依賴(lài)的增加,這種“大局”正在被邊緣化。具有諷刺意味的是,根據(jù)《2025年軟件交付狀況報(bào)告》顯示,開(kāi)發(fā)人員的總工作量正在增加——大多數(shù)開(kāi)發(fā)人員需要花更多的時(shí)間來(lái)調(diào)試人工智能生成的代碼和解決安全漏洞。
Onymos聯(lián)合創(chuàng)始人兼工程副總裁巴瓦尼?萬(wàn)加拉(Bhavani Vangala)表示:“人工智能的輸出通常相當(dāng)不錯(cuò),但仍然不夠可靠。它需要更加準(zhǔn)確和一致。開(kāi)發(fā)者仍然需要審查、調(diào)試和調(diào)整它?!?/p>
為了改進(jìn)人工智能生成的代碼,我們必須解決關(guān)鍵問(wèn)題:不信任、代碼質(zhì)量問(wèn)題、上下文限制、幻覺(jué)和安全風(fēng)險(xiǎn)。人工智能顯示出令人難以置信的前景,但人類(lèi)的監(jiān)督仍然至關(guān)重要。
代碼膨脹和上下文限制
AI代碼完成工具傾向于從頭開(kāi)始生成新代碼,而不是重用或重構(gòu)現(xiàn)有代碼,從而導(dǎo)致技術(shù)債務(wù)。更糟糕的是,它們傾向于重復(fù)代碼,失去了代碼重用的機(jī)會(huì),并增加了必須維護(hù)的代碼量。當(dāng)冗長(zhǎng)或低效的代碼增加了技術(shù)債務(wù)時(shí),就會(huì)出現(xiàn)代碼膨脹和可維護(hù)性問(wèn)題。
GitClear公司發(fā)布的《2025年AI Copilot代碼質(zhì)量報(bào)告》分析了2.11億行代碼變化,并發(fā)現(xiàn)在2024年,重復(fù)代碼塊的頻率增加了8倍。研究還指出,除了增加不必要的技術(shù)債務(wù)之外,克隆的代碼塊還會(huì)造成更多的(高出15%到50%)安全漏洞。
這些問(wèn)題源于人工智能有限的上下文。人工智能擁有的上下文無(wú)疑是越多越好,但提供給人工智能模型的信息量總是有限的。GitHub報(bào)告稱(chēng),Copilot Chat有一個(gè)64k-128k的令牌上下文窗口,相當(dāng)于大約30到100個(gè)小文件或5到20個(gè)大文件。雖然上下文窗口正在增長(zhǎng),但它們?nèi)匀徊蛔阋哉莆胀暾能浖軜?gòu)或建議適當(dāng)?shù)闹貥?gòu)。
缺乏“大局觀”思維
雖然人工智能擅長(zhǎng)模式識(shí)別,但它看不到代碼背后的“原因”,缺乏高級(jí)工程師所具備的全面背景和解決問(wèn)題的能力,這限制了它在業(yè)務(wù)邏輯、用戶(hù)體驗(yàn)或長(zhǎng)期可維護(hù)性之間進(jìn)行權(quán)衡的能力。
編碼本質(zhì)上是一項(xiàng)創(chuàng)造性的、以人為中心的活動(dòng)。人工智能無(wú)法創(chuàng)造以前不存在的新事物。而開(kāi)發(fā)人員則可以利用創(chuàng)造力和對(duì)人類(lèi)偏好的了解來(lái)構(gòu)建專(zhuān)門(mén)為最終用戶(hù)設(shè)計(jì)的解決方案。
因此,在生成整個(gè)程序或需要更廣泛背景的領(lǐng)域,人工智能工具通?!袄速M(fèi)的時(shí)間多于節(jié)省的時(shí)間”。當(dāng)它們被要求編寫(xiě)較長(zhǎng)形式的例程時(shí),生成的代碼質(zhì)量會(huì)顯著下降。
幻覺(jué)和安全風(fēng)險(xiǎn)
幻覺(jué)仍然是一個(gè)問(wèn)題。Exabeam的威爾遜表示:“人工智能不僅會(huì)犯錯(cuò),而且會(huì)自信地犯錯(cuò)。它將發(fā)明不存在的開(kāi)源軟件包,引入微妙的安全漏洞,并一本正經(jīng)地做這一切。”
這些錯(cuò)誤通常源于糟糕的數(shù)據(jù)語(yǔ)料庫(kù)。人工智能在合成數(shù)據(jù)上的訓(xùn)練可能會(huì)產(chǎn)生一個(gè)回音室,導(dǎo)致模型崩潰。
Crowdbotics研究與創(chuàng)新副總裁科里?海梅爾(Cory Hymel)同樣指出,缺乏高質(zhì)量的訓(xùn)練數(shù)據(jù)是最大的障礙。例如,GitHub Copilot使用的流行模型OpenAI Codex就是在包含錯(cuò)誤的公開(kāi)可用代碼上訓(xùn)練的,這些錯(cuò)誤會(huì)對(duì)模型質(zhì)量造成影響。
安全漏洞是另一個(gè)問(wèn)題。人工智能生成的代碼可能包含可利用的漏洞。雖然人工智能擅長(zhǎng)修復(fù)漏洞,但它通常很難找到這些漏洞。OpenAI的一篇研究論文指出:“AI代理可以非??斓夭槊鲉?wèn)題的根源,通過(guò)在整個(gè)存儲(chǔ)庫(kù)中使用關(guān)鍵字搜索來(lái)快速定位相關(guān)文件和函數(shù)——這一過(guò)程通常比人類(lèi)快得多。然而,它們通常對(duì)問(wèn)題如何跨越多個(gè)組件或文件的理解有限,并且無(wú)法解決根本原因,從而導(dǎo)致解決方案不正確或不夠全面。”
其他行業(yè)報(bào)告也發(fā)現(xiàn)了越來(lái)越多的人工智能缺陷。例如,Apiiro的研究發(fā)現(xiàn),自2023年中期以來(lái),代碼庫(kù)中暴露的個(gè)人身份信息(PII)和支付數(shù)據(jù)激增了三倍,這歸因于采用人工智能輔助開(kāi)發(fā)。
法律灰色地帶也可能阻礙人工智能代碼的使用,并引入合規(guī)性問(wèn)題——一些人工智能工具聲稱(chēng)對(duì)它們輸出的代碼擁有所有權(quán),而另一些工具則保留知識(shí)產(chǎn)權(quán)用于模型再培訓(xùn)目的。
不信任和采用障礙
“這一切都?xì)w結(jié)為信任——人們信任人工智能生成的新應(yīng)用程序嗎?”Salesforce負(fù)責(zé)產(chǎn)品管理的副總裁丹?費(fèi)爾南德斯(Dan Fernandez)問(wèn)道。谷歌發(fā)布的《2024年DORA報(bào)告》發(fā)現(xiàn),平均而言,開(kāi)發(fā)人員只“有點(diǎn)”信任人工智能生成的代碼。
Durkin認(rèn)為,采用人工智能的最大障礙是對(duì)其準(zhǔn)確性的信任。與人類(lèi)開(kāi)發(fā)人員不同,人工智能沒(méi)有內(nèi)在的良心或責(zé)任,這使得合規(guī)性和可靠性檢查對(duì)人工智能的輸出更為重要。
人工智能的不透明性也使得人們很難信任關(guān)鍵的應(yīng)用程序。Contentful的工程執(zhí)行副總裁杰夫?加布里埃爾(Jeff Gabriel)表示:“對(duì)于任何人工智能提供的代碼,信任都是一個(gè)大問(wèn)題,尤其是對(duì)于遺留代碼,這是大多數(shù)軟件投資發(fā)生的地方。”
Rez0corp創(chuàng)始人、漏洞賞金獵人約瑟夫?塞克爾(Joseph Thacker)表示:“最大的障礙可能是許多公司內(nèi)部對(duì)人工智能的反對(duì)?!彼赋觯靖邔咏?jīng)常禁止員工使用人工智能。
人工智能生成的代碼將如何改進(jìn)
盡管人工智能生成的代碼面臨障礙,但解決方案正在路上——許多人重新審視了基本的編碼最佳實(shí)踐。
驗(yàn)證AI輸出
就像人類(lèi)生成的代碼一樣,必須對(duì)人工智能生成的代碼進(jìn)行嚴(yán)格的測(cè)試。Vultr首席營(yíng)銷(xiāo)官Kevin Cochrane表示:“開(kāi)發(fā)人員仍應(yīng)仔細(xì)審查、完善和優(yōu)化人工智能生成的代碼,以確保其符合安全性、性能和可維護(hù)性的最高標(biāo)準(zhǔn)。”
人工智能輸出的自動(dòng)化測(cè)試將是關(guān)鍵。開(kāi)發(fā)者可以通過(guò)自動(dòng)化測(cè)試、靜態(tài)代碼分析和屏蔽訓(xùn)練AI模型的敏感數(shù)據(jù)來(lái)改善AI輸出。此外,人工智能增加的代碼吞吐量給下游流程和系統(tǒng)帶來(lái)了壓力,需要在QA測(cè)試中實(shí)現(xiàn)強(qiáng)大的自動(dòng)化,以確保持續(xù)的可靠性。
人工智能還可以在自我監(jiān)管方面發(fā)揮作用——雙重檢查代碼質(zhì)量,使用預(yù)測(cè)模型識(shí)別潛在風(fēng)險(xiǎn),并進(jìn)行安全掃描。此外,更廣泛地使用負(fù)責(zé)任的AI (RAI)過(guò)濾器來(lái)篩選有害內(nèi)容、安全漏洞,并通知用戶(hù)公共代碼匹配,這些都很重要。
漸進(jìn)式部署也可以通過(guò)衡量單個(gè)代碼更改的影響來(lái)幫助避免缺陷。像金絲雀部署、功能標(biāo)志或功能管理這樣的技術(shù)允許團(tuán)隊(duì)在有限的暴露情況下驗(yàn)證代碼。
更好的訓(xùn)練數(shù)據(jù)
這一切都?xì)w結(jié)于訓(xùn)練數(shù)據(jù),因?yàn)檎缢自?huà)所說(shuō),“垃圾輸入,垃圾輸出”。因此,我們需要更多的清理并使用高質(zhì)量的代碼樣本作為訓(xùn)練數(shù)據(jù)。避免模型崩潰需要向人工智能模型提供附加數(shù)據(jù),而不是反芻輸出。
為L(zhǎng)LM提供特定于項(xiàng)目的上下文,如定制庫(kù)、風(fēng)格指南、軟件材料清單或安全知識(shí),也可以提高準(zhǔn)確性。確保人工智能模型接受可信數(shù)據(jù)的訓(xùn)練,并針對(duì)特定應(yīng)用進(jìn)行微調(diào),這將有助于提高人工智能生成代碼的準(zhǔn)確性,并最大限度地減少輸出中的幻覺(jué)。
一些基于IDE的解決方案和技術(shù)的出現(xiàn)也為開(kāi)發(fā)人員提供了更多的實(shí)時(shí)上下文。此外,檢索增強(qiáng)生成(RAG)將有助于引用特定于版本的軟件庫(kù)或代碼庫(kù)。
精細(xì)調(diào)整模型
公司不再依賴(lài)大規(guī)模的通用模型,而是轉(zhuǎn)向針對(duì)特定編碼任務(wù)的更小、更專(zhuān)業(yè)的模型。Fernandez表示,“對(duì)于開(kāi)發(fā)人員生命周期中的每個(gè)用例來(lái)說(shuō),最大的模型并不是必需的。我們正在探索一種小型模型的聯(lián)合架構(gòu),在這種架構(gòu)中,低功耗的LLM可以為開(kāi)發(fā)人員處理許多任務(wù)?!?/p>
改進(jìn)的訓(xùn)練和精細(xì)調(diào)整的模型可能會(huì)產(chǎn)生更高程度的準(zhǔn)確性,但是最好的結(jié)果可能發(fā)生在公司防火墻后。Crowdbotics公司表示:“2025年,經(jīng)過(guò)公司現(xiàn)有代碼訓(xùn)練的微調(diào)模型將會(huì)興起,這些模型在‘墻后’運(yùn)行,其表現(xiàn)將大大超過(guò)公開(kāi)的模型?!?/p>
增強(qiáng)提示工程
另一個(gè)方面是改進(jìn)提示工程。Contentful的Gabriel表示:“我們還需要研究如何提示,這包括額外的上下文和針對(duì)系統(tǒng)特定場(chǎng)景的潛在微調(diào)。”
提示工程將成為軟件工程師工作的必要組成部分。為了實(shí)現(xiàn)這一目標(biāo),開(kāi)發(fā)者有責(zé)任提升自己的技能,學(xué)習(xí)如何編寫(xiě)更好的提示,以獲得自己想要的AI輸出。
新的人工智能解決方案也會(huì)有所幫助。rez0corp的Thacker稱(chēng):“最大的影響將來(lái)自更好的模型和更好的編碼應(yīng)用程序,它們提供了更多的上下文?!彼傅氖荂ursor等解決方案和最近升級(jí)的GitHub Copilot。
新的人工智能代理工具
新的人工智能代理將通過(guò)引入自檢功能,繼續(xù)成為整體改進(jìn)軟件工程的焦點(diǎn)。例如,GitHub增加了Copilot Autofix,它可以實(shí)時(shí)檢測(cè)漏洞并提供修復(fù)建議,并為Copilot工作區(qū)添加了構(gòu)建和修復(fù)代理。
Fernandez表示:“我預(yù)計(jì)人工智能生成的代碼將在明年常態(tài)化。”他指出,面向軟件開(kāi)發(fā)人員的人工智能代理正在不斷興起,這些代理將從代碼生成擴(kuò)展到測(cè)試、文檔和代碼審查。
此外,開(kāi)發(fā)人員還應(yīng)該調(diào)查無(wú)數(shù)可用的工具,找到那些有效的工具,并考慮如何用那些無(wú)效的工具填補(bǔ)空白。當(dāng)然,這一過(guò)程將需要個(gè)人和組織的投資。
展望未來(lái),許多人預(yù)計(jì)開(kāi)源將進(jìn)一步引領(lǐng)人工智能民主化。GitLab首席產(chǎn)品官大衛(wèi)?德桑托(David DeSanto)表示:“我預(yù)計(jì)我們將看到更多的開(kāi)源模型出現(xiàn),以解決特定的用例?!?/p>
圍繞人工智能使用的治理策略
提高開(kāi)發(fā)人員對(duì)人工智能生成代碼的信心也將依賴(lài)于為負(fù)責(zé)任的使用設(shè)置護(hù)欄。有了適當(dāng)?shù)淖o(hù)欄來(lái)確保負(fù)責(zé)任和可信的人工智能輸出,企業(yè)和開(kāi)發(fā)人員將更容易采用和信任人工智能生成的代碼。
要實(shí)現(xiàn)這一目標(biāo),領(lǐng)導(dǎo)層必須確立明確的方向,為那些能夠訪(fǎng)問(wèn)AI生成代碼的人設(shè)定明確的界限,并通過(guò)更嚴(yán)格的流程來(lái)建立開(kāi)發(fā)者的信心。
確保模型訓(xùn)練數(shù)據(jù)的透明度也有助于緩解道德和知識(shí)產(chǎn)權(quán)風(fēng)險(xiǎn)。而對(duì)于有安全意識(shí)的組織來(lái)說(shuō),本地人工智能可能是避免數(shù)據(jù)隱私問(wèn)題的答案。在氣隙系統(tǒng)中運(yùn)行自托管模型,離線(xiàn)部署允許人工智能在受監(jiān)管的環(huán)境中使用,同時(shí)保持?jǐn)?shù)據(jù)安全。
在人類(lèi)和人工智能之間取得平衡
接受本文采訪(fǎng)的所有專(zhuān)家都認(rèn)為,人工智能將幫助開(kāi)發(fā)人員,而不是徹底取代他們。事實(shí)上,大多數(shù)人認(rèn)為保持開(kāi)發(fā)人員的參與是保持代碼質(zhì)量的必要條件。目前,在使用人工智能生成的代碼時(shí),人類(lèi)的監(jiān)督仍然至關(guān)重要。
為什么?部分原因是道德方面的挑戰(zhàn)。完全自動(dòng)化仍然是不可能實(shí)現(xiàn)的,因?yàn)槿祟?lèi)的監(jiān)督對(duì)于解決復(fù)雜的架構(gòu)和確保道德標(biāo)準(zhǔn)至關(guān)重要。也就是說(shuō),人工智能推理有望得到改善。下一階段是人工智能成為一個(gè)合法的工程助手,不僅會(huì)寫(xiě)代碼,還能理解它。
其他人甚至更加樂(lè)觀。Contentful的Gabriel表示:“我認(rèn)為最有價(jià)值的人工智能驅(qū)動(dòng)系統(tǒng)將是那些可以完全交給人工智能編碼的系統(tǒng)?!北M管他承認(rèn)這還并不現(xiàn)實(shí)。就目前而言,未來(lái)的前景仍然是人工智能和人類(lèi)并肩合作,開(kāi)發(fā)人員將更多地承擔(dān)監(jiān)督者的角色,而不是親自編寫(xiě)每一行代碼。
最終目標(biāo)是在人工智能帶來(lái)的生產(chǎn)率提高和避免過(guò)度依賴(lài)之間取得適當(dāng)?shù)钠胶?。如果開(kāi)發(fā)者過(guò)于依賴(lài)人工智能而缺乏對(duì)底層代碼的扎實(shí)理解,將極有可能喪失創(chuàng)造力和技術(shù)深度,阻礙創(chuàng)新步伐。
瘋狂的旅程
亞馬遜最近聲稱(chēng),它的人工智能重寫(xiě)了一個(gè)Java應(yīng)用程序,節(jié)省了2.6億美元。其他機(jī)構(gòu)也面臨著證明類(lèi)似結(jié)果的壓力。Kentosh表示:“目前,大多數(shù)公司都在某種類(lèi)型的人工智能輔助開(kāi)發(fā)服務(wù)或Copilot上進(jìn)行了投資,他們需要看到投資的回報(bào)。”
由于許多因素,人工智能的采用將繼續(xù)加速。Thacker補(bǔ)充道:“我認(rèn)識(shí)的大多數(shù)開(kāi)發(fā)者都在某種程度上使用人工智能。對(duì)他們中的許多人來(lái)說(shuō),人工智能正在編寫(xiě)他們每天產(chǎn)生的大部分代碼?!?/p>
然而,盡管人工智能有效地消除了重復(fù)性任務(wù),但它仍然需要人工干預(yù)才能完成“最后一英里”。Crowdbotics的Hymel表示:“大多數(shù)代碼庫(kù)都是樣板和可重復(fù)的。我們將看到人工智能被用來(lái)為應(yīng)用程序奠定51%以上的‘基礎(chǔ)’,剩余的將交由人類(lèi)來(lái)完成?!?/p>
最后,Wilson提醒稱(chēng):“雖然人工智能生成的代碼還不夠好,但如果你忽視它,你就已經(jīng)落后了。接下來(lái)的12個(gè)月將是一段瘋狂的旅程。”
原文標(biāo)題:??Why AI-generated code isn’t good enough (and how it will get better)??,作者:Bill Doerrfeld
