在美國(guó)Copilot就像教育界的ChatGPT,正在顛覆整個(gè)軟件開(kāi)發(fā)行業(yè)
2023 年春天,諾亞·吉夫特(Noah Gift)在美國(guó)北卡羅來(lái)納州杜克大學(xué)教授編碼課程兩周后,他告訴學(xué)生們?nèi)拥羲o的課程材料。
學(xué)生們將不再學(xué)習(xí)最流行的入門(mén)級(jí)編程語(yǔ)言之一 Python,而是學(xué)習(xí) Rust,一種更新、更強(qiáng)大、更難學(xué)習(xí)的語(yǔ)言。

(來(lái)源:AI 生成)
吉夫特是一名擁有 25 年經(jīng)驗(yàn)的軟件開(kāi)發(fā)人員,他自己剛剛學(xué)會(huì)了 Rust。但他相信,他的學(xué)生們也會(huì)很快適應(yīng)這個(gè)突然的改變。
這是因?yàn)樗麄兠咳硕加幸粋€(gè)特殊的新助手:一個(gè)名為 Copilot 的人工智能工具,這是一種建立在 OpenAI 最新大語(yǔ)言模型 GPT-3.5 和 GPT-4 之上的計(jì)算機(jī)代碼自動(dòng)補(bǔ)全和輔助工具。
Copilot 由 GitHub 公司開(kāi)發(fā)。該工具會(huì)監(jiān)測(cè)你的每一次按鍵,預(yù)測(cè)你想要實(shí)現(xiàn)什么,并不斷提供接下來(lái)有可能出現(xiàn)的代碼片段供你使用。
在微軟工作的朋友告訴了吉夫特 Copilot 的存在,他立刻看到了它的潛力。
他說(shuō):“如果沒(méi)有 Copilot,我不可能像現(xiàn)在這樣快速地學(xué)會(huì) Rust。這就像我身邊有一個(gè)超級(jí)智能助理,當(dāng)我試圖提升自我時(shí),他可以回答我的問(wèn)題。很明顯,我們應(yīng)該在課堂上開(kāi)始使用它。”
吉夫特并不孤單。如果你問(wèn)一屋子計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生或程序員是否用過(guò) Copilot,許多人都會(huì)舉手。本文采訪的所有人都說(shuō)他們自己使用了 Copilot,甚至那些指出該工具存在問(wèn)題的人也是如此。
就像教育領(lǐng)域的 ChatGPT 一樣,Copilot 正在顛覆整個(gè)軟件開(kāi)發(fā)行業(yè),為人們提供新的方式來(lái)完成舊任務(wù)。Copilot 是微軟 Visual Studio 里的付費(fèi)插件,但它并不是程序員唯一可用的工具。
2023 年 8 月,Meta 發(fā)布了一個(gè)名為 Code Llama 的免費(fèi)代碼生成模型,該模型基于 Meta 的 Llama 2 大模型,對(duì)標(biāo) GPT-4 的產(chǎn)物。
同月,圖像生成模型 Stable Diffusion 背后的公司 Stability AI 發(fā)布了 StableCode。當(dāng)然,還有 ChatGPT,OpenAI 從一開(kāi)始就將其定位為一種聊天機(jī)器人,可以幫助編寫(xiě)和調(diào)試代碼。
Meta Code Llama 團(tuán)隊(duì)負(fù)責(zé)人加百列·辛納耶夫(Gabriel Synnaeve)表示:“這是機(jī)器學(xué)習(xí)模型第一次對(duì)很多人真正有用。它不是華而不實(shí)的東西,而是真的很有用。”
隨著微軟和谷歌即將在全球數(shù)十億人使用的辦公軟件中引入類似的生成式模型(微軟已經(jīng)開(kāi)始在 office 365 中使用 Copilot 作為品牌名稱),值得一問(wèn)的是,這些工具到底為程序員做了什么。
它們是如何改變一份已有幾十年歷史的工作的基礎(chǔ)的?它們會(huì)幫助程序員創(chuàng)造更多更好的軟件嗎?還是會(huì)讓他們陷入知識(shí)產(chǎn)權(quán)和版權(quán)的法律糾紛?

