智東西(公眾號(hào):zhidxcom)
編輯?| ?GTIC

智東西4月14日?qǐng)?bào)道,在剛剛落幕的GTIC 2023中國(guó)AIGC創(chuàng)新峰會(huì)上,aiXcoder(硅心科技)CTO郝逸洋帶來了主題為《大型語言模型(LLM)時(shí)代下的代碼生成》的主題演講。

他談道,GPT-4帶來了代碼生成的新變革,支持更長(zhǎng)序列、更多指令號(hào)微調(diào)、多模態(tài)(圖片輸入)等操作,展現(xiàn)出更適于泛用的效果,同時(shí)也面臨不少問題,包括缺乏相關(guān)文件、依賴庫及需求文檔,以及速度較慢、信息安全威脅等。

實(shí)際上,程序生成模型與語言模型有較大區(qū)別,比如在交互方式方面,普通的對(duì)話語言模型以問答、續(xù)寫為主,程序生成模型則需要填空、補(bǔ)全、備份。

郝逸洋稱,未來,aiXcoder將促進(jìn)模型從百億級(jí)擴(kuò)展到千億級(jí),加入大量自然語言處理+代碼的混合數(shù)據(jù),針對(duì)編程中的各類場(chǎng)景專門構(gòu)造指令數(shù)據(jù)集,從而得到綜合性能更好的代碼編輯工具。

據(jù)悉,aiXcoder(硅心科技)是一家AI虛擬編程機(jī)器人研發(fā)商,旗下有“aiXcoder智能編程機(jī)器人”,基于深度學(xué)習(xí)模型,并針對(duì)不同的專業(yè)領(lǐng)域和編程語言,能夠自動(dòng)預(yù)測(cè)程序員的編程意圖,向用戶推薦即將書寫的下一段代碼,進(jìn)而提升代碼的編寫效率。

以下為郝逸洋的演講實(shí)錄:

各位下午好!

之前的一些環(huán)節(jié)其實(shí)都是在講一些比較大的、涉及到整個(gè)AI領(lǐng)域上的一些事情,接下來我講的內(nèi)容可能會(huì)比較聚焦一些,重點(diǎn)聚焦在代碼這個(gè)小領(lǐng)域上。但說小也并不小,整個(gè)開發(fā)的程序員群體其實(shí)是非常龐大的,它能產(chǎn)生的市場(chǎng)價(jià)值也是非常大的,這就是我們正在做的事情。

一、LLM時(shí)代的代碼生成,GPT-4利弊并存

在ChatGPT出來之前,世界上就已經(jīng)有很多的代碼生成模型。那什么叫做代碼生成?用AI的方式來生產(chǎn)代碼,幫程序員完成一部分的寫代碼工作,未來甚至還有可能代替程序員,這就是代碼生成。在ChatGPT或者說是GPT-4出來之前,我們用的辦法很簡(jiǎn)單,就是把代碼換到大型的自然語言模型當(dāng)中,讓它來續(xù)寫代碼。

到GPT-4時(shí),已經(jīng)比之前的ChatGPT版本好多了。GPT-4有1750億的數(shù)據(jù),在GPT-3的基礎(chǔ)之上對(duì)ChatGPT進(jìn)行微調(diào),讓它學(xué)會(huì)了對(duì)話的能力,又在它的基礎(chǔ)上進(jìn)一步訓(xùn)練。雖然OpenAI沒有公布出相關(guān)的細(xì)節(jié),但從結(jié)果來看,GPT-4有了更長(zhǎng)序列的理解能力,以及更多的指令微調(diào),還包括對(duì)圖片的理解能力,這就是我們現(xiàn)在得到的GPT-4。

aiXcoder郝逸洋:迎接GPT-4挑戰(zhàn),未來將開發(fā)千億級(jí)語言模型丨GTIC 2023

前幾天在嘗試用GPT-4做代碼生成以及其他相關(guān)任務(wù)的試驗(yàn)時(shí),我們給出了一段自然語言描述的需求,又給了它一個(gè)沒有完成的代碼片段,讓ChatGPT去完成這段代碼,它完成的結(jié)果非常好。除了最后的結(jié)果之外,它還給出了一段解釋。

