白二娃
AI編程是人們對人工智能的一大期望,現在的AI編程技術雖然已經惠及了許多不會編程的普通用戶,但還遠沒有達到滿足人們預期的程度,一大痛點在于:AI如何靈活處理程序員的需求,而非機械地記憶與復制粘貼代碼。這不,微軟、GitHub、OpenAI三方聯(lián)手發(fā)布了人工智能代碼建議方案——GitHubCopilot,可以在程序員編碼的時候自動推薦或生成代碼供其使用,程序員再也不用因為敲代碼而加班了!
簡單來說,GitHub Copilot可以視為一位與開發(fā)者協(xié)作編寫代碼的虛擬程序員。它可以根據當前代碼中已有的字符串、注釋、函數名或是代碼上下文語義,自動生成一行或多行代碼或建議,供程序員選擇。隨著程序員接受或拒絕建議,該模型會隨著時間的推移,不斷地學習且變得更加智能與復雜。在它的幫助下開發(fā)者能用更少的時間更快地編寫代碼。

Copdot根據注釋自動填充代碼
GitHub是微軟2018年以75億美元收購的全球知名代碼托管平臺,因此Copilot擁有了可供訓練的TB級的公共代碼。微軟在2019年向非營利人工智能研究機構OpenAI投資10億美元,用于開發(fā)AGI(通用人工智能)平臺。此次GitHub Copilot V0.1版發(fā)布,就是三方合力研發(fā)的重大成果之一。
Copilot建立在OpenAI全新的Codex算法之上,Codex是先進AI語言模型GPT-3的一種衍生版本,該模型接受了從GitHub中提取的TB級公開源代碼和英語自然語言的訓練,因此它能同時理解編程語言和人類語言。在Azure云計算能力和內部多重安全機制的輔助下,Copilot可以做到分析文檔中的字符串、注釋、函數名稱以及代碼本身,從而生成新的安全、高質量的代碼。目前Copilot支持幾種熱門編程語言:Python、JavaScript、TypeScript、Ruby和Go。目前已有少量GitHub用戶收到試用邀請,在VisualStudio Code中可以啟用Copilot擴展。
至于Copilot的編程水平如何,有人把它拉去做LeetCode的題庫,它每次都能實時地生成可以通過LeetCode測試的代碼,這種好得過分的成績讓人懷疑Copilot已經在LeetCode數據庫上進行過訓練。而微軟公布的一項基準測試結果表明,以一組在開源存儲庫中具有良好覆蓋率的Python函數為測試對象,在清除函數體之后,使用GitHub Copilot來填充代碼。該模型在第一次嘗試時正確率達43%,經過10次的嘗試之后,正確率提升到了57%。而GitHub的員工在內部試用后多數人給出了將保留開啟GitHubCopriot提示的正面評價。
GitHub則表示GitHub Copilot建議的代碼并不完美,有時候它提供的代碼甚至毫無意義。在開發(fā)過程中,開發(fā)者仍然是主導,對它建議的代碼要像任何其他代碼一樣經過仔細測試和審查。
對于GitHub Copilot是否會直接復制代碼的問題,GitHub表示“只有0.1%的情況下,GitHubCopilot提供的代碼建議中可能包含一些來自訓練集的字符或片段”。
但是,有網友公布了他的發(fā)現:讓GitHub Copilot生成快速平方根倒數算法(Fast Inverse Square Root),結果代碼竟與《雷神之錘3》中那段傳奇代碼一模一樣,連那句著名的“What the fuck?”注釋也抄了下來!
快速平方根倒數算法也稱為平方根倒數速算法。這個算法可以高效地輸出浮點數的對應近似值,極大地減輕了3D圖像演算的壓力。此算法因在《雷神之錘3》源代碼中被引用時連開發(fā)者也看不懂其中一個神奇的常數“Ox5f3759df”的取值原理,留下了那句著名的吐槽而被人們所熟知。如此一來,GitHub Copilot抄襲代碼成了“真·雷神之錘”。
因此人們對于使用GitHub Copilot開發(fā)是否更容易導致侵權,并因此引起的版權糾紛的責任劃分有了更多的疑慮。

GitHub Copilot完全復制了《雷神之錘3》的著名代碼
在討論GitHub Copilot侵權問題前,我們需要先了解一個概念:GPL(GNU通用公共許可證),它是自由軟件和開源軟件中使用最廣泛的許可協(xié)議。最初由理查德·斯托曼為GNU計劃而撰寫,目前最新版本為第3版。GPL定義了自由軟件:以任何目的運行此程序的自由;再發(fā)行復制件的自由;改進此程序,并公開發(fā)布改進的自由。它通過斯托曼發(fā)明的Copyleft的法律機制實現,要求任何包含該開源許可證的衍生作品,即使僅有幾行代碼,也必須免費提供全部源代碼以及修改和分發(fā)它們的權利。

GitHub Copilot工作原理

Julia Reda為GitHub Copflot辯護