智東西(公眾號(hào):zhidxcom)
作者 | 心緣
編輯 | 漠影

智東西6月30日?qǐng)?bào)道,微軟、微軟旗下代碼服務(wù)托管平臺(tái)GitHub和知名人工智能研究型公司OpenAI推出一種新人工智能(AI)自動(dòng)編程工具Copilot,能自動(dòng)生成代碼,供開(kāi)發(fā)者參考使用。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼▲GitHub Copilot自動(dòng)補(bǔ)全導(dǎo)入推文代碼

這是微軟向OpenAI投資10億美元的第一個(gè)重大成果。微軟正在尋求簡(jiǎn)化編程流程的方法,試圖教計(jì)算機(jī)寫(xiě)代碼,而GitHub Copilot項(xiàng)目是一個(gè)相當(dāng)值得關(guān)注的嘗試。

GitHub Copilot從開(kāi)發(fā)者已經(jīng)編寫(xiě)的代碼和注釋中提取上下文,試圖理解開(kāi)發(fā)者意圖,生成需要添加的一行、多行代碼或整個(gè)函數(shù),當(dāng)程序員接受或拒絕建議時(shí),模型就會(huì)學(xué)習(xí)越來(lái)越適應(yīng)和匹配開(kāi)發(fā)者的編程風(fēng)格。

這使得程序員無(wú)需在寫(xiě)代碼時(shí)去查閱大量文檔或搜索相關(guān)示例,更加聚焦于開(kāi)發(fā)工作本身。

正如OpenAI員工Harri Edwards所言:“用一種不熟悉的語(yǔ)言編寫(xiě)代碼,用谷歌搜索所有東西,就像用一本短語(yǔ)手冊(cè)去瀏覽一個(gè)外國(guó)國(guó)家。而使用GitHub Copilot,好比雇傭一名翻譯?!?/p>

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼▲GitHub Copilot自動(dòng)補(bǔ)全抓取書(shū)評(píng)網(wǎng)站Goodreads評(píng)分的代碼

GitHub方面強(qiáng)調(diào),Copilot所做的可不僅是像“鸚鵡學(xué)舌”那樣照搬見(jiàn)過(guò)的代碼,它推薦的絕大多數(shù)代碼都是唯一生成的、訓(xùn)練集中并不存在的。

OpenAI聯(lián)合創(chuàng)始人兼CTO Greg Brockman將這項(xiàng)工比作“編程的最后一英里”。微軟首席技術(shù)官Kevin Scott認(rèn)為,GitHub Copilot不僅適用于開(kāi)發(fā)老將,也能讓編程本身更加容易上手。

項(xiàng)目鏈接:https://copilot.github.com

一、支持各種編程語(yǔ)言,高效生成匹配代碼

GitHub首席執(zhí)行官Nat Friedman在一篇博客文章中寫(xiě)道,GitHub Copilot支持幾乎所有編程語(yǔ)言,技術(shù)預(yù)覽版最適合Python、JavaScript、TypeScript、Ruby和Go。

Nat Friedman將GitHub Copilot描述為結(jié)對(duì)編程(pair programming)的演進(jìn),兩個(gè)程序員將在同一項(xiàng)目上并肩協(xié)作,檢查彼此的錯(cuò)誤,提供代碼建議,加快開(kāi)發(fā)過(guò)程。Copilot使得其中一個(gè)程序員是虛擬的。

無(wú)論開(kāi)發(fā)者在用一種新的語(yǔ)言或框架,還是只是剛剛開(kāi)始學(xué)習(xí)寫(xiě)代碼,都能借助這一新工具更快上手編程。

GitHub Copilot比大多數(shù)代碼助手能更好地理解上下文。無(wú)論是文檔字符串、注釋、函數(shù)名,還是代碼本身,GitHub Copilot可以根據(jù)上下文合成代碼來(lái)匹配。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼

這也是令許多工程師印象深刻的一點(diǎn)。有時(shí)Copilot仿佛預(yù)言家,能準(zhǔn)確預(yù)判開(kāi)發(fā)者接下來(lái)想輸入什么,相當(dāng)節(jié)省碼字時(shí)間。

開(kāi)發(fā)者可以寫(xiě)一個(gè)注釋來(lái)描述自己想要的邏輯,讓GitHub Copilot來(lái)生成代碼。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼

GitHub Copilot還非常適合快速生成模板和重復(fù)的代碼模式,給它提供幾個(gè)示例,它就能自動(dòng)生成余下的重復(fù)模式代碼。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼

此外,導(dǎo)入一個(gè)單元測(cè)試包,GitHub Copilot就能建議匹配開(kāi)發(fā)者實(shí)現(xiàn)代碼的測(cè)試。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼

如果開(kāi)發(fā)者想要評(píng)估幾種不同的方法,GitHub Copilot還可以展示一個(gè)解決方案列表,開(kāi)發(fā)者可以使用或編輯其中的代碼以滿足自身需要。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼

項(xiàng)目網(wǎng)站上展示了導(dǎo)入推文、繪制散點(diǎn)圖、抓取Goodreads評(píng)分等自動(dòng)編寫(xiě)代碼示例。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼▲GitHub Copilot自動(dòng)補(bǔ)全繪制散點(diǎn)圖代碼

GitHub最近對(duì)一組Python函數(shù)進(jìn)行的基準(zhǔn)測(cè)試顯示,如果刪除函數(shù),并讓GitHub Copilot來(lái)重新填充,首次嘗試時(shí),該模型的準(zhǔn)確率為43%,嘗試10次后,其準(zhǔn)確率上升至57%,它一直在變得更聰明。

二、技術(shù)預(yù)覽版試用名額有限,未來(lái)推商業(yè)產(chǎn)品

根據(jù)項(xiàng)目網(wǎng)站,GitHub的數(shù)百名工程師每天都在編碼時(shí)使用Copilot,這改變了他們的工作方式。

OpenAI聯(lián)合創(chuàng)始人兼CTO Greg Brockman說(shuō),編程包括提出一個(gè)如何做某件事的想法,然后實(shí)現(xiàn)它,GitHub Copilot擅長(zhǎng)第二部分?!澳悴幌肴ラ喿xTwilio的API文檔。它(Copilot)知道所有這些東西。這實(shí)際上相當(dāng)可靠?!?/p>

“這可以讓我不必為了用某個(gè)工具而查閱一大堆文檔,這對(duì)提高工作效率非常有益?!蔽④浭紫夹g(shù)官Kevin Scott亦稱贊道。

“這是我見(jiàn)過(guò)的機(jī)器學(xué)習(xí)(ML)最令人興奮的應(yīng)用。”Instagram聯(lián)合創(chuàng)始人Mike Krieger感慨說(shuō):“在第一天,GitHub Copilot已經(jīng)教會(huì)了我Javascript對(duì)象比較的細(xì)微差別,并且和我一樣適應(yīng)我們的數(shù)據(jù)庫(kù)模式。”

由于GitHub Copilot需要用到最先進(jìn)的人工智能硬件,因此在技術(shù)預(yù)覽期間,GitHub將為有限數(shù)量的測(cè)試者免費(fèi)提供GitHub Copilot。如果技術(shù)預(yù)覽版是成功的,下一步,GitHub擬構(gòu)建相應(yīng)的商業(yè)版本。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼

注冊(cè)地址:https://github.com/features/copilot/signup

GitHub Copilot目前僅出現(xiàn)在微軟的免費(fèi)開(kāi)源產(chǎn)品Visual Studio Code中,微軟計(jì)劃在未來(lái)將其納入商業(yè)Visual Studio產(chǎn)品中。

三、幕后功臣:OpenAI GPT-3的后代Codex

OpenAI是一家現(xiàn)在由Y Combinator總裁Sam Altman領(lǐng)導(dǎo)的研究公司。自Altman掌權(quán)以來(lái),OpenAI已從非營(yíng)利模式轉(zhuǎn)向“有限盈利”(capped-profit)模式,接受了微軟的投資,并開(kāi)始授權(quán)其GPT-3算法。

程序員減負(fù)神器!GitHub聯(lián)手OpenAI,用AI自動(dòng)補(bǔ)寫(xiě)代碼

GitHub Copilot基于一種名為OpenAI Codex的新型AI算法,借助了許多編程語(yǔ)言的大量代碼和微軟Azure云計(jì)算能力。

OpenAI Codex接受過(guò)從GitHub提取的數(shù)十億行公開(kāi)可用代碼以及英語(yǔ)語(yǔ)言示例的訓(xùn)練,能將人類(lèi)自然語(yǔ)言翻譯成機(jī)器可理解的編程代碼,Brockman將Codex描述為超大規(guī)模語(yǔ)言模型GPT-3的后代。

GPT-3是OpenAI的旗艦語(yǔ)言生成算法,參數(shù)規(guī)模達(dá)1750億。它可以生成有時(shí)無(wú)法與人類(lèi)書(shū)寫(xiě)區(qū)分的文本。GPT-3生成語(yǔ)言,Codex則生成代碼。

這不是微軟第一次借助OpenAI提供智能軟件。上個(gè)月,微軟展示了它將如何更新Power Apps Studio應(yīng)用程序,非技術(shù)人員能借此來(lái)編寫(xiě)應(yīng)用程序,用戶可以輸入描述他們想要添加元素的單詞,并讓GPT-3顯示必要代碼的選項(xiàng)。

OpenAI認(rèn)識(shí)到在GPT-3中生成代碼的潛力。它在網(wǎng)站上寫(xiě)道,提供GPT-3的在線服務(wù)可以處理“代碼補(bǔ)全”(code completion)。