啟動(dòng)代碼
從表面上看,編寫(xiě)代碼需要在文本文件中鍵入某些編程語(yǔ)言的語(yǔ)句和指令。然后,它被編譯成計(jì)算機(jī)可以執(zhí)行的機(jī)器代碼。
在實(shí)踐中,程序員也會(huì)花很多時(shí)間在網(wǎng)上搜索,尋找常見(jiàn)問(wèn)題的解決方法,或者瀏覽在線論壇,尋找更快的算法編寫(xiě)方法。許多寫(xiě)好的現(xiàn)有代碼塊會(huì)被重新調(diào)整用途,新軟件通常就這樣拼接、組合在一起。
但 GitHub 的 CEO 托馬斯·多姆克(Thomas Dohmke)表示,查找資料需要時(shí)間,讓程序員無(wú)法迅速將思想轉(zhuǎn)化為代碼:“你打開(kāi)了很多網(wǎng)頁(yè),你正在計(jì)劃度假,也許你正在閱讀新聞。
最后你復(fù)制了所需的代碼,回到你寫(xiě)的那里,但已經(jīng)過(guò)去了 20 分鐘,你已經(jīng)不在狀態(tài)了。”
Copilot 和其他類似程序(有時(shí)稱為代碼助手)背后的關(guān)鍵思想是,將程序員需要的信息放在他們正在編寫(xiě)的代碼旁邊。
該工具可以追蹤程序員正在處理的文件中的代碼和注釋,以及它鏈接到的或在同一項(xiàng)目中編輯過(guò)的其他文件,并將所有這些文本作為提示發(fā)送到 Copilot 背后的大型語(yǔ)言模型中。
GitHub 與 OpenAI 共同開(kāi)發(fā)了 Copilot 所用的模型 Codex。這是一個(gè)對(duì)代碼進(jìn)行了微調(diào)的大型語(yǔ)言模型。Copilot 可以預(yù)測(cè)程序員試圖做什么,并給出代碼建議。
這種代碼和 Codex 之間的“交流”每秒發(fā)生多次,提示會(huì)隨著程序員的鍵入而更新。在任何時(shí)候,程序員都可以通過(guò)點(diǎn)擊 tab 鍵接受 Copilot 的建議,或者忽略它繼續(xù)輸入。
按鈕似乎經(jīng)常被點(diǎn)擊。GitHub 和咨詢公司 Keystone Strategy 在 2023 年 6 月發(fā)布的一項(xiàng)針對(duì)近 100 萬(wàn) Copilot 用戶的研究發(fā)現(xiàn),根據(jù) GitHub 的用戶數(shù)據(jù),程序員平均接受了約 30% 的建議。
多姆克說(shuō):“在過(guò)去的一年里,Copilot 提出了超過(guò) 10 億行的代碼,并獲得了開(kāi)發(fā)人員的同意。現(xiàn)在,在計(jì)算機(jī)內(nèi)部運(yùn)行的是隨機(jī)生成的代碼。”
Copilot 改變了編碼的基本技能。與 ChatGPT 或 Stable Diffusion 等生成式工具一樣,該工具的輸出通常并不完全符合要求,但可能很接近。
加拿大蒙特利爾理工學(xué)院的研究員阿爾哈萬(wàn)·莫拉迪·達(dá)赫爾(Arghavan Moradi Dakhel)主要研究機(jī)器學(xué)習(xí)工具在軟件開(kāi)發(fā)中的使用,他說(shuō):“也許它給出的東西是正確的,也許不是,但那是一個(gè)好的開(kāi)始。
編程變得“提示化”。這項(xiàng)工作不再是從零開(kāi)始編寫(xiě)代碼,而是調(diào)整不太完美的代碼,并推動(dòng)一個(gè)大型語(yǔ)言模型來(lái)產(chǎn)生更符合需求的東西。
但 Copilot 還沒(méi)有廣泛普及。包括蘋(píng)果在內(nèi)的一些公司要求員工不要使用它,以免將 IP 和其他私密數(shù)據(jù)泄露給競(jìng)爭(zhēng)對(duì)手。
Merly是一家使用人工智能分析大型軟件項(xiàng)目代碼的初創(chuàng)公司,其 CEO 賈斯汀·戈特施利希(Justin Gottschlich)認(rèn)為,這一點(diǎn)將永遠(yuǎn)是一個(gè)硬傷:“如果我是谷歌或英特爾,我的 IP 是我的源代碼,那么我永遠(yuǎn)不會(huì)使用 Copilot。”
他補(bǔ)充說(shuō):“我為什么不把我所有的商業(yè)秘密也發(fā)給你呢?這就像下雨要打傘一樣明顯。”
多姆克意識(shí)到這對(duì)關(guān)鍵客戶來(lái)說(shuō)是一個(gè)障礙,并表示該公司正在開(kāi)發(fā)一種企業(yè)可以在內(nèi)部運(yùn)行的 Copilot 版本,這樣代碼就不會(huì)發(fā)送到微軟的服務(wù)器上。
Copilot 也可能被程序員視作訴訟對(duì)象,他們對(duì)自己的代碼在未經(jīng)他們同意的情況下被用來(lái)訓(xùn)練其背后的模型感到不滿。微軟已向潛在可能提起訴訟的用戶提供賠償。但法律問(wèn)題需要數(shù)年時(shí)間才能在法庭上解決。
多姆克非常樂(lè)觀,他相信利大于弊:“我們將適應(yīng)美國(guó)、英國(guó)或歐洲立法者告訴我們的任何事情。但在保護(hù)權(quán)利和隱私,以及我們?nèi)祟愊蚯斑~出一步之間,存在著一種折衷的平衡。”
這確實(shí)像是從 CEO 口中說(shuō)出的話。但這是一個(gè)新的、未知的領(lǐng)域。如果不出意外的話,GitHub 正在領(lǐng)導(dǎo)一項(xiàng)大膽的實(shí)驗(yàn),該實(shí)驗(yàn)可能為更廣泛的人工智能專業(yè)助手鋪平道路。
第一個(gè)跡象是,他們把用來(lái)面試的編程題交給了編程工具:“這是一些代碼,你要完成它。”GitHub 將這些代碼交給了 Copilot 工具的早期版本,并讓它在每個(gè)測(cè)試上嘗試 150 次。
150 次嘗試之后,他們發(fā)現(xiàn)該工具可以解決 92% 的問(wèn)題。他們?cè)俅螄L試了從 GitHub 在線平臺(tái)上提取的 50000 個(gè)問(wèn)題,該工具解決了其中的一半以上。多姆克說(shuō):“這給了我們信心,我們可以創(chuàng)造出 Copilot。”
2023 年,一個(gè)由 GitHub 和微軟研究人員組成的團(tuán)隊(duì),在一項(xiàng)小規(guī)模研究中測(cè)試了 Copilot 對(duì)程序員的影響。
他們要求 95 個(gè)人構(gòu)建一個(gè)網(wǎng)絡(luò)服務(wù)器,并允許一半的人使用 Copilot。最終,使用 Copilot 的程序員完成任務(wù)的速度平均快了55%。
一個(gè)強(qiáng)大的人工智能取代了谷歌搜索,我們看到了真實(shí)的效果,但它能改變游戲規(guī)則嗎?人們的意見(jiàn)并不同意。
Keystone Strategy 聯(lián)合創(chuàng)始人、哈佛商學(xué)院教授馬可·伊安西蒂(Marco Iansiti)表示:“我認(rèn)為,這就像你旁邊坐著一位經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員,他在那里不斷地給你建議。以前你必須自己查,現(xiàn)在建議自動(dòng)就發(fā)來(lái)了。”
但是,多年來(lái)一直致力于自動(dòng)代碼生成的戈特施利希對(duì)此不太感冒。“坦率地說(shuō),代碼助手無(wú)法實(shí)現(xiàn)更大規(guī)模的東西。”他說(shuō)道。他指的是基于大型語(yǔ)言模型的代碼工具,如 Copilot。
“他們主要受人類程序員所能做的事情的約束。在現(xiàn)階段,他們不太可能做出超出人類程序員所做的事情。”
戈特施利希聲稱,Merly 的技術(shù)可以發(fā)現(xiàn)代碼中的錯(cuò)誤并自行修復(fù)(但他沒(méi)有說(shuō)明這是如何工作的)。而且他正在考慮更大的問(wèn)題。
他認(rèn)為人工智能有一天會(huì)接管龐大而復(fù)雜的代碼庫(kù)的管理,指導(dǎo)人類工程師如何維護(hù)它。但他認(rèn)為大型語(yǔ)言模型不適合這項(xiàng)工作。
即便如此,對(duì)數(shù)百萬(wàn)人一直在做的任務(wù)施加微小的改變,這些改變也會(huì)很快累積起來(lái)。
例如,伊安西蒂提出了一個(gè)夸張的想法:他認(rèn)為,到 2030 年,Copilot 及其類似工具的影響可能會(huì)為全球經(jīng)濟(jì)增加 1.5 萬(wàn)億美元。
他說(shuō):“這更多的是一個(gè)粗略的估計(jì),不是真正的學(xué)術(shù)估計(jì),但也可能比這大得多。
有太多的東西取決于軟件。如果你對(duì)軟件開(kāi)發(fā)的真正運(yùn)作方式有所了解,它將對(duì)經(jīng)濟(jì)產(chǎn)生無(wú)限的影響。”
對(duì)于伊安西蒂來(lái)說(shuō),這不僅僅是讓現(xiàn)有開(kāi)發(fā)人員生成更多的代碼。他認(rèn)為,這些工具將增加對(duì)程序員的需求,因?yàn)楣究梢杂酶俚腻X(qián)獲得更多的代碼。
同時(shí),由于這些工具降低了進(jìn)入門(mén)檻,將有更多的程序員出現(xiàn)。他說(shuō):“我們將看到誰(shuí)能為軟件開(kāi)發(fā)做出貢獻(xiàn)。”
或者,正如 GitHub 的高級(jí)研究總監(jiān)伊丹·加齊特(Idan Gazit)所說(shuō):想象一下,如果任何拿起吉他的人都能立即演奏一首簡(jiǎn)單的曲子,那就會(huì)有更多的吉他手和更多的音樂(lè)。
正如吉夫特發(fā)現(xiàn)的那樣,許多人都認(rèn)為 Copilot 讓學(xué)習(xí)編程變得更容易。
他說(shuō):“Rust 以其艱澀而聞名。但我對(duì)學(xué)生們的表現(xiàn)和他們構(gòu)建的項(xiàng)目感到驚喜,它們是多么的復(fù)雜和有用。”
吉夫特說(shuō),他們能夠構(gòu)建包含聊天機(jī)器人的完整網(wǎng)頁(yè)應(yīng)用程序。
然而,并不是所有人都對(duì)吉夫特的教學(xué)大綱變化感到滿意。他說(shuō),他的一名助教告訴新生不要使用 Copilot,因?yàn)樗且桓照龋瑫?huì)阻止他們正常學(xué)習(xí)。
吉夫特承認(rèn) Copilot 就像輔助輪,你可能不愿離開(kāi)它。但他認(rèn)為這不是問(wèn)題:“我們想實(shí)現(xiàn)什么?我們正在努力構(gòu)建復(fù)雜的系統(tǒng)。”他認(rèn)為,要做到這一點(diǎn),程序員應(yīng)該使用任何可用的工具。
誠(chéng)然,在計(jì)算的歷史上,程序員在自己和計(jì)算機(jī)可以運(yùn)行的機(jī)器代碼之間依賴越來(lái)越多的軟件層。它們已經(jīng)從穿孔卡片和匯編語(yǔ)言,發(fā)展到相對(duì)易于讀寫(xiě)的 Python 等編程語(yǔ)言。
多姆克說(shuō):“當(dāng)我在 80 年代和 90 年代開(kāi)始編碼時(shí),你仍然需要知道 CPU 是如何工作的。現(xiàn)在,當(dāng)你編寫(xiě)網(wǎng)頁(yè)應(yīng)用程序時(shí),你幾乎從不考慮 CPU 或網(wǎng)頁(yè)服務(wù)器。”
再加上一大堆的 bug 捕獲和代碼測(cè)試工具,程序員已經(jīng)習(xí)慣了大量的自動(dòng)化支持。從很多方面來(lái)說(shuō),Copilot 和其他工具只是最新一波進(jìn)展。
吉夫特說(shuō):“我使用 Python 25 年了,因?yàn)樗菫榱俗屓祟惪勺x而創(chuàng)造的。在我看來(lái),這已經(jīng)不重要了。”
但他指出,Copilot 并不是一個(gè)免費(fèi)通行證。“Copilot 反映了你的能力。”他說(shuō),“它讓每個(gè)人都有了一點(diǎn)提升,但如果你是一個(gè)糟糕的程序員,你仍然會(huì)有弱點(diǎn)。”

