博客專欄

EEPW首頁 > 博客 > 對標(biāo)Copilot,國內(nèi)首個:自然語言一鍵生成方法級代碼aiXcoder XL來了

對標(biāo)Copilot,國內(nèi)首個:自然語言一鍵生成方法級代碼aiXcoder XL來了

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


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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

圖片


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


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



關(guān)鍵詞: AI

相關(guān)推薦

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

關(guān)閉