大型語言模型和人工智能代碼生成器的興起
譯文譯者 | 李睿
審校 | 重樓
本文作者Martin Heller是一名Web和Windows編程顧問,也是行業(yè)媒體InfoWorld的特約編輯和評(píng)論員。Heller表示,他在2021年11月撰寫關(guān)于GitHub Copilot的文章時(shí),Copilot是當(dāng)時(shí)發(fā)布的為數(shù)不多的人工智能代碼生成技術(shù)之一。他將GitHub Copilot作為Visual Studio代碼擴(kuò)展進(jìn)行了測試。當(dāng)時(shí),Copilot并不總是能生成良好的、正確的、甚至是可運(yùn)行的代碼,但它仍然有一些用處。Copilot(以及其他使用機(jī)器學(xué)習(xí)的代碼生成器)背后的巨大承諾是,它的設(shè)計(jì)是通過將用戶反饋和將新代碼樣本攝取到其訓(xùn)練語料庫中,并且隨著時(shí)間的推移而改進(jìn)。
截至2023年5月,僅Visual Studio code就有數(shù)百個(gè)“人工智能”或“代碼生成”擴(kuò)展可用。其中一些可能會(huì)在編碼時(shí)為用戶節(jié)省一些時(shí)間,但是用戶不能在沒有檢查、測試和調(diào)試的情況下就相信它們生成的代碼。
圖1 市場上有數(shù)以百計(jì)的Visual Studio Code承諾“代碼生成”或“人工智能”擴(kuò)展可用,但實(shí)際上只有一小部分基于機(jī)器學(xué)習(xí)生成代碼
在這一領(lǐng)域一個(gè)很有前途的發(fā)展是一些工具可以自動(dòng)生成單元測試。生成單元測試是一個(gè)比生成通用代碼更容易處理的問題——事實(shí)上,它可以使用簡單的模式來完成,但是用戶仍然需要檢查和運(yùn)行生成的測試,以確定它們是否有意義。
本文將簡要介紹語言模型的歷史,然后考察最先進(jìn)的大型語言模型(LLM),例如OpenAI公司的GPT家族和谷歌公司的LaMDA和PaLM,它們目前用于文本生成和代碼生成。最后,將簡單介紹10個(gè)代碼生成工具,其中包括Amazon CodeWhisperer、Google Bard和GitHub Copilot X等。
人工智能文本生成模型發(fā)展簡史
語言模型可以追溯到安德烈·馬爾科夫在1913年提出的馬爾可夫鏈,這是馬爾可夫模型的一個(gè)特例。馬爾科夫指出,在俄語中,特別是在普希金的韻文小說《尤金·奧涅金》中,一個(gè)字母出現(xiàn)的概率取決于前一個(gè)字母,而且一般來說,輔音和元音往往交替出現(xiàn)。此后,馬爾可夫方法被推廣到詞匯、其他語言和其他語言應(yīng)用中。
1948年,克勞德·香農(nóng)(Claude Shannon)在通信理論方面擴(kuò)展了馬爾可夫的理論,1985年,IBM公司的Fred Jelinek和Robert Mercer再次擴(kuò)展了馬爾科夫的理論,產(chǎn)生了一個(gè)基于交叉驗(yàn)證(他們稱之為刪除估計(jì))的語言模型,并將其應(yīng)用于實(shí)時(shí)、大詞匯量的語音識(shí)別。從本質(zhì)上講,統(tǒng)計(jì)語言模型為單詞序列分配概率。
要想快速查看語言模型的運(yùn)行情況,可以在谷歌搜索或智能手機(jī)上的短信應(yīng)用程序中輸入幾個(gè)單詞,并允許它提供自動(dòng)完成選項(xiàng)。
2000年,Yoshua Bengio等人發(fā)表了一篇關(guān)于神經(jīng)概率語言模型的論文,其中神經(jīng)網(wǎng)絡(luò)取代了統(tǒng)計(jì)語言模型中的概率,繞過了維度的詛咒,并將單詞預(yù)測(基于以前的單詞)提高了20%~35%,而不是平滑的三元模型(當(dāng)時(shí)是最新技術(shù))。語言的前饋、自回歸、神經(jīng)網(wǎng)絡(luò)模型的思想至今仍在使用,盡管這些模型現(xiàn)在有數(shù)十億個(gè)參數(shù),并且是在廣泛的語料庫上訓(xùn)練的,因此有了“大型語言模型”這個(gè)術(shù)語。
正如人們將看到的,隨著時(shí)間的推移,語言模型的規(guī)模不斷變得更大,以使它們表現(xiàn)得更好。然而,這樣做是有代價(jià)的。2021年發(fā)表的論文《隨機(jī)鸚鵡的危險(xiǎn):語言模型是否太大?》的作者Emily Bender、Timnit Gebru質(zhì)疑人們是否在這一趨勢上走得太遠(yuǎn)。他們建議,除了其他事項(xiàng)之外,人們應(yīng)該首先權(quán)衡環(huán)境和財(cái)務(wù)成本,并將資源投入到整理和仔細(xì)記錄數(shù)據(jù)集上,而不是從網(wǎng)絡(luò)上攝取一切。
Gebru和Bender后來都因?yàn)橹肛?zé)谷歌公司在人工智能的道德應(yīng)用問題而辭職。Bender現(xiàn)在入職華盛頓大學(xué),而Gebru創(chuàng)立了分布式人工智能研究所。
用于文本生成的大型語言模型
最近大型語言模型的爆發(fā)是由Google Brain項(xiàng)目和Google Research項(xiàng)目的Ashish Vaswani等人在2017年發(fā)表的論文《注意力就是你所需要的一切》引發(fā)的。該論文介紹了“Transformer這種新的簡單網(wǎng)絡(luò)架構(gòu),它完全基于注意力機(jī)制,完全省去了遞歸和卷積?!盩ransformer模型比遞歸和卷積模型更簡單,也更優(yōu)越。它們訓(xùn)練所需的時(shí)間也顯著減少。
ELMo
ELMo是AllenNLP在2018年推出的深度語境化單詞表示(參見ELMo論文),它既模擬了單詞使用的復(fù)雜特征(例如語法和語義),也模擬了這些用法在不同的語言語境中是如何變化的(例如建模多義性)。其最初的模型有9360萬個(gè)參數(shù),并在十億個(gè)單詞基準(zhǔn)上進(jìn)行訓(xùn)練。
BERT
BERT是來自Google AI Language的2018年語言模型,基于該公司的Transformer(2017)神經(jīng)網(wǎng)絡(luò)架構(gòu)(參見BERT論文)。BERT的目的是通過在所有層中對(duì)左右場景進(jìn)行聯(lián)合條件反射,從未標(biāo)記的文本中預(yù)訓(xùn)練深度雙向表示。原文中使用的兩種模型規(guī)模分別是1億個(gè)參數(shù)和3.4億個(gè)參數(shù)。BERT使用掩碼語言建模(MLM),其中約15%的令牌被“破壞”用于訓(xùn)練。它是在英文維基百科和多倫多圖書語料庫上訓(xùn)練的。
T5
來自谷歌的2020文本到文本傳輸轉(zhuǎn)換器(T5)模型(見T5論文)使用一個(gè)新的開源預(yù)訓(xùn)練數(shù)據(jù)集,稱為Colossal Clean Crawled Corpus (C4),基于來自GPT、ULMFiT、ELMo和BERT及其后繼者的最佳遷移學(xué)習(xí)技術(shù),綜合了一個(gè)新的模型。C4是一個(gè)基于CommonCrawl數(shù)據(jù)集的800GB數(shù)據(jù)集。T5將所有自然語言處理任務(wù)重新構(gòu)建為統(tǒng)一的文本到文本格式,其中輸入和輸出始終是文本字符串,而BERT風(fēng)格的模型只輸出一個(gè)類標(biāo)簽或輸入的一個(gè)范圍?;镜腡5模型總共有大約2.2億個(gè)參數(shù)。
GPT家族
OpenAI公司是一家人工智能研究和部署公司,其使命是“確保通用人工智能(AGI)造福人類”。當(dāng)然,OpenAI公司還沒有實(shí)現(xiàn)通用人工智能(AGI)。一些人工智能研究人員(例如Meta-FAIR的機(jī)器學(xué)習(xí)先驅(qū)Yann LeCun)認(rèn)為OpenAI公司目前研究的通用人工智能(AGI)方法是一條死胡同。
OpenAI公司開發(fā)了GPT語言模型家族,這些模型可以通過OpenAI API和微軟的Azure OpenAI服務(wù)獲得。需要注意的是,整個(gè)GPT系列都是基于谷歌公司的2017 Transformer神經(jīng)網(wǎng)絡(luò)架構(gòu),這是合法的,因?yàn)楣雀韫鹃_放了Transformer的源代碼。
GPT(生成預(yù)訓(xùn)練Transformer)是OpenAI公司在2018年開發(fā)的一個(gè)模型,使用了大約1.17億個(gè)參數(shù)(參見GPT論文)。GPT是一個(gè)單向轉(zhuǎn)換器,它在多倫多圖書語料庫上進(jìn)行了預(yù)訓(xùn)練,并使用因果語言建模(CLM)目標(biāo)進(jìn)行了訓(xùn)練,這意味著它被訓(xùn)練為預(yù)測序列中的下一個(gè)標(biāo)記。
GPT-2是GPT的2019年直接擴(kuò)展版,具有15億個(gè)參數(shù),在800萬個(gè)網(wǎng)頁或約40GB的文本數(shù)據(jù)集上進(jìn)行了訓(xùn)練。OpenAI公司最初限制使用GPT-2,因?yàn)樗疤昧恕?,?huì)產(chǎn)生“假新聞”。盡管隨著GPT-3的發(fā)布,潛在的社會(huì)問題變得更加嚴(yán)重,但該公司最終還是讓步了。
GPT-3是一個(gè)2020年開發(fā)的自回歸語言模型,具有1750億個(gè)參數(shù),在Common Crawl、WebText2、Books1、Books2和英語維基百科的過濾版本的組合上進(jìn)行訓(xùn)練(見GPT-3論文)。GPT-3中使用的神經(jīng)網(wǎng)絡(luò)與GPT-2中使用的類似,有幾個(gè)額外的塊。
GPT-3最大的缺點(diǎn)是它容易產(chǎn)生“幻覺”,換句話說,它在沒有辨別依據(jù)的情況下編造事實(shí)。GPT-3.5和GPT-4也有同樣的問題,盡管程度較輕。
CODEX是GPT-3在2021年推出的新一代模型,針對(duì)5400萬個(gè)開源GitHub存儲(chǔ)庫的代碼生成進(jìn)行了微調(diào)。這是GitHub Copilot中使用的模型,將在下一節(jié)中討論。
GPT-3.5是GPT-3和CODEX在2022年的一組更新版本。GPT-3.5-turbo模型針對(duì)聊天進(jìn)行了優(yōu)化,但也適用于傳統(tǒng)的完成任務(wù)。
GPT-4是一個(gè)2023年的大型多模態(tài)模型(接受圖像和文本輸入,發(fā)出文本輸出),OpenAI公司聲稱它在各種專業(yè)和學(xué)術(shù)基準(zhǔn)上表現(xiàn)出人類水平的性能。GPT-4在許多模擬考試中表現(xiàn)優(yōu)于GPT-3.5,包括統(tǒng)一律師考試、LSAT、GRE和幾個(gè)AP科目考試。
值得關(guān)注的是,OpenAI公司沒有解釋GPT-4是如何訓(xùn)練的。該公司表示,這是出于競爭原因,考慮到微軟公司(一直在為OpenAI公司提供資金)和谷歌公司之間的競爭,這在一定程度上是有道理的。然而,不知道訓(xùn)練語料庫中的偏差意味著人們不知道模型中的偏差。
Emily Bender對(duì)GPT-4的看法(于2023年3月16日發(fā)表在Mastodon上)是“GPT-4應(yīng)該被認(rèn)為是有毒的垃圾,除非OpenAI公司對(duì)其訓(xùn)練數(shù)據(jù)、模型架構(gòu)等進(jìn)行開放?!?
ChatGPT和BingGPT是最初基于GPT-3.5-turbo的聊天機(jī)器人,并于2023年3月升級(jí)為使用GPT-4。目前使用基于GPT-4的ChatGPT版本,需要訂閱ChatGPTPlus?;贕PT-3.5的標(biāo)準(zhǔn)ChatGPT是根據(jù)2021年9月截止的數(shù)據(jù)進(jìn)行訓(xùn)練的。用戶可以在微軟Edge瀏覽器中訪問BingGPT,它也接受了2021年中斷的數(shù)據(jù)的訓(xùn)練,但它說(當(dāng)你問它時(shí)) “我正在不斷學(xué)習(xí),并用網(wǎng)絡(luò)上的新信息更新我的知識(shí)?!?/span>
圖2 BingGPT在圖片右側(cè)解釋其語言模型和訓(xùn)練數(shù)據(jù)
2023年3月初,香港科技大學(xué)人工智能研究中心的Pascale Fung就ChatGPT評(píng)估進(jìn)行了演講。
LaMDA(對(duì)話應(yīng)用程序語言模型)是谷歌2021年的“突破性”對(duì)話技術(shù),是2017年針對(duì)對(duì)話訓(xùn)練的Transformer模型,經(jīng)過微調(diào),可以顯著提高其反應(yīng)的敏感性和特異性。LaMDA的優(yōu)勢之一是它可以處理人類對(duì)話中常見的話題漂移。
LaMDA的一個(gè)版本為谷歌公司的對(duì)話式人工智能服務(wù)Bard提供了動(dòng)力。Bard于2023年3月21日發(fā)布,并于2023年5月10日全面發(fā)布。以下將討論它的代碼生成功能。
PaLM
PaLM (路徑語言模型)是來自Google Research的2022年密集的純解碼器Transformer模型,具有5400億個(gè)參數(shù),使用Pathways系統(tǒng)進(jìn)行訓(xùn)練(參見PaLM論文)。PaLM是使用英語和多語言數(shù)據(jù)集的組合進(jìn)行培訓(xùn)的,這些數(shù)據(jù)集包括高質(zhì)量的網(wǎng)絡(luò)文檔、書籍、維基百科、對(duì)話和GitHub代碼。
谷歌公司還為PaLM創(chuàng)建了一個(gè)“無損”詞匯表,它保留了所有空白(對(duì)代碼尤其重要),將詞匯表外的Unicode字符拆分成字節(jié),并將數(shù)字分割成單獨(dú)的令牌,每個(gè)數(shù)字一個(gè)令牌。PaLM Coder是PaLM 540B的一個(gè)版本,僅對(duì)Python代碼數(shù)據(jù)集進(jìn)行了微調(diào)。
PaLM-E
PaLM-E是谷歌公司在2023年推出的“具體化”(用于機(jī)器人)多模態(tài)語言模型。研究人員從一個(gè)強(qiáng)大的大型語言模型PaLM開始,并通過補(bǔ)充機(jī)器人代理的傳感器數(shù)據(jù)來具體化它(PaLM-E中的“E”)。PaLM-E也是一個(gè)功能強(qiáng)大的視覺和語言模型。除了PaLM之外,它還集成了ViT-22B視覺模型。
LLaMA
LLaMA(大型語言模型元人工智能)是由Meta AI(又名Meta- FAIR))于2023年2月發(fā)布的650億個(gè)參數(shù)的“原始”大型語言模型。Meta表示,“在大型語言模型空間中訓(xùn)練像LLaMA這樣的小型基礎(chǔ)模型是可取的,因?yàn)樗枰俚挠?jì)算能力和資源來測試新方法,驗(yàn)證其他人的工作,并探索新的用例?;A(chǔ)模型在大量未標(biāo)記的數(shù)據(jù)上進(jìn)行訓(xùn)練,這使得它們非常適合針對(duì)各種任務(wù)進(jìn)行微調(diào)?!?/span>
LLaMA以多種尺寸發(fā)布,同時(shí)還發(fā)布了一張模型卡,詳細(xì)說明了模型是如何構(gòu)建的。Meta-FAIR的Yann LeCun表示,最初,用戶必須請(qǐng)求檢查點(diǎn)和標(biāo)記器,但現(xiàn)在它們已經(jīng)被釋放了,因?yàn)橛腥送ㄟ^提交請(qǐng)求正確獲得了模型,并在4chan上發(fā)布了一個(gè)可下載的種子。
專門的代碼生成產(chǎn)品
雖然包括ChatGPT和Bard在內(nèi)的一些大型語言模型可以生成用于發(fā)布的代碼,但如果它們對(duì)某些代碼進(jìn)行微調(diào),通常是來自免費(fèi)開源軟件的代碼,以避免公然侵犯版權(quán)。這仍然引發(fā)了“開源軟件盜版”的擔(dān)憂,比如2022年針對(duì)GitHub、微軟(GitHub的所有者)和OpenAI公司的GitHub Copilot產(chǎn)品和OpenAI GPT Codex模型提起集體訴訟的主張。
需要注意的是,除了使用在公共可用代碼上訓(xùn)練的人工智能模型之外,一些代碼生成工具依賴于搜索代碼共享網(wǎng)站,例如Stack Overflow。
Amazon CodeWhisperer
Amazon CodeWhisperer集成了Visual Studio Code和JetBrains IDE,根據(jù)現(xiàn)有代碼生成代碼建議以響應(yīng)注釋和代碼完成,并可以掃描代碼以查找安全問題。用戶還可以激活CodeWhisperer,以便在AWS Cloud9和AWS Lambda中使用。
CodeWhisperer很好地支持Python、Java、JavaScript、TypeScript和C#編程語言,以及其他10種編程語言。它對(duì)個(gè)人開發(fā)人員是免費(fèi)的,對(duì)專業(yè)團(tuán)隊(duì)來說,每個(gè)用戶每月需要支付19美元。
Heller采用CodeWhisperer編寫了如下所示的Python代碼,并對(duì)它進(jìn)行了審查、測試和調(diào)試,其結(jié)果很好。
圖3 Heller使用Amazon CodeWhisperer生成代碼。在文件的頂部輸入了注釋,剩下的大部分都是CodeWhisperer。Heller必須從幾個(gè)選項(xiàng)中選擇代碼,并從前一個(gè)選項(xiàng)中刪除未使用的導(dǎo)入語句
Bard
Bard于2023年4月21日宣布支持編程。該公告指出,支持20多種編程語言,包括C++、Go、Java、JavaScript、TypeScript和Python。作為一個(gè)快速測試,Heller讓Bard“編寫一個(gè)Go函數(shù)來返回當(dāng)前的日期和時(shí)間?!彼龅煤芸欤?/span>
圖4 Bard生成了一個(gè)正確的Go語言函數(shù),一個(gè)使用該函數(shù)的示例,以及對(duì)該函數(shù)的解釋,所有這些都來自“編寫一個(gè)Go函數(shù)以返回當(dāng)前日期和時(shí)間”的提示。注意復(fù)制函數(shù)和測試代碼的圖標(biāo)
Bard不僅編寫了這個(gè)函數(shù),還解釋了這個(gè)函數(shù),并生成了一個(gè)調(diào)用函數(shù)的例子。
CodeT5
CodeT5是Salesforce AI Research的2021代碼特定的統(tǒng)一預(yù)訓(xùn)練編碼器-解碼器轉(zhuǎn)換器模型。它基于2020年谷歌T5模型架構(gòu),并對(duì)CodeSearchNet數(shù)據(jù)集和BigQuery的一些C/C#代碼進(jìn)行了微調(diào)。CodeT5的官方PyTorch實(shí)現(xiàn)位于GitHub上,在Hugging Face上有兩個(gè)檢查點(diǎn),在GitHubREADME中有鏈接。
GitHub Copilot
當(dāng)Heller在2021年11月審查GitHub Copilot的預(yù)發(fā)布版本時(shí),他發(fā)現(xiàn),雖然它并不總是生成良好的、正確的、甚至運(yùn)行的代碼,但它仍然有些有用。Copilot基于OpenAI Codex,而OpenAI Codex又基于GPT-3,GPT-3經(jīng)過微調(diào),可以在5400萬個(gè)開源GitHub存儲(chǔ)庫上生成代碼。GitHub Copilot目前的費(fèi)用是每月10美元或每年100美元,除非用戶有資格獲得免費(fèi)版本。
Heller喜歡Copilot在Visual Studio Code中的工作方式。基本上,必須編寫函數(shù)的第一行,或者描述函數(shù)的注釋,然后Copilot將生成多達(dá)10個(gè)版本的函數(shù),可以按原樣使用,編輯或不使用。正如Heller在上面所指出的,應(yīng)該對(duì)Copilot生成的任何代碼持保留態(tài)度,因?yàn)樗_實(shí)容易產(chǎn)生幻覺,例如在下面的示例中第8行和第9行的代碼注釋中。
圖5 代碼由GitHub Copilot制作。通過輸入行首和一堆制表符,生成了第8行和第9行。Heller輸入了第10行和第11行的開頭,Copilot完成了第11行。注意,第8行和第9行中生成的關(guān)于預(yù)期結(jié)果值的不正確注釋
GitHub Copilot X
目前處于技術(shù)預(yù)覽階段的GitHub Copilot X基于GPT-4。它通過聊天和終端界面、生成單元測試的能力、生成拉取請(qǐng)求描述的能力以及從文檔中提取解釋的能力“升級(jí)”了原始的Copilot。
GitHub Copilot X比原來的GitHub Copilot有了很大的改進(jìn),有時(shí)可以在沒有太多人工幫助的情況下生成正確的函數(shù)和一組測試。它仍然會(huì)犯錯(cuò)誤和產(chǎn)生幻覺,但遠(yuǎn)不如它的前身那么多。作為參考,以下是Heller寫的原始Copilot。
圖6 Heller能夠讓GitHub Copilot X生成大部分正確的函數(shù)和良好的參數(shù)化測試集,只需在頂部輸入注釋并按Enter和Tab四到五次
IntelliSense和IntelliCode
Microsoft IntelliSense是Visual Studio和Visual Studio代碼的內(nèi)置功能,它使用語言語義為短代碼完成提供一個(gè)選項(xiàng)菜單。它通常能很好地幫助用戶找到所需的API或方法調(diào)用,但往往會(huì)提供許多選擇。
IntelliCode是IntelliSense的一個(gè)增強(qiáng)插件,它使用在本地機(jī)器上運(yùn)行的人工智能來檢測代碼場景——包括變量名、函數(shù)和正在編寫的代碼類型,并提供最好的建議,在某些情況下可提供整行補(bǔ)全。IntelliCode還可以幫助用戶清理重復(fù)的代碼,并為常見的編程任務(wù)推薦快速操作。
IntelliCode在Visual Studio 2022中與C#、C++、Java、SQL和XAML配合使用,在Visual Studio代碼中與TypeScript、JavaScript和Python配合使用。
Kite
Kite是2014年至2021年使用人工智能幫助開發(fā)者編寫代碼的早期嘗試。盡管它吸引了50多萬名開發(fā)者,但卻從未創(chuàng)造任何收益。Kiteco存儲(chǔ)庫包含其大部分源代碼,但有一些私有位已被XXXXX取代,因此一些代碼無法運(yùn)行。
PolyCoder
PolyCoder是卡內(nèi)基梅隆大學(xué)用于代碼生成的2022,27億個(gè)參數(shù)的開源大型語言模型(見論文)。它基于GPT-2模型架構(gòu),并在12種編程語言的249GB代碼上進(jìn)行了訓(xùn)練。在C編程語言中,PolyCoder優(yōu)于包括Codex在內(nèi)的所有模型。
Replit Ghostwriter
Replit Ghostwriter于2022年萬圣節(jié)發(fā)布,提供五種功能:代碼完成、代碼解釋、代碼轉(zhuǎn)換、代碼生成以膠帶調(diào)試的錯(cuò)誤檢測,每月10美元(或多或少,取決于用戶使用的“周期”數(shù)量)。它與Replit在線編輯器集成,支持Python、Ruby、JavaScript、TypeScript、HTML、CSS、Go、Lisp、Haskell、Bash、C、C++、Rust、Java和JSON。
根據(jù)Replit公司的說法,Ghostwriter“返回由公開可用代碼訓(xùn)練并由Replit調(diào)優(yōu)的大型語言模型生成的結(jié)果?!盧eplit沒有指定用于Ghostwriter的大型語言模型或訓(xùn)練語料庫,這使它與Emily Bender對(duì)GPT-4的指控相同:除非Replit公開其訓(xùn)練數(shù)據(jù),模型架構(gòu)等,否則應(yīng)該假設(shè)Ghostwriter是有毒垃圾。這也讓Replit面臨著與GitHub Copilot同樣的“開源軟件盜版”指控。
Tabnine
Tabnine來自總部位于以色列特拉維夫的Tabnine公司,看起來就像服用了類固醇的IntelliSense,可以選擇在用戶自己的代碼語料庫上進(jìn)行訓(xùn)練,也可以在開源代碼上進(jìn)行訓(xùn)練。它可以在編輯器或IDE中完成整行和全功能的代碼補(bǔ)全,支持20種這樣的工具,從Visual Studiocode和IntelliJ到Emacs和Vim。
根據(jù)用戶選擇的計(jì)劃,Tabnine可以使用一種通用的人工智能模型,這種模型是在許可的開源代碼上訓(xùn)練的,或者一組針對(duì)所有編程語言優(yōu)化的生成人工智能模型“專門用于匹配的技術(shù)堆?!?,或者在用戶自己的存儲(chǔ)庫上訓(xùn)練的私有代碼模型。
Tabnine的免費(fèi)Starter計(jì)劃只提供基本的代碼補(bǔ)全功能。Pro計(jì)劃以每個(gè)用戶每月12美元的價(jià)格完成全線和全功能代碼。Tabnine尚未披露其模型架構(gòu)或訓(xùn)練語料庫。因此,根據(jù)Emily Bender原則,用戶應(yīng)該對(duì)它生成的任何代碼進(jìn)行最壞的假設(shè)。
大型語言模型有時(shí)可以用于生成或完成代碼,無論它們是否在代碼語料庫上進(jìn)行過訓(xùn)練。經(jīng)過代碼訓(xùn)練的語言模型往往更了解空白的重要性。而像OpenAI Codex和Tabnine這樣的代碼生成產(chǎn)品通常比更通用的語言模型與編程編輯器有更好的集成。
人們應(yīng)該期待AI代碼生成器隨著時(shí)間和使用而改進(jìn)。GitHub Copilot X比原來的Copilot更好,并相信下一個(gè)Copilot會(huì)更好。然而,永遠(yuǎn)不能假設(shè)任何類型的人工智能生成的代碼都是正確或有效的,甚至不能假設(shè)它可以編譯并運(yùn)行。應(yīng)該將人工智能生成的代碼視為來自未知程序員的拉取請(qǐng)求,這意味著在將其作為應(yīng)用程序的一部分之前,要對(duì)其進(jìn)行審查、測試和調(diào)試。
原文標(biāo)題:LLMs and the rise of the AI code generators,作者:Martin Heller