AI編程利器:Copilot

2021 年 6 月 30 日,微軟旗下代碼托管平臺 GitHub 推出了名為 Copilot 的 AI 結(jié)對編程工具,Copilot 的主要定位是提供代碼補(bǔ)全與建議功能,可根據(jù)當(dāng)前文件的內(nèi)容和光標(biāo)位置自動生成代碼。
據(jù)了解,Copilot 由 OpenAI 的 Codex 系統(tǒng)提供支持。據(jù) Copilot 網(wǎng)站稱,Codex 模型由“互聯(lián)網(wǎng)上的公共代碼和文本”訓(xùn)練,“既能理解編程,也能理解人類語言”。作為 Visual Studio Code 的擴(kuò)展,Copilot “將你的評論和代碼發(fā)送到 GitHub Copilot 服務(wù),然后它會使用 OpenAI Codex 來合成并建議個(gè)別行和整個(gè)函數(shù)”。
作為一款 AI 編程神器,Copilot 從誕生之初就爭議不斷。
擁護(hù)者認(rèn)為它確實(shí)可以提高生產(chǎn)力,反對者認(rèn)為它寫的代碼錯(cuò)誤率高,開發(fā)者還需要花費(fèi)額外的時(shí)間做代碼審查。有的爭議焦點(diǎn)集中在 Copilot 是否涉及侵權(quán)上——畢竟 Copilot 宣稱的基于公開代碼訓(xùn)練,其實(shí)是在未遵循開源許可證的情況下,肆意“抄襲”開源代碼。
在 Copilot 正式發(fā)布一年之際,GitHub 對 2000 多名開發(fā)者展開了調(diào)查,以期了解 Copilot 到底改變了什么?
Copilot 大調(diào)研結(jié)合調(diào)查與實(shí)驗(yàn),GitHub 整理出一份 Copilot 在開發(fā)者群體中實(shí)際影響力的結(jié)論性資料。
GitHub 研究員 Eirini Kalliamvakou 在一篇博文中提到:由于 AI 輔助開發(fā)還是個(gè)相對較新的領(lǐng)域,作為研究人員,我們幾乎找不到可供借鑒的早期成果。我們希望衡量 GitHub Copilot 的實(shí)際效果如何,而且在早期觀察和用戶采訪之后,我們決定對 2000 多名開發(fā)者進(jìn)行大規(guī)模調(diào)查,了解他們的使用體驗(yàn)和感受。
在設(shè)計(jì)研究方法時(shí),我們主要考慮到以下三大重點(diǎn):
-
立足整體關(guān)注生產(chǎn)力。在 GitHub,我們喜歡廣泛且可持續(xù)地考量開發(fā)者的生產(chǎn)力及相關(guān)影響因素。我們使用 SPACE 生產(chǎn)力框架選擇需要調(diào)查的具體方向。
-
考量來自開發(fā)者的第一手觀點(diǎn)。我們開展了多輪研究,包括定性(認(rèn)知)與定量(觀察)數(shù)據(jù),希望拼湊出可靠的真相。我們希望驗(yàn)證:(1)用戶的實(shí)際體驗(yàn),能否證實(shí)我們推斷出的結(jié)論?(2)我們的定性反饋,是否同樣適合更廣大的用戶群體?
-
評估 GitHub Copilot 在日常開發(fā)場景中的效果。在設(shè)計(jì)研究方法時(shí),我們特別注意覆蓋專業(yè)開發(fā)人員,并圍繞他們在工作日內(nèi)面對的典型任務(wù)進(jìn)行測試設(shè)計(jì)。最終的調(diào)查結(jié)果,既有意料之中的發(fā)現(xiàn),也有意外驚喜。
除了加快開發(fā)速度之外,Copilot 還能給程序員帶來哪些額外幫助?
調(diào)查發(fā)現(xiàn):
-
開發(fā)者滿意度有所提升。60% 至 75% 的用戶表示,他們對現(xiàn)在的工作體驗(yàn)更滿意,編碼時(shí)的精神壓力更小,而且 Copilot 能幫助他們更專注地達(dá)成令人滿意的工作成效。
-
緩解精神內(nèi)耗。開發(fā)者們報(bào)告稱,Copilot 能幫助他們穩(wěn)步推進(jìn)開發(fā)流程(73%),并在處理重復(fù)性任務(wù)期間降低精力消耗(87%)。

