出品 | CSDN(ID:CSDNnews)
AI 大模型正在深入千行百業(yè),在 CSDN 舉辦的 2023 年 1024 程序員節(jié)上,CSDN 創(chuàng)始人蔣濤分享中提到,大模型將掀起一場(chǎng)生態(tài)革命,帶來生產(chǎn)力的極大提升,重構(gòu)所有軟件和應(yīng)用,數(shù)字經(jīng)濟(jì)將發(fā)生徹底改變。這是開發(fā)者的黃金時(shí)刻,也是全世界程序員的一次機(jī)會(huì),大模型將技術(shù)的潛力推向了全新的高度,重新定義了開發(fā)者的角色以及數(shù)字經(jīng)濟(jì)的前景。其中,與程序員關(guān)系最緊密的,是AI大模型對(duì)開發(fā)范式的影響和改變,未來可能每一位程序員都要與AI一同完成開發(fā)任務(wù)。
最近,騰訊混元大模型(以下簡(jiǎn)稱騰訊混元)發(fā)布了新版本升級(jí),這次升級(jí)重點(diǎn)加強(qiáng)了文生圖和代碼生成兩個(gè)方面的能力。本文就將以騰訊混元大模型為例,分享 AI 大模型在代碼生成能力上的最新表現(xiàn),分析其背后的技術(shù)探索,并展望未來的應(yīng)用前景,希望為開發(fā)者提供參考與研發(fā)工作新思路。
語義理解,實(shí)現(xiàn)細(xì)節(jié)描述需求
相比此前版本,新版騰訊混元在代碼生成任務(wù)上的最大進(jìn)步,就是提升語義理解能力,根據(jù)更加細(xì)致的需求描述,生成出語義更加準(zhǔn)確的代碼。為了評(píng)測(cè)語義理解,我們給騰訊混元下達(dá)一些包含細(xì)節(jié)編程任務(wù)的描述,測(cè)試它返回的代碼效果。
測(cè)試編程如下:
“請(qǐng)用Python語言編寫一個(gè)函數(shù),實(shí)現(xiàn)對(duì)一個(gè)整數(shù)數(shù)組進(jìn)行排序。要求采用冒泡排序算法對(duì)數(shù)組從小到大排序,并返回排序后的數(shù)組。”
對(duì)此需求,騰訊混元的回答是:
在這個(gè)測(cè)試用例中,我們包含了如下細(xì)節(jié):
-
使用 Python
輸入輸出均為整數(shù)數(shù)組
冒泡排序
從小到大
從騰訊混元回答中可以看到,它首先給出了編碼風(fēng)格良好的 bubble_sort 函數(shù),代碼不僅正確,在解釋器中也可以直接運(yùn)行,而且同時(shí)代碼的解析。完美實(shí)現(xiàn)了筆者的細(xì)節(jié)要求,展現(xiàn)出精準(zhǔn)捕捉需求描述和轉(zhuǎn)換實(shí)現(xiàn)編程語義的能力。
我們還可以進(jìn)行更復(fù)雜的測(cè)試,加入更多的細(xì)節(jié)要求,比如要求引用內(nèi)置函數(shù),輸出格式,代碼風(fēng)格等。
測(cè)試用例如下:
“請(qǐng)編寫一個(gè)Python函數(shù),輸入一個(gè)字符串?dāng)?shù)組,然后按照數(shù)組元素的字母表順序?qū)?shù)組進(jìn)行排序后輸出,并用 * 間隔每個(gè)字符串的輸出?!?/em>
騰訊混元的輸出如下:
這段代碼實(shí)現(xiàn)了測(cè)試用例中的每個(gè)細(xì)節(jié)要求,如輸入字符串,調(diào)用內(nèi)置函數(shù) sorted 進(jìn)行排序,使用*間隔輸出。同樣的,這段代碼可以在解釋器中正確的被執(zhí)行。
通過這些測(cè)試可以看出,新版騰訊混元在理解描述中的編程需求和生成對(duì)應(yīng)代碼的能力上,確實(shí)有了明顯的進(jìn)步。它可以識(shí)別出不同的數(shù)據(jù)類型,如整數(shù)數(shù)組和字符串?dāng)?shù)組,并根據(jù)所述需求選擇合適的排序算法進(jìn)行實(shí)現(xiàn)。同時(shí)對(duì)于語義細(xì)節(jié),也有很好的理解和實(shí)現(xiàn)。
跨語言代碼生成,hold 住不同語言編碼風(fēng)格
大模型需要能夠理解不同編程語言的語法和語義,以便生成正確的代碼。這需要模型具有強(qiáng)大的語言建模能力。在評(píng)測(cè)點(diǎn)一中,我們主要是讓騰訊混元使用 Python 進(jìn)行代碼輸出,那么其它編程語言的代碼生成能力如何呢。
我們給出的測(cè)試用例如下:
“用golang來實(shí)現(xiàn)二叉樹的前、中、后序遍歷?!?/em>
這段測(cè)試用例雖然不長(zhǎng),但是仍然包含了很多細(xì)節(jié)。如二叉樹的定義、前序、中序、后序遍歷的函數(shù),輸入輸出等。讓我們來看一下騰訊混元的回答:
甚至還給出了測(cè)試代碼和輸出結(jié)果:
騰訊混元展現(xiàn)出了驚人的知識(shí)量,不僅理解了測(cè)試用例,正確定義了二叉樹,還給出了三個(gè)排序函數(shù),給出了測(cè)試結(jié)果,說明騰訊混元很強(qiáng)的語義理解能力,能夠理解非常抽象的需求。Python 寫的好,Golang 同樣寫的非常優(yōu)秀,符合 Golang 的編碼風(fēng)格和習(xí)慣,對(duì)于 Golang 特有的結(jié)構(gòu)也是輸出的非常流暢和正確。這表明,騰訊混元也能調(diào)用恰當(dāng)?shù)?API 編寫出符合要求的代碼,支持不同的編程語言,生成的代碼符合不同編程語言的習(xí)慣。
復(fù)雜抽象、專業(yè)業(yè)務(wù)理解與生成,合理簡(jiǎn)潔
在前面兩點(diǎn)中,主要考察了騰訊混元對(duì)于語義細(xì)節(jié)以及代碼生成的廣度上,實(shí)際工作中,需求是非常抽象和專業(yè)的。
我們來測(cè)試一下騰訊混元對(duì)于專業(yè)領(lǐng)域的代碼生成能力,給出測(cè)試用例如下:
“使用Rust編寫一個(gè)內(nèi)存管理接口模塊,用于對(duì)錯(cuò)誤內(nèi)存頁面的隔離和重新分配。”
在這個(gè)測(cè)試用例中,我們切換了新的編程語言,同時(shí)引入了操作系統(tǒng)底層的專業(yè)領(lǐng)域知識(shí),騰訊混元的回答如下:
從思路到實(shí)現(xiàn),騰訊混元的回答質(zhì)量很高,從專業(yè)的角度看,設(shè)計(jì)的也是非常合理的。不僅給出了示例代碼,還解釋了關(guān)鍵邏輯,如分配、釋放內(nèi)存,檢查內(nèi)存頁面是否有效,分配新頁面??梢哉f是理解了這個(gè)業(yè)務(wù)需求的每個(gè)細(xì)節(jié),同時(shí)還留下了業(yè)務(wù)需要額外關(guān)注的地方,如性能、碎片等。在這個(gè)場(chǎng)景中非常貼合專業(yè)領(lǐng)域的編碼習(xí)慣了,即先給出大致的邏輯,然后不斷進(jìn)行細(xì)節(jié)優(yōu)化。
讓我們?cè)儆靡粋€(gè)復(fù)雜且抽象的測(cè)試騰訊混元的生成能力。
“使用基本的html,js,css完成一個(gè)美觀實(shí)用的Todolist頁面”
在這個(gè)測(cè)試用例中,Todolist 是抽象的,隱含了用戶的輸入輸出,任務(wù)的刪減。任務(wù)的定義,樣式的定義等。讓我們來看一下騰訊混元的實(shí)現(xiàn):
代碼比較長(zhǎng),這里直接按它說的,將代碼復(fù)制到一個(gè) html 文件中,然后通過瀏覽器打開直接看效果:
包括了一個(gè)基本的 TodoList 頁面,用戶可以在輸入框中輸入任務(wù),點(diǎn)擊添加按鈕將任務(wù)添加到任務(wù)列表中。任務(wù)列表中的每個(gè)任務(wù)都有一個(gè)刪除按鈕,點(diǎn)擊刪除按鈕可以從列表中移除任務(wù),整個(gè)頁面使用了簡(jiǎn)潔的設(shè)計(jì)和易于使用的元素。
數(shù)據(jù)、prompt 和建模技術(shù)探索
大模型代碼生成能力得到大幅提升的背后,需要依托多方面的技術(shù)探索與突破。以騰訊混元大模型為例,我們從騰訊混元大模型的更新日志中了解到,騰訊混元團(tuán)隊(duì)收集了大規(guī)模的編程語料,通過不同語言、不同應(yīng)用領(lǐng)域代碼的學(xué)習(xí),不斷完善模型對(duì)編程語義的理解。此外,設(shè)計(jì)高質(zhì)量的代碼生成 prompt 也是關(guān)鍵,指導(dǎo)模型準(zhǔn)確捕捉語法、風(fēng)格等方面的語言特征。具體來說:
第一是在提高編程語料數(shù)據(jù)質(zhì)量。相比通用語言數(shù)據(jù),高質(zhì)量的代碼語料對(duì)模型訓(xùn)練更為關(guān)鍵,騰訊混元團(tuán)隊(duì)持續(xù)積累各類編程語言的代碼樣本,擴(kuò)充模型對(duì)編程語義的理解。
第二是持續(xù)進(jìn)行 prompt 優(yōu)化,不斷優(yōu)化代碼生成的提示詞表述,引導(dǎo)模型更好地捕捉編程語言的語法、風(fēng)格和語義等方面特征。
第三是嘗試多任務(wù)統(tǒng)一建模,在模型結(jié)構(gòu)上,將代碼生成任務(wù)與理解自然語言描述的任務(wù)統(tǒng)一建模,使模型在兩個(gè)方向的表示能力得以相互促進(jìn)。
除了這三方面技術(shù)探索,模型在程序語言理解上的大幅進(jìn)步還有賴于持續(xù)的工程化積累。另外,騰訊混元大模型由騰訊自研的 Angel 機(jī)器學(xué)習(xí)平臺(tái)提供支撐。AngelPTM 訓(xùn)練速度較主流開源框架提升 1 倍,可以縮短模型研發(fā)迭代周期,也是確保騰訊混元大模型快速迭代的重要的保證。
應(yīng)用前景:代碼提示、代碼規(guī)范檢測(cè)與代碼生成,助力開發(fā)提效
通過實(shí)測(cè),能看到騰訊混元大模型代碼生成能力已經(jīng)有效提升。而更好的生成能力,可以幫助大模型在軟件開發(fā)輔助等領(lǐng)域開啟更多應(yīng)用場(chǎng)景。目前代碼編程方面可以預(yù)見有三大應(yīng)用方向:
1. 代碼提示:基于自然語言描述自動(dòng)提示代碼段,可輔助開發(fā)者更快實(shí)現(xiàn)編程需求。
2. 代碼規(guī)范檢測(cè):檢查代碼是否符合指定的代碼規(guī)范要求,如命名規(guī)范等。
3. 代碼生成根據(jù)復(fù)雜需求描述自動(dòng)生成完整代碼,輔助快速實(shí)現(xiàn)編程功能。
以騰訊混元大模型為例,在代碼提示上,騰訊混元可用于各種編程語言的 IDE 中,根據(jù)開發(fā)者的注釋或需求說明,提示可能的代碼實(shí)現(xiàn)。針對(duì)一些重復(fù)性比較強(qiáng)的編碼工作,如果能根據(jù)注釋自動(dòng)提示代碼,將大大提升開發(fā)效率。開發(fā)者只需關(guān)注業(yè)務(wù)要求,無須反復(fù)鍵入重復(fù)的代碼片段,就能高效實(shí)現(xiàn)功能。
在代碼規(guī)范檢測(cè)上,可基于公司或項(xiàng)目的代碼規(guī)范要求,自動(dòng)檢查代碼的命名、格式等是否符合規(guī)范。騰訊混元可以幫開發(fā)團(tuán)隊(duì)節(jié)省開發(fā)時(shí)間,避免手動(dòng) review 檢查出的問題,自動(dòng)化檢測(cè)可一次性直觀地反饋所有規(guī)范問題。
而代碼生成更是直接輔助編程,根據(jù)需求描述快速輸出代碼雛形,騰訊混元可直接輸出初始版本代碼,開發(fā)者只需在此基礎(chǔ)上進(jìn)行適當(dāng)優(yōu)化與補(bǔ)充,輔助開發(fā)者快速實(shí)現(xiàn)所需功能。
從這次版本升級(jí)能看到,騰訊混元的代碼生成能力正在持續(xù)快速進(jìn)步。相信通過不斷的實(shí)踐與積累,其在程序語言理解方面的能力還將達(dá)到新的高度。而對(duì)于開發(fā)者來說,趁手的開發(fā)工具是高質(zhì)高效完成開發(fā)任務(wù)的前提,從騰訊混元大模型評(píng)測(cè)能看出 AI 大模型的實(shí)力已經(jīng)不容小覷,如何利用大模型加速抽象復(fù)雜、甚至跨語言的項(xiàng)目研發(fā),提升研發(fā)效率,值得每位開發(fā)者重視。CSDN 將持續(xù)報(bào)道 AI 與大模型最新技術(shù)與落地實(shí)踐,歡迎關(guān)注。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。