要做的工作
想要評(píng)估這些工具的真正影響,一個(gè)大問(wèn)題是,大多數(shù)數(shù)據(jù)仍然稀缺。GitHub 的研究表明,程序員接受了 30% 的建議,但尚不清楚程序員為什么接受這些建議而拒絕其他建議。
同一項(xiàng)研究還表明,經(jīng)驗(yàn)不足的程序員接受了更多的建議,而且隨著他們逐漸習(xí)慣該工具,程序員接受了越來(lái)越多的建議。但同樣,原因也不清楚。
伊安西蒂說(shuō):“我們需要更深入地理解這意味著什么。要真正了解編碼過(guò)程本身是如何發(fā)展的,還有很多工作要做,而這一切都有待確定。”
大多數(shù)對(duì) Copilot 等工具的獨(dú)立研究,都集中在它們所建議的代碼的正確性上。像所有大型語(yǔ)言模型一樣,這些工具可能會(huì)產(chǎn)生無(wú)意義的結(jié)果。
對(duì)于代碼來(lái)說(shuō),其是否有意義可能很難判斷,尤其是對(duì)于經(jīng)驗(yàn)不足的用戶來(lái)說(shuō),他們似乎也是最依賴 Copilot 的群體。
在過(guò)去的幾年里,幾個(gè)研究小組發(fā)現(xiàn),Copilot 會(huì)在代碼里留下漏洞或安全缺陷。GitHub 則一直忙于提高 Copilot 建議的準(zhǔn)確性。
它聲稱,該工具的最新版本會(huì)通過(guò)第二個(gè)模型運(yùn)行代碼。該模型經(jīng)過(guò)訓(xùn)練,可以在向用戶提出建議之前過(guò)濾掉常見(jiàn)的安全漏洞。
達(dá)赫爾說(shuō),但是除了 bug,還有其他質(zhì)量問(wèn)題。她和她的同事發(fā)現(xiàn),Copilot 可能會(huì)建議過(guò)于復(fù)雜或不符合最佳實(shí)踐的代碼,這是一個(gè)問(wèn)題,因?yàn)閺?fù)雜或不清楚的代碼對(duì)其他人來(lái)說(shuō)更難閱讀、檢查和擴(kuò)展。
問(wèn)題是,模型只能和它們的訓(xùn)練數(shù)據(jù)一樣好。Copilot 的模型是在有著 15 年歷史的、GitHub 在線存儲(chǔ)庫(kù)中提取的大量代碼庫(kù)上進(jìn)行訓(xùn)練的。
這些代碼不僅包含錯(cuò)誤,還包含編寫(xiě)代碼時(shí)未知的安全缺陷。
達(dá)赫爾說(shuō),再加上缺乏經(jīng)驗(yàn)的程序員會(huì)比有經(jīng)驗(yàn)的程序員更多地使用該工具,因此從長(zhǎng)遠(yuǎn)來(lái)看,它或許會(huì)為軟件開(kāi)發(fā)團(tuán)隊(duì)帶來(lái)更多的工作。資深程序員可能不得不花更多的時(shí)間仔細(xì)檢查新手編寫(xiě)的代碼。
達(dá)赫爾現(xiàn)在希望更全面地研究資深和非資深程序員之間的差距。在 Copilot 發(fā)布之前,她和她的同事們正在使用機(jī)器學(xué)習(xí)通過(guò)代碼來(lái)檢測(cè)程序員的水平。
但 Copilot 把她的數(shù)據(jù)搞砸了,因?yàn)楝F(xiàn)在很難判斷代碼是由資深程序員編寫(xiě)的,還是由經(jīng)驗(yàn)不足的程序員在人工智能的幫助下編寫(xiě)的。
現(xiàn)在,在體驗(yàn)過(guò) Copilot 之后,她計(jì)劃用自己的方法來(lái)研究它能帶來(lái)什么樣的提升。
她說(shuō):“我很想知道,使用這種工具的初級(jí)開(kāi)發(fā)人員是否會(huì)被預(yù)測(cè)為資深開(kāi)發(fā)人員,或者是否仍然可以檢測(cè)到他們是初級(jí)開(kāi)發(fā)人員。這可能是衡量這些工具給人們帶來(lái)多大提升的一種方式。”
我們可能不需要等待太久就能看到結(jié)果。軟件開(kāi)發(fā)是記錄最充分、評(píng)估最全面的商業(yè)活動(dòng)之一。
如果 Copilot 有效,它就會(huì)被使用。如果沒(méi)有效果,就不會(huì)有人用它。與此同時(shí),這些工具正在變得越來(lái)越好。
然而值得注意的是,編程只是軟件開(kāi)發(fā)整體工作的一小部分。它還涉及到管理復(fù)雜項(xiàng)目的多個(gè)部分,包括設(shè)計(jì)代碼、測(cè)試和部署。
Copilot 和之前的許多程序一樣,可以更快地完成部分工作,但它不會(huì)完全重塑它。
辛納耶夫說(shuō):“程序員會(huì)一直存在。他們會(huì)得到很多幫助,但最終重要的是要了解哪些問(wèn)題需要解決,要真正做好這件事,并將其轉(zhuǎn)化為程序,這才是程序員真正的工作。”
作者簡(jiǎn)介:威爾·道格拉斯·海文(Will Douglas Heaven)是《麻省理工科技評(píng)論》人工智能欄目的高級(jí)編輯,他在這里報(bào)道新的研究、新興趨勢(shì)及其背后的人。此前,他是英國(guó)廣播公司(BBC)科技與地緣政治網(wǎng)站 Future Now 的創(chuàng)始編輯,也是 New Scientist 雜志的首席技術(shù)編輯。他擁有英國(guó)倫敦帝國(guó)理工學(xué)院計(jì)算機(jī)科學(xué)博士學(xué)位,深諳與機(jī)器人合作的體驗(yàn)。
支持:Ren
- 免責(zé)聲明
- 本文所包含的觀點(diǎn)僅代表作者個(gè)人看法,不代表新火種的觀點(diǎn)。在新火種上獲取的所有信息均不應(yīng)被視為投資建議。新火種對(duì)本文可能提及或鏈接的任何項(xiàng)目不表示認(rèn)可。 交易和投資涉及高風(fēng)險(xiǎn),讀者在采取與本文內(nèi)容相關(guān)的任何行動(dòng)之前,請(qǐng)務(wù)必進(jìn)行充分的盡職調(diào)查。最終的決策應(yīng)該基于您自己的獨(dú)立判斷。新火種不對(duì)因依賴本文觀點(diǎn)而產(chǎn)生的任何金錢(qián)損失負(fù)任何責(zé)任。