有近 90% 的開發(fā)者們表示,在使用 Copilot 時(shí),他們完成任務(wù),特別是重復(fù)性任務(wù)的速度更快了。這也符合 GitHub 在產(chǎn)品設(shè)計(jì)時(shí)做出的基本預(yù)期。
為了在實(shí)踐中觀察并量化這種提升效果,GitHub 組織了一場對照實(shí)驗(yàn)。兩個(gè)受試小組(其中一組使用 Copilot)需要接受計(jì)時(shí),核算用 JavaScript 編寫 HTTP 服務(wù)器的平均用時(shí)。
實(shí)驗(yàn)發(fā)現(xiàn):
-
使用 Copilot 的小組完成任務(wù)的比例更高,為 78%,未使用 Copilot 的小組完成任務(wù)比例為 70%。
-
更顯著的區(qū)別在于,使用 Copilot 的開發(fā)者完成任務(wù)的速度明顯更快,要比未使用 Copilot 的開發(fā)者快 55%。具體來看,使用 Copilot 的開發(fā)者完成此項(xiàng)任務(wù)的平均用時(shí)為 1 小時(shí) 11 分鐘,而未使用 Copilot 的開發(fā)者平均用時(shí)達(dá) 2 小時(shí) 41 分鐘。綜上,該項(xiàng)調(diào)查和實(shí)驗(yàn)最終得出的結(jié)論是,“Copilot 有助于加快工作完成速度,幫助開發(fā)者減少精神內(nèi)耗,以更加飽滿的精神狀態(tài)專注于工作內(nèi)容,最終在自己的編碼過程中找到更多樂趣?!?/p>

