機器之心編輯部
AI 程式設計輔助工具 Copilot:微軟、OpenAI、GitHub 三家聯合打造。
GitHub Copilot 是一個 AI 程式碼合成器,並不是搜尋引擎:它提出的絕大多數程式碼建議都是新生成的,此前從未出現過。
簡而言之,這就是未來。

在項目開發中,優秀的程式碼自動補全工具可以提升工作效率。然而,傳統的 IDE 基本都使用搜尋方法進行補全,在一些場景下效果不佳。
今日,GitHub 和 OpenAI 聯合發佈了新的 AI 程式碼補全工具 GitHub Copilot,並展示了技術預覽版。該工具可以在 VS Code 編輯器中自動完成程式碼片段,這也是 OpenAI 接受微軟 10 億美元投資以來的首個重大成果。

目前,GitHub Copilot 項目還只是嚴格的技術預覽版,使用者可以在主頁註冊報名,將有機會訪問試用。

GitHub Copilot 註冊地址:https://github.com/features/copilot/signup
對於 GitHub 和 OpenAI 推出的這款全新 AI 程式碼補全工具,網友們給出了極高的評價。下面這位使用者大致可以代表大多數試用者的心聲。ta 表示:「我使用 Alpha 版兩週了,Copilot 似乎能夠準確地知道我接下來要輸入的內容,這令我大受震撼。有時它甚至建議我要查找的內容,例如選擇隨機十六進位制隨機碼的片段或者使用所有常見圖像 mime-types 完成陣列。此外,Copilot 在處理 React 元件時也特別有用,可以做出非常準確的預測。最後,Copilot 改變了程式設計師記錄自己程式碼的方式。如果你在實現程式碼之前編寫了非常好的描述性註釋,它能夠更好地給出正確程式碼建議,有時甚至可以為你編寫整函數。」

MSFTResearch 高級研究員 Alex Polozov 更是表示:不誇張的講,Copilot 將成為本世紀 20 年代排名前三的技術進展!

甚至有網友表示:這是要終結程式設計?

不過,雖然使用者對 Copilot 提供的生產力提升讚不絕口,GitHub 也表示:並不是所有使用的程式碼都經過了漏洞、不安全實踐或個人資料的審查。因此,他們也設置了一些過濾器來防止 Copilot 生成攻擊性的語言,並可能效果並不完美,需要後續完善。
Copilot 背後的技術
首先,訓練資料上,GitHub Copilot 是在數十億行公共程式碼上訓練的。

從技術角度來看,GitHub Copilot 工具由 OpenAI 開發的全新 AI 系統 OpenAI Codex 提供支持。OpenAI 的聯合創始人兼技術長 Greg Brockman 說:Codex 是 GPT-3 的後代。

OpenAI Codex 在人們如何使用程式碼方面擁有廣泛的知識,並且在程式碼生成領域顯著優於 GPT-3 了,部分原因在於該系統是在包含大量公開源程式碼的資料集上訓練的。更具體地,Codex 的訓練集中包含了提取自 GitHub 的 TB(terabyte)級公開可用程式碼以及英語語言示例。
由於是在公開可用源程式碼和自然語言上訓練,Codex 可以同時理解程式語言和人類語言。因此,在整個實現過程中,Copilot 編輯器擴展將開發者的註釋和程式碼發送至 Copilot 服務端,然後使用 Codex 生成和建議單行程式碼和整個函數。

