GitHub 的AI代碼生成神器,其四成代碼有漏洞,你還敢用嗎
點(diǎn)擊上方“視學(xué)算法”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)
作者 | 閆園園
日前,研究人員發(fā)現(xiàn),GitHub Copilot 工具提供的代碼建議中 有接近 40% 存在 bug。為了對 Copilot 的實(shí)際價值做出量化,研究人員創(chuàng)建了 89 個測試場景以考查其代碼建議質(zhì)量,編寫出了 1600 多個程序。經(jīng)過全面審查,研究人員發(fā)現(xiàn)其中近四成存在安全漏洞。
研究人員指出,造成這種問題的主要原因有兩個:
1、GitHub Copilot 參考的開源代碼良莠不齊。GitHub 的代碼量雖然龐大,但大部分都是未經(jīng)審查的,源代碼就有問題,GitHub Copilot 生成的代碼也會出現(xiàn)問題;
2、GitHub Copilot 分不清新代碼和舊代碼。我們常常提起“最佳實(shí)踐”,但曾經(jīng)的“最佳實(shí)踐”,極有可能在幾年后變成反面典型。GitHub Copilot 目前還分不清這種區(qū)別,照單全收,自然有問題。
作為一款 AI 結(jié)對編程工具,GitHub Copilot 的主要定位是提供代碼補(bǔ)全與建議功能。它是 Visual Studio Code 的一個插件,可根據(jù)當(dāng)前文件的內(nèi)容和當(dāng)前光標(biāo)位置為你自動生成代碼。
首先我們要理解 什么是 AI 結(jié)對編程?
結(jié)對編程用來代指兩個程序員在一個計(jì)算機(jī)上共同工作。通常來說,會有一個人輸入代碼,而另一個人審查他輸入的每一行代碼。輸入代碼的人稱作駕駛員,而審查代碼的人稱作觀察員。
那么 AI 結(jié)對編程,可以簡單理解為人機(jī)結(jié)對編程的升級版。具體來說 GitHub Copilot 由 OpenAI Codex 提供支持,可從代碼中提取上下文,并立即對單行代碼甚至整個函數(shù)給出建議。而 OpenAI Codex 接受過公開源代碼和自然語言的培訓(xùn),能理解編程語言和人類語言。在工作時,GitHub Copilot 編輯器的擴(kuò)展插件將程序員的注釋和代碼發(fā)送到 GitHub Copilot 服務(wù),然后該服務(wù)使用 OpenAI Codex 來生成對代碼的建議。
在 GitHub Copilot 推出后,有關(guān)于它的負(fù)面消息這并不是第一次。
就在其發(fā)布不到一周的時間里,GitHub Copilot 就被推上了侵權(quán)的風(fēng)口浪尖,引發(fā)了前所未有的爭議。
原因是有位程序員嘗試了一下平方根倒數(shù)速算法(Fast Inverse Square Root),結(jié)果只是打出來這四個關(guān)鍵詞,GitHub Copilot 就逐行“完美復(fù)刻”了當(dāng)年那段神奇的算法,甚至連當(dāng)時的原版注釋都被保留下來。
這種現(xiàn)象引起了大量開發(fā)者的不滿,他們認(rèn)為,GitHub Copilot 宣稱的基于公開代碼訓(xùn)練其實(shí)是在未遵循開源許可證的情況下,肆意“抄襲”開源代碼,事情愈演愈烈,甚至個別比較激進(jìn)的人為了抗議 GitHub 未經(jīng)授權(quán)和許可便使用受版權(quán)保護(hù)的源代碼作為 GitHub Copilot 的訓(xùn)練數(shù)據(jù),宣布棄用 GitHub。
盡管 AI 編程有諸多爭議,但它的腳步仍未停止。當(dāng)人們開始關(guān)注 GitHub Copilot 背后的技術(shù)支撐 OpenAI Codex 后,今年八月,OpenAI 宣布開發(fā)一種將自然語言轉(zhuǎn)換為編程代碼的人工智能系統(tǒng) —— Codex。
Codex 更像是 OpenAI 的下一步產(chǎn)品。它建立在 Copilot 之上,前文說到 Copilot 是一種與 Microsoft 的 GitHub 代碼存儲庫一起使用的工具,使用它可有助于完成代碼行。但 Codex 通過接受用英語編寫的句子并將它們翻譯成可運(yùn)行的代碼,換句話說,它是可以將自然語言轉(zhuǎn)換為代碼的 AI 系統(tǒng),這意味著 AI 編程的概念又往前進(jìn)了一步。
對此,OpenAI 稱 Codex 可讓計(jì)算機(jī)能夠更好地理解人們的意圖,從而讓每個人都可利用計(jì)算機(jī)來實(shí)現(xiàn)更多目的。
那么,AI 寫代碼究竟可行不可行呢?
雖然對于開發(fā)者們來說,重復(fù)性的任務(wù)占據(jù)了軟件開發(fā)的大部分時間,并且很容易出錯,研究人工智來改進(jìn)軟件開發(fā)的確令人興奮,但是我們也不難從 GitHub Copilot 身上看到,就目前來看,這個工具仍舊不建議大家使用。
第一,GitHub Copilot 既然可以逐行“完美復(fù)刻”平方根倒數(shù)速算法,那么我們又能如何判別它給我們的代碼一定是沒有受版權(quán)保護(hù)的呢?這種可能性,同樣容易讓我們背上“侵權(quán)”的法律風(fēng)險。
第二,就連 GitHub 自己都表示 GitHub Copilot 建議的代碼并不完美,有時候它提供的代碼甚至毫無意義。因此,對于 GitHub Copilot 建議的代碼來說,我們?nèi)砸⌒钠渚幋a錯誤,還需要付出精力去審查,才能得到正確有效的代碼。
因此總的來說,原則上,讓 AI 學(xué)會寫程序的確能為軟件工程帶來一次巨大的變革,但是就目前來看,現(xiàn)有的技術(shù)水平遠(yuǎn)遠(yuǎn)達(dá)不到預(yù)期。當(dāng)前的 GitHub Copilot 已經(jīng)是人工智能領(lǐng)域的一項(xiàng)重大的突破,但同時也存在諸多障礙,這一點(diǎn)還需要引起我們的注意。
參考鏈接:
https://www.solidot.org/story?sid=68736
https://www.techradar.com/news/github-autopilot-highly-likely-to-introduce-bugs-and-vulnerabilities-report-claims

點(diǎn)個在看 paper不斷!