對于這一調(diào)查結(jié)果,有開發(fā)者留言表示支持:“使用 Copilot,我能盡量少把精力浪費(fèi)在枯燥重復(fù)的工作身上。它點(diǎn)燃的靈感火花,讓我感到編碼過程更有趣、更高效了?!?/p>
GitHub 研究員 Eirini Kalliamvakou 表示,“隨著 Copilot 的出現(xiàn),我們在 AI 驅(qū)動型代碼補(bǔ)全工具的探索道路上不再是孤軍奮戰(zhàn)。在實(shí)際生產(chǎn)領(lǐng)域,我們最近看到一項(xiàng)針對 24 名學(xué)生的評估,谷歌也在內(nèi)部評估利用機(jī)器學(xué)習(xí)增強(qiáng)代碼補(bǔ)全的可能性。
著眼于整個(gè)行業(yè),研究社區(qū)正認(rèn)真分析 GitHub Copilot 在各類場景下的實(shí)際影響,包括教育、安全、勞動力市場,乃至開發(fā)者的實(shí)踐與行為。我們目前正在各類環(huán)境下觀察 Copilot 的實(shí)際效果。這是個(gè)不斷發(fā)展的領(lǐng)域,我們對研究社區(qū)和自身調(diào)查中的發(fā)現(xiàn)感到振奮,也將未來幾個(gè)月內(nèi)為大家揭曉更多消息?!?/p> 為什么 Copilot 會編寫出 糟糕的代碼?
GitHub 的調(diào)研結(jié)果展現(xiàn)了 Copilot 在開發(fā)者群里中起到積極作用的一面,但任何事物都有其兩面性,Copilot 本身帶有的爭議也不容忽視。開發(fā)者在決定是否采用 Copilot 前,需要對其有充分的了解。
其中,Copilot 比較大的一個(gè)爭議點(diǎn)在于代碼錯(cuò)誤率高。
Copilot 由名為 Codex 的深度神經(jīng)網(wǎng)絡(luò)語言模型提供支持,該模型在 GitHub 上的公共代碼存儲庫上進(jìn)行了訓(xùn)練。它讀取了 GitHub 的整個(gè)公共代碼檔案,其中包含數(shù)千萬個(gè)存儲庫,匯聚了來自許多世界上最優(yōu)秀程序員的代碼。
那么,為什么 Copilot 還是會編寫出糟糕的代碼呢?
根據(jù) OpenAI 的論文,Codex 只有 29% 的時(shí)間會給出正確答案。而且它編寫的代碼往往重構(gòu)得很差,無法充分利用現(xiàn)有的解決方案(即使這些方案就在 Python 的標(biāo)準(zhǔn)庫中)。
Copilot 編寫出糟糕的代碼,原因在于語言模型的工作機(jī)制。它們反映的是大多數(shù)人的平均寫作水平。它們不知道什么是正確的,什么是好的寫法。GitHub 上的大多數(shù)代碼(根據(jù)軟件標(biāo)準(zhǔn))相當(dāng)陳舊,并且(根據(jù)定義)是由水平一般的程序員編寫的。
Copilot 盡力猜測的是,如果這些程序員正在編寫的是你面對的這些文件,他們可能會寫什么代碼。OpenAI 在他們的 Codex 論文中討論了這一點(diǎn):
“與其他訓(xùn)練目標(biāo)是預(yù)測下一個(gè)詞符的大型語言模型一樣,Codex 會生成與其訓(xùn)練分布盡可能相似的代碼。這樣做的一個(gè)后果是,這種模型可能會做一些對用戶無益的事情”
Copilot 之所以比那些水平一般的程序員更糟糕,一個(gè)關(guān)鍵問題在于,它甚至沒有嘗試編譯代碼或檢查代碼是否有效,也沒有考慮過自己是否真的遵循了文檔的指示。此外,Codex 沒有接受過去一兩年內(nèi)創(chuàng)建代碼的訓(xùn)練,因此它完全沒學(xué)過最新版本、庫和語言特性。例如,提示它創(chuàng)建 fastai 代碼后,它只會給出使用 v1 API 的建議,而不是大約一年前發(fā)布的 v2 版本。
值得一提的是,今年 4 月,微軟推出了 AI 代碼審查工具 Jigsaw,以期進(jìn)一步提升 AI 編碼的準(zhǔn)確率。
在研究論文《Jigsaw:當(dāng)大型語言模型牽手程序綜合》(Jigsaw: Large Language Models meet Program Synthesis,文章已被國際軟件工程會議 ICSE 2022 接收)中,微軟介紹了一種可以提高這類大型語言模型性能的新工具。Jigsaw 中包含可以理解程序語法及語義的后處理技術(shù),可利用用戶的反饋不斷提升修正能力。配合多模輸入,Jigsaw 即可為 Python Pandas API 合成代碼。
隨著 Jigsaw 逐步在提高系統(tǒng)準(zhǔn)確性方面發(fā)揮重要作用,Copilot 這類 AI 編程工具準(zhǔn)確率或?qū)@得提升。
參考鏈接:
https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/
https://www.infoq.cn/article/mvLSYZfNmhmCj7vN8KVP
往期精彩:
?深度學(xué)習(xí)論文精讀[14]:Vision Transformer
?深度學(xué)習(xí)論文精讀[13]:Deeplab v3+
?深度學(xué)習(xí)論文精讀[12]:Deeplab v3
?深度學(xué)習(xí)論文精讀[11]:Deeplab v2
?深度學(xué)習(xí)論文精讀[10]:Deeplab v1
?深度學(xué)習(xí)論文精讀[8]:ParseNet
? 深度學(xué)習(xí)論文精讀[5]:Attention UNet
?深度學(xué)習(xí)論文精讀[4]:RefineNet
? 深度學(xué)習(xí)論文精讀[2]:UNet網(wǎng)絡(luò)
? 深度學(xué)習(xí)論文精讀[1]:FCN全卷積網(wǎng)絡(luò)
