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