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

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

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

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

  目前Copilot預(yù)覽版已經(jīng)正式上線Visual Studio Code平臺(tái),。雖然Copilot AI碼自動(dòng)生成器仍在逐漸完善當(dāng)中,,但它的出現(xiàn)卻提供了一個(gè)關(guān)于大型自然語言處理模型的發(fā)展思路,也讓我們程序員群體和對(duì)于自身未來是否會(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è)界抱得大名,。

  后來OpenAI開始轉(zhuǎn)戰(zhàn)自然語言處理領(lǐng)域,他們第一個(gè)引發(fā)廣泛關(guān)注的模型是GPT-2,。2019年底著名魔幻電視劇集《權(quán)利的游戲》的最后一季上演了史詩級(jí)的爛尾,,不過網(wǎng)友用GPT-2來重寫劇本而得到的新結(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萬美元。

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

  假設(shè)我們天,、安、門三段日志分別對(duì)應(yīng)X_1,、X_2,、X_3,那么如果我們要建?!疤彀查T”這段主義序列時(shí),,就要通過貝葉斯公式解出,在在所有語料信息中,,“天安門”這個(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è)模型組合起來獲得期望聯(lián)合分布 P(X_1,X_2,X_3)=P(X_1)P(X_2|X_1)P(X_3|X_1,X_2),。在自回歸模型中都考慮了順序信息,也就是說他看到“天安”之后極有可能續(xù)寫出后面的“門”來,,這樣的條件概率算法是自回歸模型的基礎(chǔ),。也就是說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)作詩,、自動(dòng)作曲的應(yīng)用才是比較吸引眼球的,,即使是在編程方面,代碼補(bǔ)全的應(yīng)用也沒有到大放異彩的程度,,早在去年7月上線的那個(gè)能根據(jù)需求直接生成前端代碼的debuid.co,,都曾經(jīng)被認(rèn)為是AI編程的未來趨勢(shì)。

  不過GPT-3的知識(shí)儲(chǔ)備雖然豐富,,但本質(zhì)上卻還是對(duì)以往代碼的模仿,,很難有創(chuàng)造性的靈動(dòng)表現(xiàn),在很多情況下GPT-3無法獨(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è)簡單的注釋描述,Copilot就能把整個(gè)功能模塊全寫出來,。

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

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

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

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

  我們知道Copilot未來肯定要有商業(yè)版本推出,,那么問題就來了,,如果Copilot將那些已經(jīng)明確不允許用于商業(yè)用途的代碼,通通拿來進(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í),。

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

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

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

  可以說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帶來的風(fēng)險(xiǎn)很可能比產(chǎn)生的效益還大,。

  不過無論如何Copilot前途還是非常光明的,,從歷史經(jīng)驗(yàn)來看,新的編程工具必然帶來新的編程風(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)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。