《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > Copilot 真會(huì)砸了程序員的飯碗?

Copilot 真會(huì)砸了程序員的飯碗?

2021-07-16
來(lái)源:CSDN
關(guān)鍵詞: Copilot 代碼

  最近OpenAI與GitHub聯(lián)合構(gòu)建的AI自動(dòng)編程工具Copilot正式登場(chǎng)!Copilot基于自然語(yǔ)言處理模型GPT-3搭建而成,可在程序員編寫代碼時(shí)提供建議,甚至直接補(bǔ)齊代碼。

  目前Copilot預(yù)覽版已經(jīng)正式上線Visual Studio Code平臺(tái)。雖然Copilot AI碼自動(dòng)生成器仍在逐漸完善當(dāng)中,但它的出現(xiàn)卻提供了一個(gè)關(guān)于大型自然語(yǔ)言處理模型的發(fā)展思路,也讓我們程序員群體和對(duì)于自身未來(lái)是否會(huì)被AI取代的問題,產(chǎn)生深深的思考。

  初識(shí)OpenAI的GPT-3

  在2019年DOTA2的頂級(jí)賽事TI8的正賽完成之后,OpenAI的人工智能戰(zhàn)隊(duì)與TI8的冠軍OG舉行了一場(chǎng)表演賽,在英雄陣容限定17個(gè),部分道具和功能禁用的前提下,OpenAI以2:0完勝了OG,尤其值得一提的是第二場(chǎng)比賽僅用時(shí)15分鐘OpenAI就把OG斬落馬下,這一系列的精彩表現(xiàn)也讓OpenAI在業(yè)界抱得大名。

  后來(lái)OpenAI開始轉(zhuǎn)戰(zhàn)自然語(yǔ)言處理領(lǐng)域,他們第一個(gè)引發(fā)廣泛關(guān)注的模型是GPT-2。2019年底著名魔幻電視劇集《權(quán)利的游戲》的最后一季上演了史詩(shī)級(jí)的爛尾,不過(guò)網(wǎng)友用GPT-2來(lái)重寫劇本而得到的新結(jié)局,卻意外得到了全網(wǎng)的普遍好評(píng),這也讓GPT-2順利出圈。

  去年的六月初,OpenAI發(fā)布了全新一代的NLP模型——GPT-3(論文地址:https://arxiv.org/abs/2005.14165),這個(gè)模型的效果之好已經(jīng)到了令人嘆為觀止的程度,在筆者的印象中GPT-3一直在GitHub的趨勢(shì)榜的榜首位置上,且一直霸榜了兩個(gè)月(https://github.com/openai/gpt-3),一時(shí)之間各類GPT-3的神奇應(yīng)用層出不窮。GPT-3的出現(xiàn)再次證明了AI領(lǐng)域大力出奇跡的現(xiàn)象,這個(gè)模型的數(shù)據(jù)集達(dá)到了45TB,參數(shù)個(gè)數(shù)1750億,訓(xùn)練成本接近500萬(wàn)美元。

  與之前NLP領(lǐng)域的王者BERT模型不同,GPT-3雖然博采眾長(zhǎng),但從本質(zhì)上講GPT-3還是個(gè)自回歸模型,通俗的理解自回歸就是使用自身做回歸變量的過(guò)程。比如在見到一個(gè)時(shí)間序列“我愛北京天安門”,那自回歸模型要完成的任務(wù)就是收到“我愛北京天”這段輸入時(shí),將后面的內(nèi)容補(bǔ)齊。

  假設(shè)我們天、安、門三段日志分別對(duì)應(yīng)X_1、X_2、X_3,那么如果我們要建模“天安門”這段主義序列時(shí),就要通過(guò)貝葉斯公式解出,在在所有語(yǔ)料信息中,“天安門”這個(gè)序列出現(xiàn)的聯(lián)合概率分布 P(X_1,X_2,X_3)。由于這些概率分布彼此之間并不獨(dú)立的,我們僅統(tǒng)計(jì)P(X_1)、P(X_2)、P(X_3)三個(gè)概率是不夠的。因?yàn)閄_1還依賴于其它變量存在條件分布 P(X_2|X_1) 和 P(X_3|X_1)。對(duì)于X_2和X_3也是一樣,我們可以將這三個(gè)模型組合起來(lái)獲得期望聯(lián)合分布 P(X_1,X_2,X_3)=P(X_1)P(X_2|X_1)P(X_3|X_1,X_2)。在自回歸模型中都考慮了順序信息,也就是說(shuō)他看到“天安”之后極有可能續(xù)寫出后面的“門”來(lái),這樣的條件概率算法是自回歸模型的基礎(chǔ)。也就是說(shuō)GPT-3,一旦看到“天安”這個(gè)輸入之后,就能判斷出后面是“門”字的概率大幅度增加,因此從原理上看GPT-3的確更適合做文本的生成與續(xù)寫工作。

  誤打誤撞,Copilot成GPT-3的首個(gè)商業(yè)應(yīng)用

  在去年GPT-3最火的階段,代碼補(bǔ)全這個(gè)應(yīng)用雖然也被業(yè)界關(guān)注,但其熱度根本不夠看,當(dāng)時(shí)像對(duì)話機(jī)器人、自動(dòng)診斷、自動(dòng)作詩(shī)、自動(dòng)作曲的應(yīng)用才是比較吸引眼球的,即使是在編程方面,代碼補(bǔ)全的應(yīng)用也沒有到大放異彩的程度,早在去年7月上線的那個(gè)能根據(jù)需求直接生成前端代碼的debuid.co,都曾經(jīng)被認(rèn)為是AI編程的未來(lái)趨勢(shì)。

  不過(guò)GPT-3的知識(shí)儲(chǔ)備雖然豐富,但本質(zhì)上卻還是對(duì)以往代碼的模仿,很難有創(chuàng)造性的靈動(dòng)表現(xiàn),在很多情況下GPT-3無(wú)法獨(dú)立完成創(chuàng)作。因此與人類程序員配合,由人類程序員完成功能模塊的一部分,再由AI幫助續(xù)寫剩余代碼,似乎成為了一個(gè)相當(dāng)合理的選擇,在這樣的背景下Copilot就應(yīng)運(yùn)而生了。

  Copilot使用的Codex深度學(xué)習(xí)模型,就是基于GPT-3的編程任務(wù)微調(diào)版本,它以部分完成的代碼及注釋作為輸入,輸出完整的代碼建議。Copilot的官方網(wǎng)站(https://t.co/eWPueAXTFt?)將其描述為“程序員結(jié)對(duì)編程實(shí)踐中的AI對(duì)手”,筆者看到不少參加初測(cè)的網(wǎng)友都提到,很多時(shí)候提供函數(shù)簽名,Copilot就可以完成整個(gè)函數(shù)的代碼編寫了,有時(shí)甚至只需要一個(gè)簡(jiǎn)單的注釋描述,Copilot就能把整個(gè)功能模塊全寫出來(lái)。

  神經(jīng)網(wǎng)絡(luò)非常擅長(zhǎng)從大型訓(xùn)練數(shù)據(jù)集中得到有效的發(fā)現(xiàn)與建議,從這個(gè)角度來(lái)看,使用GPT-3的微調(diào)版本,幫助程序員在GitHub的源代碼庫(kù)尋找解決方案的做法,有著非常大的意義。

  前途雖光明,但道路依舊曲折

  根據(jù)GitHub官方說(shuō)法來(lái)看,如果Copilot技術(shù)預(yù)覽成功,Copilot的商業(yè)版本也將很快問世。我們知道目前程序員的時(shí)薪很高,一般從10美元到150美元之間,只要能節(jié)省幾個(gè)小時(shí)的編程時(shí)間或稍稍提高一些開發(fā)速度,就能產(chǎn)生不低的效益。尤其是對(duì)于一些有著豐富經(jīng)驗(yàn)的程序員來(lái)說(shuō),Copilot意味著更加容易的跨界,在它的加持下Rust將不會(huì)那么勸退,C++也不會(huì)再那么令人愛恨交加。而且Copilot需要定期更新和微調(diào),這對(duì)于GitHub這樣的開源公司來(lái)說(shuō)還會(huì)帶來(lái)持續(xù)性的收入,AI編碼未來(lái)很可能會(huì)成為一個(gè)價(jià)值數(shù)十億美元的產(chǎn)業(yè),不過(guò)光明的前途不意味著Copilot的發(fā)展將一帆風(fēng)順,從目前情況來(lái)看,其主要問題有以下幾點(diǎn):

  不分許可證的引用代碼是否涉嫌侵權(quán)?正如前文所說(shuō)GPT-3能夠成功依靠就是海量的訓(xùn)練集,根據(jù)Copilot的主頁(yè)顯示,Codex的訓(xùn)練代碼由公開來(lái)源的英語(yǔ)注釋及源代碼而來(lái),這其中包括 了GitHub上公共存儲(chǔ)庫(kù)中的源代碼及注釋,而有跡象表明Codex用于訓(xùn)練的代碼,并沒有按照不同的開源許可證進(jìn)行區(qū)分對(duì)待。

  我們知道Copilot未來(lái)肯定要有商業(yè)版本推出,那么問題就來(lái)了,如果Copilot將那些已經(jīng)明確不允許用于商業(yè)用途的代碼,通通拿來(lái)進(jìn)行AI訓(xùn)練的話,這種做法是否涉嫌侵權(quán)?針對(duì)這個(gè)問題網(wǎng)上已經(jīng)有很多不同的聲音了,筆者認(rèn)為如果AI最終給出的建議代碼與原先訓(xùn)練集中的代碼一模一樣的話,那么這種情況肯定會(huì)涉嫌侵權(quán),但建議代碼與原訓(xùn)練代碼的相似度如何判斷才是關(guān)鍵所在,當(dāng)然截止目前這還依舊是個(gè)開放性問題,業(yè)界尚未形成共識(shí)。

  無(wú)效建議拖慢開發(fā)效率:根據(jù)GitHub給出的官方說(shuō)法Copilot試圖理解程序員的意圖,并盡可能生成最好的代碼,但它建議的代碼可能并不總是有效,甚至沒有意義。也有不少程序員親測(cè)后反饋說(shuō),如果想提高Copilot建議的正確率,你就必須按照其他程序員那樣,使用一個(gè)大眾化的代碼風(fēng)格以及變量名、函數(shù)名的命名規(guī)范,如果你的代碼規(guī)范和變量命名都特別有個(gè)性,那么你得到的建議很可能會(huì)是沒有意義的代碼。

  歸根結(jié)底Copilot等模型根本就不理解源代碼的目的和結(jié)構(gòu),更不了解程序運(yùn)行的目的,他能做的就是高度模仿之前大量存在過(guò)的類似代碼,因此他給出的結(jié)果很可能是沒有意義的,如果這些無(wú)效建議的比例過(guò)高,會(huì)使程序員的編程思路混亂,甚至拖慢開發(fā)的節(jié)奏。

  引用老舊類庫(kù),增加安全風(fēng)險(xiǎn):筆者注意到GitHub還警告說(shuō),Copilot可能會(huì)建議舊的或者不推薦使用的類庫(kù)和代碼,這可能會(huì)導(dǎo)致安全問題。正如前文所言,Copilot本質(zhì)上是對(duì)歷史上全部代碼的學(xué)習(xí)與模仿,但是從實(shí)操來(lái)講,你又很難對(duì)如此大量的代碼進(jìn)行有效標(biāo)注,因此即便Copilot的建議即使有效而且能夠正常運(yùn)行,也不能代表這些代碼沒有安全漏洞,這樣的特性就使得開發(fā)人員完全審查AI生成的代碼變得非常重要。

  可以說(shuō)AI自動(dòng)化編碼工具的發(fā)展還遠(yuǎn)遠(yuǎn)沒有達(dá)到我們的期望,程序員在使用Copilot時(shí)必須時(shí)刻小心翼翼,你不能把Copilot這樣的AI自動(dòng)生成工具當(dāng)成不會(huì)出錯(cuò)的編程機(jī)器。如果由于工期緊迫,而完全依賴Copilot提供代碼,不去進(jìn)行安全審核的話,那么Copilot帶來(lái)的風(fēng)險(xiǎn)很可能比產(chǎn)生的效益還大。

  不過(guò)無(wú)論如何Copilot前途還是非常光明的,從歷史經(jīng)驗(yàn)來(lái)看,新的編程工具必然帶來(lái)新的編程風(fēng)險(xiǎn)。我們必須仔細(xì)跟AI自動(dòng)編程這個(gè)新領(lǐng)域的發(fā)展趨勢(shì),才能做到不落后于趨勢(shì),也不引入風(fēng)險(xiǎn)。

  馬超,CSDN博客專家,阿里云MVP、華為云MVP,華為2020年技術(shù)社區(qū)開發(fā)者之星。




電子技術(shù)圖片.png

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。