白二娃
AI編程是人們對人工智能的一大期望,現(xiàn)在的AI編程技術(shù)雖然已經(jīng)惠及了許多不會編程的普通用戶,但還遠(yuǎn)沒有達(dá)到滿足人們預(yù)期的程度,一大痛點(diǎn)在于:AI如何靈活處理程序員的需求,而非機(jī)械地記憶與復(fù)制粘貼代碼。這不,微軟、GitHub、OpenAI三方聯(lián)手發(fā)布了人工智能代碼建議方案——GitHubCopilot,可以在程序員編碼的時候自動推薦或生成代碼供其使用,程序員再也不用因?yàn)榍么a而加班了!
簡單來說,GitHub Copilot可以視為一位與開發(fā)者協(xié)作編寫代碼的虛擬程序員。它可以根據(jù)當(dāng)前代碼中已有的字符串、注釋、函數(shù)名或是代碼上下文語義,自動生成一行或多行代碼或建議,供程序員選擇。隨著程序員接受或拒絕建議,該模型會隨著時間的推移,不斷地學(xué)習(xí)且變得更加智能與復(fù)雜。在它的幫助下開發(fā)者能用更少的時間更快地編寫代碼。
Copdot根據(jù)注釋自動填充代碼
GitHub是微軟2018年以75億美元收購的全球知名代碼托管平臺,因此Copilot擁有了可供訓(xùn)練的TB級的公共代碼。微軟在2019年向非營利人工智能研究機(jī)構(gòu)OpenAI投資10億美元,用于開發(fā)AGI(通用人工智能)平臺。此次GitHub Copilot V0.1版發(fā)布,就是三方合力研發(fā)的重大成果之一。
Copilot建立在OpenAI全新的Codex算法之上,Codex是先進(jìn)AI語言模型GPT-3的一種衍生版本,該模型接受了從GitHub中提取的TB級公開源代碼和英語自然語言的訓(xùn)練,因此它能同時理解編程語言和人類語言。在Azure云計(jì)算能力和內(nèi)部多重安全機(jī)制的輔助下,Copilot可以做到分析文檔中的字符串、注釋、函數(shù)名稱以及代碼本身,從而生成新的安全、高質(zhì)量的代碼。目前Copilot支持幾種熱門編程語言:Python、JavaScript、TypeScript、Ruby和Go。目前已有少量GitHub用戶收到試用邀請,在VisualStudio Code中可以啟用Copilot擴(kuò)展。
至于Copilot的編程水平如何,有人把它拉去做LeetCode的題庫,它每次都能實(shí)時地生成可以通過LeetCode測試的代碼,這種好得過分的成績讓人懷疑Copilot已經(jīng)在LeetCode數(shù)據(jù)庫上進(jìn)行過訓(xùn)練。而微軟公布的一項(xiàng)基準(zhǔn)測試結(jié)果表明,以一組在開源存儲庫中具有良好覆蓋率的Python函數(shù)為測試對象,在清除函數(shù)體之后,使用GitHub Copilot來填充代碼。該模型在第一次嘗試時正確率達(dá)43%,經(jīng)過10次的嘗試之后,正確率提升到了57%。而GitHub的員工在內(nèi)部試用后多數(shù)人給出了將保留開啟GitHubCopriot提示的正面評價(jià)。
GitHub則表示GitHub Copilot建議的代碼并不完美,有時候它提供的代碼甚至毫無意義。在開發(fā)過程中,開發(fā)者仍然是主導(dǎo),對它建議的代碼要像任何其他代碼一樣經(jīng)過仔細(xì)測試和審查。
對于GitHub Copilot是否會直接復(fù)制代碼的問題,GitHub表示“只有0.1%的情況下,GitHubCopilot提供的代碼建議中可能包含一些來自訓(xùn)練集的字符或片段”。
但是,有網(wǎng)友公布了他的發(fā)現(xiàn):讓GitHub Copilot生成快速平方根倒數(shù)算法(Fast Inverse Square Root),結(jié)果代碼竟與《雷神之錘3》中那段傳奇代碼一模一樣,連那句著名的“What the fuck?”注釋也抄了下來!
快速平方根倒數(shù)算法也稱為平方根倒數(shù)速算法。這個算法可以高效地輸出浮點(diǎn)數(shù)的對應(yīng)近似值,極大地減輕了3D圖像演算的壓力。此算法因在《雷神之錘3》源代碼中被引用時連開發(fā)者也看不懂其中一個神奇的常數(shù)“Ox5f3759df”的取值原理,留下了那句著名的吐槽而被人們所熟知。如此一來,GitHub Copilot抄襲代碼成了“真·雷神之錘”。
因此人們對于使用GitHub Copilot開發(fā)是否更容易導(dǎo)致侵權(quán),并因此引起的版權(quán)糾紛的責(zé)任劃分有了更多的疑慮。
GitHub Copilot完全復(fù)制了《雷神之錘3》的著名代碼
在討論GitHub Copilot侵權(quán)問題前,我們需要先了解一個概念:GPL(GNU通用公共許可證),它是自由軟件和開源軟件中使用最廣泛的許可協(xié)議。最初由理查德·斯托曼為GNU計(jì)劃而撰寫,目前最新版本為第3版。GPL定義了自由軟件:以任何目的運(yùn)行此程序的自由;再發(fā)行復(fù)制件的自由;改進(jìn)此程序,并公開發(fā)布改進(jìn)的自由。它通過斯托曼發(fā)明的Copyleft的法律機(jī)制實(shí)現(xiàn),要求任何包含該開源許可證的衍生作品,即使僅有幾行代碼,也必須免費(fèi)提供全部源代碼以及修改和分發(fā)它們的權(quán)利。
GitHub Copilot工作原理
Julia Reda為GitHub Copflot辯護(hù)