博客專欄

EEPW首頁(yè) > 博客 > 對(duì)標(biāo)Copilot,國(guó)內(nèi)首個(gè):自然語(yǔ)言一鍵生成方法級(jí)代碼aiXcoder XL來(lái)了

對(duì)標(biāo)Copilot,國(guó)內(nèi)首個(gè):自然語(yǔ)言一鍵生成方法級(jí)代碼aiXcoder XL來(lái)了

發(fā)布人:機(jī)器之心 時(shí)間:2022-06-22 來(lái)源:工程師 發(fā)布文章
智能編程機(jī)器人提供商 aiXcoder 宣布推出「支持方法級(jí)代碼自動(dòng)生成」的深度學(xué)習(xí)代碼生成模型 ——aiXcoder XL,該模型是國(guó)內(nèi)首個(gè)能夠根據(jù)開發(fā)者給出的 “自然語(yǔ)言描述” 一鍵生成 “完整方法級(jí)代碼” 的智能編程應(yīng)用。


伴隨 AI 和大數(shù)據(jù)技術(shù)應(yīng)用的深入,軟件行業(yè)也正迎來(lái)自己的“智能化變革”,AI 技術(shù)也開始在軟件開發(fā)中發(fā)揮作用。
近日,智能編程機(jī)器人提供商 aiXcoder 宣布推出國(guó)內(nèi)首個(gè)基于深度學(xué)習(xí)的支持方法級(jí)代碼生成的智能編程模型——aiXcoder XL,該模型能同時(shí)理解人類語(yǔ)言和編程語(yǔ)言,可根據(jù)自然語(yǔ)言功能描述一鍵生成完整程序代碼(NL to Code)。該成果的誕生受到了鵬城實(shí)驗(yàn)室(中國(guó))和百度飛槳深度學(xué)習(xí)框架的大力支持,是國(guó)內(nèi)首個(gè)完全自主知識(shí)產(chǎn)權(quán)的方法級(jí)代碼生成模型。目前 aiXcoder XL 已完成在程序編寫場(chǎng)景下的應(yīng)用測(cè)試,并即將以 IDE 插件形態(tài)推出支持商業(yè)編程的產(chǎn)品。

圖片


aiXcoder XL 方法級(jí)代碼生成實(shí)測(cè)
aiXcoder XL 效果如何呢?我們以 Java 語(yǔ)言為例,“將 byte 數(shù)組轉(zhuǎn)化為 16 進(jìn)制字符串”,創(chuàng)建這樣一個(gè)描述功能的自然語(yǔ)言語(yǔ)句,點(diǎn)擊生成按鈕,模型就自動(dòng)生成了與之對(duì)應(yīng)的完整函數(shù)代碼,程序員可直接使用。

圖片


再比如,輸入 “用 map 中的值更新 url 中的參數(shù)” 這樣一句中文描述,就可以獲得一個(gè)完整方法的代碼實(shí)現(xiàn)。

圖片


aiXcoder XL 對(duì)英文自然語(yǔ)言描述的支持也相當(dāng)出色。比如以下這個(gè)示例,“Calculate the inner product of two matrices”(計(jì)算兩個(gè)矩陣的內(nèi)積),當(dāng)我們還在思考具體計(jì)算步驟時(shí),aiXcoder XL 已經(jīng)給出了完整的程序方法。

圖片


筆者嘗試了多個(gè)類似的輸入,aiXcoder XL 都給出了可以直接復(fù)用的代碼生成結(jié)果。特別是對(duì)于一些軟件開發(fā)中需要經(jīng)常在不同場(chǎng)景中編寫的代碼(例如,各類文件操作、字符串操作、網(wǎng)絡(luò)服務(wù)等)aiXcoder XL 的生成結(jié)果更是令人眼前一亮。
隨機(jī)應(yīng)變——根據(jù)需求變化,生成相應(yīng)代碼
aiXcoder XL 還能進(jìn)行動(dòng)態(tài)交互,實(shí)現(xiàn)個(gè)性化人機(jī)結(jié)對(duì)編程。在實(shí)際開發(fā)過(guò)程中,有時(shí)無(wú)法 “一步到位” 描述清楚想要的內(nèi)容是什么,需要“邊寫邊改”,這時(shí)就需要模型能靈活理解每一處調(diào)整。aiXcoder XL 支持與程序員進(jìn)行動(dòng)態(tài)的人機(jī)交互:在處理一些復(fù)雜的場(chǎng)景時(shí),開發(fā)者不僅可以通過(guò)修改自然語(yǔ)言,也可以直接對(duì)已生成的代碼進(jìn)行編輯,使后續(xù)生成的代碼更匹配開發(fā)者的具體需求。
例如,如果開發(fā)者最初只寫了一句 “讀取一個(gè)壓縮文件”(并未指定壓縮文件的類型,也沒(méi)有說(shuō)明如何處理讀取的文件),aiXcoder XL 默認(rèn)生成了一個(gè)“從文件名讀取 Zip 文件,并把內(nèi)容以 byte 數(shù)組形式返回” 的方法。

