奧推網

選單
科技

程式設計師減負神器!GitHub聯手OpenAI,用AI自動補寫程式碼

智東西(公眾號: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

不僅適用於開發老將,也能讓程式設計本身更加容易上手

專案連結:https://copilot。github。com

#FormatStrongID_1#

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%,它一直在變得更聰明。

#FormatStrongID_2#

根據專案網站,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擬構建相應的商業版本。

註冊地址:https://github。com/features/copilot/signup

GitHub Copilot

目前僅出現在微軟的免費開源產品Visual Studio Code中,微軟計劃在未來將其納入商業Visual Studio產品中

#FormatStrongID_3#

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模型,供第三方開發人員將其融入自己的應用程式

#FormatStrongID_5#

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個程式碼編輯器。

#FormatStrongID_6#

Copilot的問世凸顯了OpenAI與其投資者微軟之間日益密切的關係。除了用OpenAI提供的AI軟體來理解開發者程式設計外,微軟也在使用OpenAI的GPT-3語言模型,讓非開發人員可以使用語音命令而非程式碼來構建應用程式。

開發者是微軟企業戰略的一大核心。發展GitHub使用的工具,降低了經驗不足的程式設計師的開發門檻,能幫助微軟進一步擴大其開發者隊伍。

不過,GitHub Copilot只是一個輔助工具,開發者仍需仔細地測試、審查自己的程式碼。隨著智慧系統的最佳化,這一工具不僅有助於提高現有工程師的開發效率,也有潛力讓更多人開始探索軟體開發。