此外,據 OpenAI 的一位代表透露:OpenAI 計劃今年夏季推出基於其 API 的 Codex 版本,這樣開發者們就可以利用該技術創建自己的 app 了。
在具體實現中,GitHub Copilot 從編寫的程式碼中提取上下文,並給出整行程式碼或整函數的建議。該工具可以幫助開發者快速發現解決問題、編寫測試和搜尋全新 API 的替代方法,而不需要在網上繁瑣地定向搜尋答案。
另外,使用 GitHub Copilot,開發者始終可以掌控一切,既可以循環查看 Copilot 給出的程式碼建議,選擇接收或者拒絕,並能夠手動地編輯這些程式碼。Copilot 會適應開發者所做的編輯,並適配編碼風格。
GitHub Copilot 適用於多種框架和語言,但本次展示的技術預覽版尤其適用於 Python、JavaScript、TypeScript、Ruby 和 Go 語言。GitHub 認為該工具是結對程式設計(pair programming)的重大進展,程式設計師在編寫程式碼時有了一個「虛擬的幫手」,它可以捕捉到程式設計師的錯誤,加速開發過程。
那麼,Copilot 效果如何?
最近,Github 針對一組在開源儲存庫中具有良好測試覆蓋率的 Python 函數進行了基準測試,測試團隊清除了函數體並要求 GitHub Copilot 填充它們。模型在第一次嘗試正確率是 43% ,經過 10 次嘗試後,正確率達到了 57%。之後 GitHub Copilot 還將進行多次訓練和測試,準確率會進一步提升。
下面,我們就看一下 GitHub 給出的具體 demo 展示。
Copilot 的補全效果
相比於市面上一些程式設計輔助工具,Copilot 的上下文理解能力要強大得多。無論是在文件字串、註釋、函數名還是程式碼主體中,Copilot 都能根據程式設計者已寫出的上下文生成匹配的程式碼。
先來看一下 Copilot 的主要功能——程式碼補全的效果,以 TypeScript 語言為例,給出函數名和參數,Copilot 就能自動補全程式碼。

除了補全函數,Copilot 還能根據註釋寫出程式碼。程式設計者給出一條描述程式碼邏輯的註釋,GitHub Copilot 就能自動生成程式碼:

在程式設計過程中,有些程式碼的格式和內容非常相似,重複編寫耗時且無聊。現在 GitHub Copilot 能夠幫程式設計者解決這個問題,將簡單重複的程式碼編寫部分自動化:

在軟體開發的過程中,除了編寫程式碼,軟體測試也是非常重要的,對一個程式碼項目起到支撐的作用。匯入一個測試包,其餘的測試程式碼 GitHub Copilot 就能夠幫開發者完成。

在程式設計中,同一個函數常有多種實現方法,程式設計者通常會根據程式碼的實現效果和運行性能選擇最合適的方法。編寫多種實現需要花費時間和精力,現在使用 GitHub Copilot 一鍵就能搞定,如下圖所示,點選 Next 和 Previous 就能查看多種實現方法,點選 Accept 選中其中一種。

今天 GitHub 推出的 Copilot 技術預覽版本,還僅限於 Python、JavaScript、TypeScript、Ruby 和 Go 語言。此外,開發團隊表示,在努力使其變得更好的同時,GitHub Copilot 補全的程式碼應該像其他任何程式碼一樣經過仔細審查和測試。這些仍需要人類程式設計者的監督和最佳化,但 AI 自動程式設計的願景已指日可待。
參考連結:
https://github.blog/2021-06-29-introducing-github-copilot-ai-pair-programmer/
https://news.ycombinator.com/item?id=27676266
https://www.reddit.com/r/MachineLearning/comments/oaambv/n_github_and_openai_release_copilot_an_ai_pair/
https://www.theverge.com/2021/6/29/22555777/github-openai-ai-tool-autocomplete-code
WAIC AI開發者論壇:後深度學習的AI時代
7月8日—10日,AI 開發者論壇將通過三大核心模組:AI開發者論壇、WAIC· 開發者駭客松和WAIC· 雲帆獎展示本年度人工智慧領域最前沿的研究方向和技術成果。
7月10日,WAICAI開發者論壇邀請到多位業界大咖帶來精彩分享,主題涵蓋大規模語言智慧、SysML(機器學習系統)、多模態機器學習及大規模自動生成技術、RISC-V技術及生態、AI 原生計算機系統等熱門話題,滿足 AI 開發者多層次的學習需求。
在精彩的分享外,我們還準備了RTX 3060 顯示卡、HHKB鍵盤、Air Tag、人工智慧專業書籍、桌搭滑鼠墊,現場簽到即可參與抽取。
識別下方二維碼,立即報名。
