智東西(公眾號:zhidxcom)
作者 | 心緣
編輯 | 漠影
智東西6月30日報道,微軟、微軟旗下代碼服務托管平臺GitHub和知名人工智能研究型公司OpenAI推出一種新人工智能(AI)自動編程工具Copilot,能自動生成代碼,供開發者參考使用。
▲GitHub Copilot自動補全導入推文代碼
這是微軟向OpenAI投資10億美元的第一個重大成果。微軟正在尋求簡化編程流程的方法,試圖教計算機寫代碼,而GitHub Copilot項目是一個相當值得關注的嘗試。
GitHub Copilot從開發者已經編寫的代碼和注釋中提取上下文,試圖理解開發者意圖,生成需要添加的一行、多行代碼或整個函數,當程序員接受或拒絕建議時,模型就會學習越來越適應和匹配開發者的編程風格。
這使得程序員無需在寫代碼時去查閱大量文檔或搜索相關示例,更加聚焦于開發工作本身。
正如OpenAI員工Harri Edwards所言:“用一種不熟悉的語言編寫代碼,用谷歌搜索所有東西,就像用一本短語手冊去瀏覽一個外國國家。而使用GitHub Copilot,好比雇傭一名翻譯。”
▲GitHub Copilot自動補全抓取書評網站Goodreads評分的代碼
GitHub方面強調,Copilot所做的可不僅是像“鸚鵡學舌”那樣照搬見過的代碼,它推薦的絕大多數代碼都是唯一生成的、訓練集中并不存在的。
OpenAI聯合創始人兼CTO Greg Brockman將這項工比作“編程的最后一英里”。微軟首席技術官Kevin Scott認為,GitHub Copilot不僅適用于開發老將,也能讓編程本身更加容易上手。
項目鏈接://copilot.github.com
一、支持各種編程語言,高效生成匹配代碼
GitHub首席執行官Nat Friedman在一篇博客文章中寫道,GitHub Copilot支持幾乎所有編程語言,技術預覽版最適合Python、JavaScript、TypeScript、Ruby和Go。
Nat Friedman將GitHub Copilot描述為結對編程(pair programming)的演進,兩個程序員將在同一項目上并肩協作,檢查彼此的錯誤,提供代碼建議,加快開發過程。Copilot使得其中一個程序員是虛擬的。
無論開發者在用一種新的語言或框架,還是只是剛剛開始學習寫代碼,都能借助這一新工具更快上手編程。
GitHub Copilot比大多數代碼助手能更好地理解上下文。無論是文檔字符串、注釋、函數名,還是代碼本身,GitHub Copilot可以根據上下文合成代碼來匹配。

這也是令許多工程師印象深刻的一點。有時Copilot仿佛預言家,能準確預判開發者接下來想輸入什么,相當節省碼字時間。
開發者可以寫一個注釋來描述自己想要的邏輯,讓GitHub Copilot來生成代碼。

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

此外,導入一個單元測試包,GitHub Copilot就能建議匹配開發者實現代碼的測試。

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

項目網站上展示了導入推文、繪制散點圖、抓取Goodreads評分等自動編寫代碼示例。
▲GitHub Copilot自動補全繪制散點圖代碼
GitHub最近對一組Python函數進行的基準測試顯示,如果刪除函數,并讓GitHub Copilot來重新填充,首次嘗試時,該模型的準確率為43%,嘗試10次后,其準確率上升至57%,它一直在變得更聰明。
二、技術預覽版試用名額有限,未來推商業產品
根據項目網站,GitHub的數百名工程師每天都在編碼時使用Copilot,這改變了他們的工作方式。
OpenAI聯合創始人兼CTO Greg Brockman說,編程包括提出一個如何做某件事的想法,然后實現它,GitHub Copilot擅長第二部分。“你不想去閱讀Twilio的API文檔。它(Copilot)知道所有這些東西。這實際上相當可靠。”
“這可以讓我不必為了用某個工具而查閱一大堆文檔,這對提高工作效率非常有益。”微軟首席技術官Kevin Scott亦稱贊道。
“這是我見過的機器學習(ML)最令人興奮的應用。”Instagram聯合創始人Mike Krieger感慨說:“在第一天,GitHub Copilot已經教會了我Javascript對象比較的細微差別,并且和我一樣適應我們的數據庫模式。”
由于GitHub Copilot需要用到最先進的人工智能硬件,因此在技術預覽期間,GitHub將為有限數量的測試者免費提供GitHub Copilot。如果技術預覽版是成功的,下一步,GitHub擬構建相應的商業版本。