我們又嘗試了一些別的功能,比如代碼的錯(cuò)誤檢測(cè)和修復(fù),我給了它一段有問題的代碼,我問它,這段代碼的錯(cuò)誤是什么?它回答了我,告訴我這段代碼實(shí)際的問題是什么,還告訴我這段代碼應(yīng)該改成什么樣,最后還解釋了修改之后的版本為什么可以正常運(yùn)作,這就是用戶真正想要得到的結(jié)果,它確實(shí)可以做到。

aiXcoder郝逸洋:迎接GPT-4挑戰(zhàn),未來將開發(fā)千億級(jí)語言模型丨GTIC 2023

GPT-4還能完成代碼優(yōu)化,我給了它一小段有缺陷的代碼,代碼中循環(huán)一百萬次往一個(gè)relist里面放東西,我希望它能發(fā)現(xiàn)這一百萬次其實(shí)有點(diǎn)大了,應(yīng)該要先申請(qǐng)一批內(nèi)存,而不是不斷地去增加循環(huán)次數(shù)。但出乎意料的是,GPT-4并沒有發(fā)現(xiàn)這個(gè)問題,反而發(fā)現(xiàn)了兩個(gè)別的問題。GPT-4把所有的東西都放到一個(gè)文件夾里,最后一口氣來打印所有的日志,并給出解釋以及最后的描述,GPT-4具備一個(gè)完整的能力。

GPT-4對(duì)片段也有理解能力,我給了它一個(gè)很長(zhǎng)的代碼,問它是什么意思,它就能告訴我是什么意思,對(duì)于用戶而言這是一種很強(qiáng)的能力。GPT-4是很泛用的代碼功能,它是在GPT-3的能力之上訓(xùn)練出來的,為GPT-3加入了一些RHF讓它有更好的對(duì)話能力,又在這個(gè)基礎(chǔ)上訓(xùn)練出了GPT-4。

我想GPT-4的能力從GPT-3而來,我做了一個(gè)實(shí)驗(yàn),給了它同樣的一段代碼,問它這段代碼的問題是什么,它的答案前半部分描述了我在做一件什么樣的事情,后面卻越說越不對(duì)勁,它說我收到了以下錯(cuò)誤,實(shí)際上我沒有收到任何錯(cuò)誤。為什么GPT-3會(huì)有這樣的行為?GPT-3的訓(xùn)練模式就是語言模型,這個(gè)模型主要就是往后續(xù)寫。我給它一個(gè)問題,它就續(xù)寫這個(gè)問題,雖然它把這個(gè)問題更加詳細(xì)地描述了一遍,但并不是我所希望的東西。

這種情況有一個(gè)很好的辦法可以避免掉,當(dāng)我給它一個(gè)引子,給它冒號(hào)告訴它接下來要寫的答案,讓它續(xù)寫,針對(duì)我們的需求構(gòu)造出一個(gè)提示,讓模型可以根據(jù)我們的提示往后生成內(nèi)容。這是在ChatGPT之前我們使用大語言模型的主要方式,它也能答出這個(gè)結(jié)果,跟GPT-4給的答案是一致的。如果我接下來告訴它,接下來需要修復(fù)的問題是什么,需要修復(fù)的代碼是什么,它應(yīng)該也可以以同樣的方式給出來。

aiXcoder郝逸洋:迎接GPT-4挑戰(zhàn),未來將開發(fā)千億級(jí)語言模型丨GTIC 2023

GPT-4的強(qiáng)處就體現(xiàn)在這里,是很泛用的能力,可以解決開發(fā)中遇到的各種問題。我總結(jié)了一下,在用GPT-4輔助代碼開發(fā)的過程中,你只用把你的問題描述一下,丟給GPT-4,就能用它的結(jié)果。Github前兩天發(fā)布了CopilotX,本質(zhì)上就是在做這件事情,除了剛才demo中的四個(gè)場(chǎng)景,另外還有兩個(gè)場(chǎng)景,一個(gè)是文檔搜索,另一個(gè)是Prompt Quest描繪的生成,和自然語言相關(guān),主要的功能和我剛才測(cè)試的場(chǎng)景差不多。

