對標(biāo)Copilot,國內(nèi)首個(gè):自然語言一鍵生成方法級代碼aiXcoder XL來了
智能編程機(jī)器人提供商 aiXcoder 宣布推出「支持方法級代碼自動(dòng)生成」的深度學(xué)習(xí)代碼生成模型 ——aiXcoder XL,該模型是國內(nèi)首個(gè)能夠根據(jù)開發(fā)者給出的 “自然語言描述” 一鍵生成 “完整方法級代碼” 的智能編程應(yīng)用。
伴隨 AI 和大數(shù)據(jù)技術(shù)應(yīng)用的深入,軟件行業(yè)也正迎來自己的“智能化變革”,AI 技術(shù)也開始在軟件開發(fā)中發(fā)揮作用。
近日,智能編程機(jī)器人提供商 aiXcoder 宣布推出國內(nèi)首個(gè)基于深度學(xué)習(xí)的支持方法級代碼生成的智能編程模型——aiXcoder XL,該模型能同時(shí)理解人類語言和編程語言,可根據(jù)自然語言功能描述一鍵生成完整程序代碼(NL to Code)。該成果的誕生受到了鵬城實(shí)驗(yàn)室(中國)和百度飛槳深度學(xué)習(xí)框架的大力支持,是國內(nèi)首個(gè)完全自主知識產(chǎn)權(quán)的方法級代碼生成模型。目前 aiXcoder XL 已完成在程序編寫場景下的應(yīng)用測試,并即將以 IDE 插件形態(tài)推出支持商業(yè)編程的產(chǎn)品。
aiXcoder XL 方法級代碼生成實(shí)測
aiXcoder XL 效果如何呢?我們以 Java 語言為例,“將 byte 數(shù)組轉(zhuǎn)化為 16 進(jìn)制字符串”,創(chuàng)建這樣一個(gè)描述功能的自然語言語句,點(diǎn)擊生成按鈕,模型就自動(dòng)生成了與之對應(yīng)的完整函數(shù)代碼,程序員可直接使用。
再比如,輸入 “用 map 中的值更新 url 中的參數(shù)” 這樣一句中文描述,就可以獲得一個(gè)完整方法的代碼實(shí)現(xiàn)。
aiXcoder XL 對英文自然語言描述的支持也相當(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é)果。特別是對于一些軟件開發(fā)中需要經(jī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é)對編程。在實(shí)際開發(fā)過程中,有時(shí)無法 “一步到位” 描述清楚想要的內(nèi)容是什么,需要“邊寫邊改”,這時(shí)就需要模型能靈活理解每一處調(diào)整。aiXcoder XL 支持與程序員進(jìn)行動(dòng)態(tài)的人機(jī)交互:在處理一些復(fù)雜的場景時(shí),開發(fā)者不僅可以通過修改自然語言,也可以直接對已生成的代碼進(jìn)行編輯,使后續(xù)生成的代碼更匹配開發(fā)者的具體需求。
例如,如果開發(fā)者最初只寫了一句 “讀取一個(gè)壓縮文件”(并未指定壓縮文件的類型,也沒有說明如何處理讀取的文件),aiXcoder XL 默認(rèn)生成了一個(gè)“從文件名讀取 Zip 文件,并把內(nèi)容以 byte 數(shù)組形式返回” 的方法。
如果,我們進(jìn)一步將描述細(xì)化為 “讀取一個(gè)壓縮文件中的指定文件”。aiXcoder XL 則會(huì)生成一個(gè)“帶有讀取指定文件的參數(shù)” 的程序方法。
如果我們進(jìn)一步指定 “要讀取的壓縮文件格式” 為. tar.gz 格式(在上文的描述中,沒有指定壓縮文件的格式,aiXcoder XL 默認(rèn)理解為對常見的 Zip 文件進(jìn)行處理),例如,輸入“讀取一個(gè). tar.gz 文件,輸出到流里”,aiXcoder XL 也會(huì)生成相應(yīng)的新的代碼。
不僅如此,aiXcoder XL 還能夠支持按照給定的函數(shù)簽名生成代碼。在上面的例子中,我們可以在原有自然語言描述的基礎(chǔ)上,再在代碼中指定要生成的函數(shù)的簽名,例如,把輸入的壓縮文件參數(shù)類型換成 File 對象,aiXcoder XL 就會(huì)在在上一次輸出的基礎(chǔ)上,增加上從 File 對象創(chuàng)建文件流的過程。
整個(gè)交互的過程不到 1 分鐘,極大程度的提升了開發(fā)者的編程效率,創(chuàng)造了更智能、流暢的人機(jī)結(jié)對編程體驗(yàn)。
貼近實(shí)戰(zhàn)——功能自動(dòng)拆分,逐級生成方法代碼
為了更好的代碼可讀性,aiXcoder XL 生成代碼時(shí)會(huì)將功能進(jìn)行拆分,有時(shí)會(huì)使生成的代碼中包含對其它尚不存在的函數(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 方法。用戶通過一次鼠標(biāo)點(diǎn)擊,讓 aiXcoder XL 進(jìn)一步生成了被調(diào)用的 isSorted 函數(shù)。
對開發(fā)者來說,就像擁有了一個(gè)超級智能的輸入法一樣,無論你在寫什么代碼,aiXcoder XL 都有可能幫到你。
在此之前能實(shí)現(xiàn)類似功能的只有由微軟、OpenAI、GitHub 三家聯(lián)合推出的 GitHub Copilot。aiXcoder 進(jìn)一步做了與 Copilot 的性能對比測試。
根據(jù) aiXcoder 的官方介紹,測試數(shù)據(jù)集包含了 175 個(gè)代碼的功能描述,這些描述清晰明確、功能獨(dú)立,包括 Java 編程中高頻出現(xiàn)的代碼例子,涵蓋大部分應(yīng)用場景,并為每個(gè)例子配備了自動(dòng)測試程序來驗(yàn)證程序的正確性。結(jié)果顯示,aiXcoder XL 展現(xiàn)出了能夠匹敵 Copilot 的代碼生成能力。
瑕不掩瑜——針對問題,持續(xù)改進(jìn)
對于代碼自動(dòng)生成而言,方法級代碼生成是一項(xiàng)艱難的任務(wù)。aiXcoder XL 給我們帶來諸多驚喜的同時(shí),測試者在試用過程中也遇到了一些錯(cuò)誤的案例,例如:
案例 1:當(dāng)測試中輸入 “計(jì)算標(biāo)準(zhǔn)差” 時(shí),生成的代碼并不是筆者所期待的。
在這個(gè)例子中,中文描述中的 “標(biāo)準(zhǔn)差” 一詞被理解成了“標(biāo)準(zhǔn)化”,導(dǎo)致生成的代碼未能滿足需求。不過,如果把輸入文本改成“Calculate the standard deviation”,就能得到想要的輸出結(jié)果。可能對這個(gè)案例而言,英文描述比中文描述更容易區(qū)分。
案例 2:測試者輸入 “Extract all images from a PowerPoint file. And save them in to a folder” 時(shí),所生成的代碼中卻缺少了對 PowerPoint 的支持。
這里的需求是提取 PowerPoint 文件里的圖片,但 aiXcoder XL 卻理解成了從某個(gè)文件夾中提取圖片文件。“這體現(xiàn)出 aiXcoder XL 對于一些特殊需求的捕捉和理解還需要進(jìn)一步改進(jìn)”,aiXcoder 的技術(shù)人員反饋。
案例 3,當(dāng)測試者輸入 “Return a new immutable collection containing…” 時(shí),aiXcoder XL 生成的代碼中包含了一個(gè)未定義的對象。
在這個(gè)例子中,生成的代碼中包含了一個(gè) store 對象,用來表示當(dāng)前路徑的目錄,但它卻是一個(gè)沒有被定義的對象。
在具體使用場景中,以上問題都有可能遇到。aiXcoder CTO 郝逸洋對機(jī)器之心表示,將在后續(xù)的訓(xùn)練過程中進(jìn)行調(diào)整,幫助模型更快“成長”?!盀榱诉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)號,采用了類似服裝號碼的標(biāo)記。從 L 版到 XL 版,再到 XXL 版,是一個(gè)逐步演化的過程。這不僅體現(xiàn)了模型規(guī)模的變化,也體現(xiàn)了模型能力的逐步提升。在不久之后,大家將會(huì)看到能力更加強(qiáng)大的 aiXcoder XXL。”
“距離自動(dòng)編程還有多遠(yuǎn)?人類程序員會(huì)被機(jī)器取代嗎?這是一個(gè)經(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ā)者們在線體驗(yàn)。
aiXcoder XL測試數(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)請聯(lián)系工作人員刪除。