圖片


如果,我們進(jìn)一步將描述細(xì)化為 “讀取一個(gè)壓縮文件中的指定文件”。aiXcoder XL 則會(huì)生成一個(gè)“帶有讀取指定文件的參數(shù)” 的程序方法。

圖片


如果我們進(jìn)一步指定 “要讀取的壓縮文件格式” 為. tar.gz 格式(在上文的描述中,沒(méi)有指定壓縮文件的格式,aiXcoder XL 默認(rèn)理解為對(duì)常見的 Zip 文件進(jìn)行處理),例如,輸入“讀取一個(gè). tar.gz 文件,輸出到流里”,aiXcoder XL 也會(huì)生成相應(yīng)的新的代碼。

圖片


不僅如此,aiXcoder XL 還能夠支持按照給定的函數(shù)簽名生成代碼。在上面的例子中,我們可以在原有自然語(yǔ)言描述的基礎(chǔ)上,再在代碼中指定要生成的函數(shù)的簽名,例如,把輸入的壓縮文件參數(shù)類型換成 File 對(duì)象,aiXcoder XL 就會(huì)在在上一次輸出的基礎(chǔ)上,增加上從 File 對(duì)象創(chuàng)建文件流的過(guò)程。

圖片


整個(gè)交互的過(guò)程不到 1 分鐘,極大程度的提升了開發(fā)者的編程效率,創(chuàng)造了更智能、流暢的人機(jī)結(jié)對(duì)編程體驗(yàn)。
貼近實(shí)戰(zhàn)——功能自動(dòng)拆分,逐級(jí)生成方法代碼
為了更好的代碼可讀性,aiXcoder XL 生成代碼時(shí)會(huì)將功能進(jìn)行拆分,有時(shí)會(huì)使生成的代碼中包含對(duì)其它尚不存在的函數(shù)的引用。將鼠標(biāo)移到這些函數(shù)上,根據(jù)提示選擇 “為這段函數(shù)調(diào)用生成它的實(shí)現(xiàn)” 即可進(jìn)一步生成這些函數(shù)的實(shí)現(xiàn)。
如下圖所示,aiXcoder XL 原本生成了一個(gè)調(diào)用了 isSorted 函數(shù)的 sort 方法。用戶通過(guò)一次鼠標(biāo)點(diǎn)擊,讓 aiXcoder XL 進(jìn)一步生成了被調(diào)用的 isSorted 函數(shù)。

圖片


對(duì)開發(fā)者來(lái)說(shuō),就像擁有了一個(gè)超級(jí)智能的輸入法一樣,無(wú)論你在寫什么代碼,aiXcoder XL 都有可能幫到你。
在此之前能實(shí)現(xiàn)類似功能的只有由微軟、OpenAI、GitHub 三家聯(lián)合推出的 GitHub Copilot。aiXcoder 進(jìn)一步做了與 Copilot 的性能對(duì)比測(cè)試。

圖片


根據(jù) aiXcoder 的官方介紹,測(cè)試數(shù)據(jù)集包含了 175 個(gè)代碼的功能描述,這些描述清晰明確、功能獨(dú)立,包括 Java 編程中高頻出現(xiàn)的代碼例子,涵蓋大部分應(yīng)用場(chǎng)景,并為每個(gè)例子配備了自動(dòng)測(cè)試程序來(lái)驗(yàn)證程序的正確性。結(jié)果顯示,aiXcoder XL 展現(xiàn)出了能夠匹敵 Copilot 的代碼生成能力。
瑕不掩瑜——針對(duì)問(wèn)題,持續(xù)改進(jìn)
對(duì)于代碼自動(dòng)生成而言,方法級(jí)代碼生成是一項(xiàng)艱難的任務(wù)。aiXcoder XL 給我們帶來(lái)諸多驚喜的同時(shí),測(cè)試者在試用過(guò)程中也遇到了一些錯(cuò)誤的案例,例如:
案例 1:當(dāng)測(cè)試中輸入 “計(jì)算標(biāo)準(zhǔn)差” 時(shí),生成的代碼并不是筆者所期待的。