二、GPT-4弱勢(shì)初顯:依賴數(shù)據(jù)、速度慢、信息安全隱患

我們用GPT-4或者是CopilotX去做這個(gè)輔助代碼開發(fā)時(shí),我們興沖沖地去嘗試,但是往往會(huì)遇到很多實(shí)際的問題,比如如果我們要做一個(gè)可以在網(wǎng)頁上運(yùn)行的貪吃蛇程序,要把這個(gè)問題描述清楚可能有點(diǎn)難度,一般的程序員還得先想想或是上網(wǎng)查點(diǎn)資料才能寫出來,但這個(gè)問題對(duì)于GPT-4來說沒有難度。

真正有難度的是,當(dāng)我在寫一個(gè)有業(yè)務(wù)邏輯的代碼的時(shí)候,我需要把用戶購物車?yán)锏纳唐费h(huán)一遍,還要把每個(gè)商品的價(jià)格取出來求一個(gè)和,獲得總價(jià)來反推回去。

這個(gè)邏輯讓一般的程序員理解起來沒有問題,但是讓GPT-4來做這件事就很困難。GPT-4和我們所理解的購物車不一樣,它不知道購物車是什么,我們需要把這個(gè)結(jié)構(gòu)告訴它??們r(jià)要怎么獲取它也不知道,種種因素放在一起導(dǎo)致很難跟GPT-4描述清楚這件事情,因此它生成的代碼很難用。

aiXcoder郝逸洋:迎接GPT-4挑戰(zhàn),未來將開發(fā)千億級(jí)語言模型丨GTIC 2023

第二個(gè)問題是它太慢了。我們把這個(gè)問題拋給GPT-4,補(bǔ)完這段代碼的時(shí)候,代碼需要一分鐘來生成,生成完之后還得修改它,需要把它里面購物車的部分改為你那一部分的購物車,需要把它獲取的商品價(jià)格改為你的商品價(jià)格。一分鐘的時(shí)間你可能早就已經(jīng)寫好這個(gè)代碼了。

最后就是信息安全問題。GPT-4畢竟部署在美國(guó),不受中國(guó)政府監(jiān)管。如果一個(gè)公司的很關(guān)鍵的信息、資產(chǎn)、代碼等,通過互聯(lián)網(wǎng)傳輸?shù)搅嗣绹?guó)的服務(wù)器上來獲得結(jié)果。那這個(gè)事情對(duì)于企業(yè)來說是否可以接受?哪怕OpenAI在國(guó)內(nèi)開了分公司,把模型部署在國(guó)內(nèi),那么它是否信任國(guó)內(nèi)的部署商也是個(gè)問題,中國(guó)一層層的網(wǎng)絡(luò)鏈接等都是問題。

另外,當(dāng)你在手誤敲分號(hào)鍵時(shí)不小心敲到了L鍵上時(shí),這是Java開發(fā)上很常見的問題,GPT-4能在用戶反應(yīng)過來之前把這個(gè)錯(cuò)誤改好嗎?從能力上說它是可以做到這一點(diǎn)的,但是實(shí)際效果很差,一是速度太慢,二是很少見到拼寫錯(cuò)誤以及被拼寫錯(cuò)誤修改過的數(shù)據(jù)。

GPT-4有一定的泛化能力,由于訓(xùn)練時(shí)它是用網(wǎng)上抓取的數(shù)據(jù)、文件和頁面來進(jìn)行訓(xùn)練,這些內(nèi)容基本沒有拼寫錯(cuò)誤,因此它也很難理解拼寫錯(cuò)誤應(yīng)該怎樣去修改。這個(gè)問題可以通過人工反饋強(qiáng)化學(xué)習(xí)的方式來訓(xùn)練它,但是這種訓(xùn)練的效果可能還不如十幾萬參數(shù)的模型來做。這一點(diǎn)GPT-4很難做到。

三、開發(fā)綜合性代碼編輯工具,訓(xùn)練千億級(jí)語言模型