但Brockman說(shuō),當(dāng)OpenAI剛開(kāi)始訓(xùn)練該模型時(shí),并沒(méi)有打算教它如何幫助編寫(xiě)代碼。它更像是一種通用語(yǔ)言模型,可以生成文章、修復(fù)錯(cuò)誤的語(yǔ)法以及將一種語(yǔ)言翻譯成另一種語(yǔ)言。

在接下來(lái)的幾個(gè)月里,人們用這個(gè)模型做實(shí)驗(yàn),看看它能做什么,有的很有用,有的則顯得有些蠢。比如,一位工程師制作了一個(gè)網(wǎng)站,可以設(shè)計(jì)一個(gè)看起來(lái)像西瓜的按鈕。Brockman聯(lián)系了GitHub首席執(zhí)行官Nat Friedman,當(dāng)時(shí)他在運(yùn)行一個(gè)有數(shù)百萬(wàn)程序員在編寫(xiě)代碼的“key?destination”,新的故事即從那里開(kāi)始。

OpenAI預(yù)告將于今年夏天晚些時(shí)候通過(guò)其API發(fā)布Codex模型,供第三方開(kāi)發(fā)人員將其融入自己的應(yīng)用程序。

四、已設(shè)立許多安全機(jī)制,但還不完美

GitHub員工試圖確保GitHub Copilot生成安全、高質(zhì)量的代碼,但并非所有使用的代碼都經(jīng)過(guò)了漏洞、不安全實(shí)踐或個(gè)人數(shù)據(jù)的審查。

“我們已經(jīng)為Copilot建立了許多安全機(jī)制,我們認(rèn)為這些機(jī)制在減少在各個(gè)領(lǐng)域出錯(cuò)的機(jī)會(huì)方面是先進(jìn)的,但它們絕對(duì)不是完美的?!盕riedman透露。

使用GitHub Copilot時(shí),所有數(shù)據(jù)都安全地傳輸和存儲(chǔ),其遙測(cè)技術(shù)的使用被嚴(yán)格限制在個(gè)人需要知道的基礎(chǔ)上。GitHub承諾不會(huì)將任何開(kāi)發(fā)者的私有代碼引用到為其他用戶生成代碼。

Copilot的網(wǎng)站寫(xiě)道:“由于底層技術(shù)的預(yù)發(fā)布性質(zhì),GitHub Copilot有時(shí)可能生成不希望的輸出,包括有偏見(jiàn)、歧視、辱罵或攻擊性的輸出。

鑒于對(duì)GPT-3偏見(jiàn)和濫用語(yǔ)言模式的批評(píng),OpenAI似乎還沒(méi)有找到阻止算法繼承其訓(xùn)練數(shù)據(jù)最壞元素的方法。

GitHub還警告說(shuō),該模型可能會(huì)顯示電子郵件地址、API密鑰或電話號(hào)碼,但這種情況很罕見(jiàn),而且發(fā)現(xiàn)數(shù)據(jù)是由該算法合成或偽隨機(jī)生成的。

不過(guò),Copilot生成的代碼在很大程度上是原創(chuàng)的。GitHub進(jìn)行的一項(xiàng)測(cè)試發(fā)現(xiàn),在訓(xùn)練集中只能找到0.1%的Copilot生成代碼。

這不是第一個(gè)嘗試自動(dòng)生成代碼來(lái)幫助程序員的項(xiàng)目。去年10月,美國(guó)初創(chuàng)公司Kite已經(jīng)推出了一個(gè)類(lèi)似的功能,借助AI幫開(kāi)發(fā)者自動(dòng)補(bǔ)全代碼片段,該功能支持16個(gè)代碼編輯器。

結(jié)語(yǔ):或有助于擴(kuò)大開(kāi)發(fā)者陣容

Copilot的問(wèn)世凸顯了OpenAI與其投資者微軟之間日益密切的關(guān)系。除了用OpenAI提供的AI軟件來(lái)理解開(kāi)發(fā)者編程外,微軟也在使用OpenAI的GPT-3語(yǔ)言模型,讓非開(kāi)發(fā)人員可以使用語(yǔ)音命令而非代碼來(lái)構(gòu)建應(yīng)用程序。

開(kāi)發(fā)者是微軟企業(yè)戰(zhàn)略的一大核心。發(fā)展GitHub使用的工具,降低了經(jīng)驗(yàn)不足的程序員的開(kāi)發(fā)門(mén)檻,能幫助微軟進(jìn)一步擴(kuò)大其開(kāi)發(fā)者隊(duì)伍。

不過(guò),GitHub Copilot只是一個(gè)輔助工具,開(kāi)發(fā)者仍需仔細(xì)地測(cè)試、審查自己的代碼。隨著智能系統(tǒng)的優(yōu)化,這一工具不僅有助于提高現(xiàn)有工程師的開(kāi)發(fā)效率,也有潛力讓更多人開(kāi)始探索軟件開(kāi)發(fā)。

來(lái)源:GitHub、CNBC、The Verge