圖片


在這個(gè)例子中,中文描述中的 “標(biāo)準(zhǔn)差” 一詞被理解成了“標(biāo)準(zhǔn)化”,導(dǎo)致生成的代碼未能滿足需求。不過(guò),如果把輸入文本改成“Calculate the standard deviation”,就能得到想要的輸出結(jié)果??赡軐?duì)這個(gè)案例而言,英文描述比中文描述更容易區(qū)分。
案例 2:測(cè)試者輸入 “Extract all images from a PowerPoint file. And save them in to a folder” 時(shí),所生成的代碼中卻缺少了對(duì) PowerPoint 的支持。

圖片


這里的需求是提取 PowerPoint 文件里的圖片,但 aiXcoder XL 卻理解成了從某個(gè)文件夾中提取圖片文件?!斑@體現(xiàn)出 aiXcoder XL 對(duì)于一些特殊需求的捕捉和理解還需要進(jìn)一步改進(jìn)”,aiXcoder 的技術(shù)人員反饋。
案例 3,當(dāng)測(cè)試者輸入 “Return a new immutable collection containing…” 時(shí),aiXcoder XL 生成的代碼中包含了一個(gè)未定義的對(duì)象。

圖片


在這個(gè)例子中,生成的代碼中包含了一個(gè) store 對(duì)象,用來(lái)表示當(dāng)前路徑的目錄,但它卻是一個(gè)沒(méi)有被定義的對(duì)象。
在具體使用場(chǎng)景中,以上問(wèn)題都有可能遇到。aiXcoder CTO 郝逸洋對(duì)機(jī)器之心表示,將在后續(xù)的訓(xùn)練過(guò)程中進(jìn)行調(diào)整,幫助模型更快“成長(zhǎng)”?!盀榱诉M(jìn)一步探索智能化程序開發(fā)的效果,aiXcoder 正在研發(fā)更加先進(jìn)的代碼生成產(chǎn)品。在不久之后,大家也許會(huì)看到能力更加強(qiáng)大的代碼生成模型?!?/span>
還會(huì)有 aiXcoder XXL 嗎?我們距離自動(dòng)化編程有多遠(yuǎn)?
“會(huì)有?!盿iXcoder 聯(lián)合創(chuàng)始人劉洋表示,“大家也許已經(jīng)看到,aiXcoder 本系列的版本標(biāo)號(hào),采用了類似服裝號(hào)碼的標(biāo)記。從 L 版到 XL 版,再到 XXL 版,是一個(gè)逐步演化的過(guò)程。這不僅體現(xiàn)了模型規(guī)模的變化,也體現(xiàn)了模型能力的逐步提升。在不久之后,大家將會(huì)看到能力更加強(qiáng)大的 aiXcoder XXL?!?/span>
“距離自動(dòng)編程還有多遠(yuǎn)?人類程序員會(huì)被機(jī)器取代嗎?這是一個(gè)經(jīng)常被大家討論的話題”,劉洋表示,“人類的創(chuàng)造潛能是無(wú)限的,aiXcoder 當(dāng)前的工作目標(biāo)是要幫助人類開發(fā)者,要盡可能減少人類開發(fā)者的工作負(fù)擔(dān),讓人們有更多的精力投入到更加富有創(chuàng)造性的工作中。這正如 aiXcoder 的 Slogan 一樣——把更多的編程工作交給 aiXcoder,把更多的創(chuàng)造潛能留給人類!”
目前,在 aiXcoder 官方網(wǎng)站上,提供了 aiXcoder XL 模型的測(cè)試頁(yè)面,可供開發(fā)者們?cè)诰€體驗(yàn)。
aiXcoder XL測(cè)試數(shù)據(jù)集鏈接:https://github.com/aixcoder-plugin/nl2code-datasetaiXcoder XL代碼生成在線演示鏈接:https://aixcoder.com/nl2code/


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