
智東西(公眾號:zhidxcom)
作者 | 心緣
編輯 | 漠影
智東西6月30日報道,微軟、微軟旗下代碼服務托管平臺GitHub和知名人工智能研究型公司OpenAI推出一種新人工智能(AI)自動編程工具Copilot,能自動生成代碼,供開發者參考使用。
▲GitHub Copilot自動補全導入推(tui)文代碼
這是微軟向OpenAI投資10億美元的第一個重大成果。微軟正在尋求簡化(hua)編程流程的(de)方法(fa),試圖教(jiao)計算機寫代碼,而GitHub Copilot項目是(shi)一個相當值得關注的(de)嘗試。
GitHub Copilot從開發者已經編(bian)寫的代碼和注釋中(zhong)提取(qu)上(shang)下(xia)文,試圖(tu)理解開發者意圖(tu),生(sheng)成(cheng)需要添加的一行(xing)、多行(xing)代碼或整(zheng)個函(han)數(shu),當程序員接受或拒絕(jue)建議時(shi),模型就會學習(xi)越來越適(shi)應和匹配開發者的編(bian)程風格(ge)。
這使得程序員無需在寫代碼時去查閱大量文檔或搜索相關示例,更加聚焦于開發工作本身。
正如(ru)OpenAI員工(gong)Harri Edwards所言:“用一(yi)(yi)種不熟悉(xi)的(de)語言編(bian)寫(xie)代碼,用谷(gu)歌搜索所有東(dong)西,就像(xiang)用一(yi)(yi)本短語手冊去瀏覽一(yi)(yi)個外(wai)國國家。而使用GitHub Copilot,好比雇傭一(yi)(yi)名翻譯。”
▲GitHub Copilot自動補全抓(zhua)取書評網站Goodreads評分(fen)的代(dai)碼
GitHub方面強調,Copilot所做的可不僅(jin)是(shi)像“鸚鵡學舌”那樣照搬見過的代碼,它推薦的絕大(da)多數代碼都是(shi)唯一(yi)生成(cheng)的、訓練集中并不存在的。
OpenAI聯合創始人兼CTO Greg Brockman將這項工比作“編程的最后一英里”。微軟首席技術官Kevin Scott認為,GitHub Copilot不僅適用于開發老將,也能讓編程本身更加容易上手。
項(xiang)目鏈(lian)接(jie)://copilot.github.com
一、支持各種編程語言,高效生成匹配代碼
GitHub首席執行官Nat Friedman在一篇博客文章中寫道,GitHub Copilot支持幾乎所有編程語言,技術預覽版最適合Python、JavaScript、TypeScript、Ruby和Go。
Nat Friedman將GitHub Copilot描述為結對編程(pair programming)的演進(jin),兩個程(cheng)(cheng)序員(yuan)將(jiang)在(zai)同一項目(mu)上并肩協作,檢查彼此的錯(cuo)誤,提供代碼建(jian)議(yi),加快開發(fa)過程(cheng)(cheng)。Copilot使(shi)得其(qi)中一個程(cheng)(cheng)序員(yuan)是虛擬的。
無論開發者在用一種新(xin)的(de)語言或框架,還是只是剛剛開始學(xue)習寫代碼(ma),都能(neng)借助這(zhe)一新(xin)工具更(geng)快(kuai)上手編程。
GitHub Copilot比大多數(shu)(shu)代碼助(zhu)手能更好地(di)理解上(shang)下(xia)文(wen)。無論是文(wen)檔字(zi)符(fu)串、注(zhu)釋、函數(shu)(shu)名,還是代碼本(ben)身(shen),GitHub Copilot可以根據上(shang)下(xia)文(wen)合(he)成代碼來匹配。
這也(ye)是令許多工程師印象(xiang)深刻的(de)一點。有時(shi)Copilot仿(fang)佛(fo)預言家,能準確預判開發者(zhe)接下來想輸入什么,相當節省碼字(zi)時(shi)間。
開發者可以(yi)寫(xie)一個注釋來描述自己想要的(de)邏輯,讓GitHub Copilot來生(sheng)成代碼。
GitHub Copilot還非常適合快速生(sheng)成(cheng)模板和(he)重復(fu)的代碼(ma)模式(shi),給(gei)它提供(gong)幾個示例,它就能自動生(sheng)成(cheng)余下的重復(fu)模式(shi)代碼(ma)。
此外,導入一個單元測(ce)試包,GitHub Copilot就能建議匹(pi)配開發者(zhe)實現(xian)代碼的測(ce)試。
如果(guo)開發者想要(yao)評(ping)估幾種(zhong)不同的方法,GitHub Copilot還可以(yi)(yi)展示一個解決(jue)方案列表,開發者可以(yi)(yi)使(shi)用或編輯其中(zhong)的代碼(ma)以(yi)(yi)滿足自(zi)身需要(yao)。
項目網(wang)站上展示了導入推文、繪制散點圖、抓取Goodreads評分(fen)等自動編寫代碼(ma)示例。
▲GitHub Copilot自動補全繪制(zhi)散點圖代碼
GitHub最近對一組(zu)Python函(han)數(shu)進(jin)行的基準(zhun)測(ce)試顯示,如果刪除(chu)函(han)數(shu),并(bing)讓GitHub Copilot來重(zhong)新填(tian)充,首次(ci)(ci)嘗試時,該(gai)模型的準(zhun)確(que)率(lv)為43%,嘗試10次(ci)(ci)后(hou),其(qi)準(zhun)確(que)率(lv)上升至57%,它(ta)一直(zhi)在(zai)變得更聰明。
二、技術預覽版試用名額有限,未來推商業產品
根據項(xiang)目網站,GitHub的數百名(ming)工(gong)程師(shi)每天都在(zai)編碼時(shi)使用Copilot,這改變了他們的工(gong)作(zuo)方式。
OpenAI聯合(he)創始人兼CTO Greg Brockman說,編程包括提(ti)出一個如何做某件事的想法,然(ran)后實現它,GitHub Copilot擅長第二部分。“你(ni)不想去閱讀Twilio的API文檔(dang)。它(Copilot)知道所有這些東西(xi)。這實際(ji)上(shang)相當可靠。”
“這(zhe)(zhe)可以讓(rang)我不必(bi)為了用(yong)某個工(gong)(gong)具而查(cha)閱一大堆文檔,這(zhe)(zhe)對(dui)提高工(gong)(gong)作效率非(fei)常有益(yi)。”微軟首(shou)席技(ji)術官Kevin Scott亦稱贊道。
“這是我(wo)(wo)見過的機(ji)器學(xue)習(xi)(ML)最令人(ren)興奮的應用。”Instagram聯合創始人(ren)Mike Krieger感慨(kai)說(shuo):“在第一天(tian),GitHub Copilot已經教會了我(wo)(wo)Javascript對(dui)象比較的細微差別(bie),并且和(he)我(wo)(wo)一樣適應我(wo)(wo)們的數據庫模(mo)式。”
由于GitHub Copilot需要用到最先進的人工智能硬件,因此在技術預覽期間,GitHub將為有限數量的測試者免費提供GitHub Copilot。如果技術預覽版是成(cheng)功的,下一步,GitHub擬構(gou)建(jian)相應的商業版本。
注冊地址://github.com/features/copilot/signup
GitHub Copilot目前僅出現在微軟的免費開源產品Visual Studio Code中,微軟計劃在未來將其納入商業Visual Studio產品中。
三、幕后功臣:OpenAI GPT-3的后代Codex
OpenAI是(shi)一家現在(zai)由Y Combinator總裁(cai)Sam Altman領導(dao)的研(yan)究公司。自Altman掌權以來,OpenAI已從非營利模式轉向“有限盈利”(capped-profit)模式,接受(shou)了微軟的投資,并(bing)開始授權其(qi)GPT-3算法。
GitHub Copilot基于一種名為OpenAI Codex的新型AI算法,借(jie)助了許多(duo)編程(cheng)語言的大量代碼和微軟(ruan)Azure云計算能力。
OpenAI Codex接受過從GitHub提取的數十億行公開可用代碼以及英語語言示例的訓練,能將人類自然語言翻譯成機器可理解的編程代碼,Brockman將Codex描述為超大規模語言模型GPT-3的后代。
GPT-3是(shi)OpenAI的旗(qi)艦語(yu)言(yan)生(sheng)成(cheng)算法(fa),參數規模達1750億。它可以生(sheng)成(cheng)有時無法(fa)與人類書寫(xie)區分的文本。GPT-3生(sheng)成(cheng)語(yu)言(yan),Codex則生(sheng)成(cheng)代碼。
這不是(shi)微(wei)軟第一次借(jie)(jie)助OpenAI提供智(zhi)能(neng)軟件。上個月,微(wei)軟展(zhan)示(shi)了它將如何(he)更新Power Apps Studio應用(yong)(yong)程序(xu)(xu),非(fei)技術人員能(neng)借(jie)(jie)此來編寫應用(yong)(yong)程序(xu)(xu),用(yong)(yong)戶可以輸入描述他們想要(yao)添加元素的(de)單詞,并讓GPT-3顯示(shi)必要(yao)代碼的(de)選項。
OpenAI認識(shi)到在GPT-3中生成代碼(ma)(ma)的(de)潛力。它在網(wang)站上寫道,提供GPT-3的(de)在線服(fu)務可以處理“代碼(ma)(ma)補(bu)全”(code completion)。
但Brockman說(shuo),當OpenAI剛開始訓練該模(mo)型(xing)時,并沒有打算教它如何幫(bang)助編寫代碼(ma)。它更像是一種(zhong)通用語(yu)言模(mo)型(xing),可以生成文章、修(xiu)復錯誤的語(yu)法以及將一種(zhong)語(yu)言翻譯成另一種(zhong)語(yu)言。
在(zai)接下(xia)來的(de)(de)幾個(ge)月里,人們用這個(ge)模型做實(shi)驗,看看它能(neng)做什么,有(you)的(de)(de)很有(you)用,有(you)的(de)(de)則顯得有(you)些蠢。比(bi)如,一位工(gong)程(cheng)師制作(zuo)了一個(ge)網站,可以(yi)設計一個(ge)看起(qi)來像西瓜的(de)(de)按鈕。Brockman聯系了GitHub首(shou)席執行官Nat Friedman,當(dang)時他在(zai)運(yun)行一個(ge)有(you)數(shu)百萬(wan)程(cheng)序員在(zai)編寫代碼的(de)(de)“key?destination”,新(xin)的(de)(de)故事即從那里開始(shi)。
OpenAI預告將于今年夏天晚些時候通過其API發布Codex模型,供第三方開發人員將其融入自己的應用程序。
四、已設立許多安全機制,但還不完美
GitHub員工試圖(tu)確保GitHub Copilot生(sheng)成(cheng)安全、高(gao)質量的(de)代(dai)碼,但(dan)并(bing)非(fei)所有使(shi)用(yong)的(de)代(dai)碼都經(jing)過了漏洞、不安全實(shi)踐或個人數據的(de)審(shen)查(cha)。
“我們已經為Copilot建立了許多安全機制,我們認為這些機制在減少在各個領域出錯的機會方面是先進的,但它們絕對不是完美的。”Friedman透露。
使用GitHub Copilot時,所有數據都安全地傳輸和存儲,其遙測技術的使用被嚴格限制在個人需要知道的基礎上。GitHub承諾不會將任何開發者的私有代碼引用到為其他用戶生成代碼。
Copilot的網站寫道:“由于底層技術的預發布性質,GitHub Copilot有時可能生成不希望的輸出,包括有偏見、歧視、辱罵或攻擊性的輸出。”
鑒于對(dui)GPT-3偏見和(he)濫用語言模式的批評,OpenAI似乎(hu)還沒(mei)有(you)找(zhao)到阻止(zhi)算法繼承(cheng)其訓(xun)練數(shu)據最壞元素的方(fang)法。
GitHub還警告說,該模型可能會顯示電子郵件地址、API密鑰或電話號碼,但這種情況很罕見,而且發現數據是由該算法合成或偽隨機生成的。
不過,Copilot生成的代碼在很大程度上是原創的。GitHub進行的(de)一項測(ce)試(shi)發現,在(zai)訓練集中只能找到0.1%的(de)Copilot生成代碼。
這不是(shi)第一個嘗(chang)試自(zi)動生成代(dai)碼來幫(bang)助程序員的項(xiang)目。去年(nian)10月(yue),美國初創(chuang)公司Kite已經(jing)推出了一個類似的功能,借助AI幫(bang)開發(fa)者自(zi)動補全代(dai)碼片(pian)段,該功能支(zhi)持16個代(dai)碼編輯器。
結語:或有助于擴大開發者陣容
Copilot的(de)問世(shi)凸顯了OpenAI與其投(tou)資者微軟(ruan)之間日(ri)益(yi)密切的(de)關系。除了用OpenAI提供(gong)的(de)AI軟(ruan)件來理解開發者編程(cheng)外,微軟(ruan)也在使(shi)用OpenAI的(de)GPT-3語言模型(xing),讓非(fei)開發人員可以(yi)使(shi)用語音(yin)命令而非(fei)代碼來構建應用程(cheng)序。
開發(fa)(fa)者是微軟(ruan)企(qi)業戰略的(de)一大核心。發(fa)(fa)展GitHub使用的(de)工具,降低了經驗不足的(de)程(cheng)序員的(de)開發(fa)(fa)門檻,能幫助微軟(ruan)進一步(bu)擴(kuo)大其開發(fa)(fa)者隊伍。
不過,GitHub Copilot只是一個輔助工(gong)具,開發者(zhe)仍需仔細地測試、審查自(zi)己(ji)的代碼。隨著智能系統的優(you)化(hua),這一工(gong)具不僅有(you)助于提(ti)高現(xian)有(you)工(gong)程師的開發效率,也有(you)潛(qian)力讓更多人開始探索軟件開發。
來(lai)源:GitHub、CNBC、The Verge