當(dāng)我們說到一個(gè)代碼項(xiàng)目里面的信息非常大時(shí),我們往往指的是它的前后文。項(xiàng)目配置和語言模型有一個(gè)天然的區(qū)別,它們的交互方式很不一樣。從aiXcoder產(chǎn)品實(shí)際的例子可以看出來,他會(huì)對(duì)當(dāng)前光標(biāo)所在的位置進(jìn)行補(bǔ)全,會(huì)對(duì)下面IDE的提示做出排序,還會(huì)往后做一個(gè)填空的操作。這些都是它和語言模型所不一樣的地方。

這里有一個(gè)具體的例子,一個(gè)看上去很簡(jiǎn)單的插入任務(wù),已經(jīng)給出了前后文,需要讓它補(bǔ)充中間的東西。

aiXcoder郝逸洋:迎接GPT-4挑戰(zhàn),未來將開發(fā)千億級(jí)語言模型丨GTIC 2023

實(shí)際上,在設(shè)計(jì)這個(gè)訓(xùn)練任務(wù)的時(shí)候,里面有很多小細(xì)節(jié)需要考慮。最簡(jiǎn)單的一個(gè)方法,也是很多預(yù)訓(xùn)練模型的方法,先確定一個(gè)長(zhǎng)度,假設(shè)是1024,有了這個(gè)長(zhǎng)度之后,在里面隨機(jī)挖出一個(gè)空,讓模型來補(bǔ)全這個(gè)空并生成里面的內(nèi)容。無論怎么生成,它都不會(huì)超過當(dāng)前的長(zhǎng)度,這就會(huì)導(dǎo)致一個(gè)問題,當(dāng)我們?cè)趯?shí)際代碼中使用這樣一個(gè)模型的時(shí)候,我們發(fā)現(xiàn)無論這個(gè)空有多長(zhǎng),模型都會(huì)努力用最短的代碼把前后文連接起來。

最后,我們?cè)O(shè)計(jì)了一套方案,強(qiáng)制保留前文和下文,并且不限制這個(gè)空的長(zhǎng)度,最后得到了一個(gè)模型。我們一開始期望模型輸出能把不存在的值給定義出來并且補(bǔ)充完整,但是它直接把當(dāng)前的函數(shù)結(jié)束了并且又新建了一個(gè)函數(shù)。

遇到這樣的問題我們只能通過改變訓(xùn)練任務(wù)來解決,設(shè)計(jì)訓(xùn)練任務(wù)的時(shí)候就要考慮到這些情況。

我舉這個(gè)例子就是想說,在訓(xùn)練GPT-3、GPT-3.5、GPT-4時(shí)也要考慮這樣的問題。GPT-4目前的缺陷,第一是在實(shí)時(shí)性上,它對(duì)于代碼糾錯(cuò)缺少實(shí)時(shí)性,只能在代碼全部寫完后整體糾錯(cuò);第二就是它的上下文序列有限,看不到項(xiàng)目里面所有的信息。最后一點(diǎn)也是它最致命的問題,整個(gè)項(xiàng)目中的信息、配置、文件等和從網(wǎng)頁上抓取的文件差異很大,和主動(dòng)構(gòu)造的數(shù)據(jù)相比它表現(xiàn)的還是要差一些。

aiXcoder是用ChatGPT類似語言模型的方式做代碼生成的一套工具,現(xiàn)在已經(jīng)免費(fèi)上線使用了。

aiXcoder郝逸洋:迎接GPT-4挑戰(zhàn),未來將開發(fā)千億級(jí)語言模型丨GTIC 2023

我們的下一步就是要汲取ChatGPT在代碼上的能力,首先是把大模型參數(shù)逐步從百億級(jí)增加到千億級(jí),還要加入更多的自然語言數(shù)據(jù)來訓(xùn)練它,讓它有理解自然語言的能力,最后通過指令微調(diào)來針對(duì)更多場(chǎng)景,構(gòu)造一個(gè)指令級(jí)的數(shù)據(jù),解決在代碼中的程序依賴問題,最后能得到一個(gè)最好的代碼全模型,完成代碼理解、代碼生成、代碼修復(fù)的綜合智能化代碼開發(fā)。

謝謝大家!

以上是郝逸洋演講內(nèi)容的完整整理。