注冊地址://github.com/features/copilot/signup
GitHub Copilot目前僅出現在微軟的免費開源產品Visual Studio Code中,微軟計劃在未來將其納入商業Visual Studio產品中。
三、幕后功臣:OpenAI GPT-3的后代Codex
OpenAI是一家現在由Y Combinator總裁Sam Altman領導的研究公司。自Altman掌權以來,OpenAI已從非營利模式轉向“有限盈利”(capped-profit)模式,接受了微軟的投資,并開始授權其GPT-3算法。

GitHub Copilot基于一種名為OpenAI Codex的新型AI算法,借助了許多編程語言的大量代碼和微軟Azure云計算能力。
OpenAI Codex接受過從GitHub提取的數十億行公開可用代碼以及英語語言示例的訓練,能將人類自然語言翻譯成機器可理解的編程代碼,Brockman將Codex描述為超大規模語言模型GPT-3的后代。
GPT-3是OpenAI的旗艦語言生成算法,參數規模達1750億。它可以生成有時無法與人類書寫區分的文本。GPT-3生成語言,Codex則生成代碼。
這不是微軟第一次借助OpenAI提供智能軟件。上個月,微軟展示了它將如何更新Power Apps Studio應用程序,非技術人員能借此來編寫應用程序,用戶可以輸入描述他們想要添加元素的單詞,并讓GPT-3顯示必要代碼的選項。
OpenAI認識到在GPT-3中生成代碼的潛力。它在網站上寫道,提供GPT-3的在線服務可以處理“代碼補全”(code completion)。
但Brockman說,當OpenAI剛開始訓練該模型時,并沒有打算教它如何幫助編寫代碼。它更像是一種通用語言模型,可以生成文章、修復錯誤的語法以及將一種語言翻譯成另一種語言。
在接下來的幾個月里,人們用這個模型做實驗,看看它能做什么,有的很有用,有的則顯得有些蠢。比如,一位工程師制作了一個網站,可以設計一個看起來像西瓜的按鈕。Brockman聯系了GitHub首席執行官Nat Friedman,當時他在運行一個有數百萬程序員在編寫代碼的“key?destination”,新的故事即從那里開始。
OpenAI預告將于今年夏天晚些時候通過其API發布Codex模型,供第三方開發人員將其融入自己的應用程序。
四、已設立許多安全機制,但還不完美
GitHub員工試圖確保GitHub Copilot生成安全、高質量的代碼,但并非所有使用的代碼都經過了漏洞、不安全實踐或個人數據的審查。
“我們已經為Copilot建立了許多安全機制,我們認為這些機制在減少在各個領域出錯的機會方面是先進的,但它們絕對不是完美的。”Friedman透露。
使用GitHub Copilot時,所有數據都安全地傳輸和存儲,其遙測技術的使用被嚴格限制在個人需要知道的基礎上。GitHub承諾不會將任何開發者的私有代碼引用到為其他用戶生成代碼。
Copilot的網站寫道:“由于底層技術的預發布性質,GitHub Copilot有時可能生成不希望的輸出,包括有偏見、歧視、辱罵或攻擊性的輸出。”
鑒于對GPT-3偏見和濫用語言模式的批評,OpenAI似乎還沒有找到阻止算法繼承其訓練數據最壞元素的方法。
GitHub還警告說,該模型可能會顯示電子郵件地址、API密鑰或電話號碼,但這種情況很罕見,而且發現數據是由該算法合成或偽隨機生成的。
不過,Copilot生成的代碼在很大程度上是原創的。GitHub進行的一項測試發現,在訓練集中只能找到0.1%的Copilot生成代碼。
這不是第一個嘗試自動生成代碼來幫助程序員的項目。去年10月,美國初創公司Kite已經推出了一個類似的功能,借助AI幫開發者自動補全代碼片段,該功能支持16個代碼編輯器。
結語:或有助于擴大開發者陣容
Copilot的問世凸顯了OpenAI與其投資者微軟之間日益密切的關系。除了用OpenAI提供的AI軟件來理解開發者編程外,微軟也在使用OpenAI的GPT-3語言模型,讓非開發人員可以使用語音命令而非代碼來構建應用程序。
開發者是微軟企業戰略的一大核心。發展GitHub使用的工具,降低了經驗不足的程序員的開發門檻,能幫助微軟進一步擴大其開發者隊伍。
不過,GitHub Copilot只是一個輔助工具,開發者仍需仔細地測試、審查自己的代碼。隨著智能系統的優化,這一工具不僅有助于提高現有工程師的開發效率,也有潛力讓更多人開始探索軟件開發。
來源:GitHub、CNBC、The Verge