AI編程,詳細(xì)比較GitHub Copilot對(duì)比Amazon CodeWhisperer
1、簡介
GitHub Copilot和Amazon CodeWhisperer是采用人工智能技術(shù)驅(qū)動(dòng)的編碼助手,它們將自動(dòng)完成編碼功能提升到一個(gè)全新的水平。在最佳狀態(tài)下,它們可以根據(jù)開發(fā)者提供的簡短描述性文本編寫功能完整、可運(yùn)行的代碼塊。這可以讓開發(fā)者更高效,而且還能讓開發(fā)變得更有趣!
接下來跟隨本文開始了解最佳AI編碼助手吧!
2、什么是人工智能編碼助手?
GitHub Copilot和Amazon CodeWhisperer是與代碼編輯器集成的服務(wù),可以幫助開發(fā)者更快地編寫代碼。但與常見的自動(dòng)完成工具(如“IntelliSense”)不同,Copilot和CodeWhisperer利用的是在源代碼和自然語言上都經(jīng)過訓(xùn)練的機(jī)器學(xué)習(xí)模型,因此它們既能理解編程語言,也能理解人類語言。這使它們能夠理解用簡單英語編寫的注釋,根據(jù)開發(fā)者的意圖生成代碼,并匹配開發(fā)者的模式和風(fēng)格。當(dāng)開發(fā)者輸入時(shí),它們甚至?xí)峁┩瓿沙跏甲⑨尡旧淼慕ㄗh??梢越邮茼敳康慕ㄗh,也可以查看更多建議,或者繼續(xù)編寫自己的代碼。
節(jié)省創(chuàng)建模板代碼和重復(fù)代碼模式的時(shí)間,將更多時(shí)間投入到重要的事情上:構(gòu)建優(yōu)秀的軟件(GitHub Copilot)。
2.1 什么是GitHub Copilot?
【GitHub Copilot】:https://github.com/features/copilot/
GitHub Copilot是由GitHub和OpenAI共同開發(fā)的,它由OpenAI的Codex模型提供支持,該模型是在公開源代碼(包括GitHub上的公共源代碼庫)上進(jìn)行訓(xùn)練的。Copilot在2022年6月正式宣布“退出技術(shù)預(yù)覽”。
圖片
開始輸入描述性注釋或函數(shù)名稱,Copilot會(huì)嘗試自動(dòng)補(bǔ)全其余內(nèi)容。
Copilot非常易于使用,并與所有主要的代碼編輯器進(jìn)行了簡化集成。GitHub Copilot針對(duì)七種主要的編程語言進(jìn)行了優(yōu)化(詳見下表),但也可以生成其他語言和各種框架的建議。
Copilot在預(yù)覽階段是免費(fèi)的,但GitHub在2022年宣布轉(zhuǎn)向訂閱模式。開發(fā)者仍然可以獲得為期60天的免費(fèi)試用,而且對(duì)于經(jīng)過驗(yàn)證的學(xué)生和熱門開源項(xiàng)目的維護(hù)者,它將保持免費(fèi)。
圖片
Copilot的建議是上下文相關(guān)的。請(qǐng)注意它是如何“學(xué)會(huì)”開發(fā)者想要使用常量的,以及它是如何正確命名和填充對(duì)象的。
2.2 什么是Amazon CodeWhisperer?
【Amazon CodeWhisperer】:https://aws.amazon.com/cn/codewhisperer/
Amazon CodeWhisperer是由亞馬遜開發(fā)的。它的機(jī)器學(xué)習(xí)模型是在各種數(shù)據(jù)源(包括亞馬遜的內(nèi)部代碼和開放源代碼)上訓(xùn)練出來的。
圖片
CodeWhisperer可以完成注釋,并根據(jù)注釋提供代碼建議。開發(fā)者可以在不同的代碼實(shí)現(xiàn)之間切換,選擇最合適的代碼。
CodeWhisperer與GitHub Copilot相比,它支持的語言和主要代碼編輯器都較少。不過,廣泛的語言和IDE支持并非CodeWhisperer的主要吸引點(diǎn)。相反,CodeWhisperer專注于為AWS API提供一流的支持,為包括亞馬遜彈性計(jì)算云(EC2)、AWS Lambda和亞馬遜簡單存儲(chǔ)服務(wù)(S3)在內(nèi)的最流行服務(wù)提供代碼建議。
根據(jù)亞馬遜官網(wǎng)的介紹,用戶只需編寫“將文件上傳到S3。(upload a file to S3.)”,CodeWhisperer將自動(dòng)確定最適合指定任務(wù)的云服務(wù)和公共庫,即時(shí)構(gòu)建具體代碼,并直接在IDE中推薦生成的代碼片段。
【Amazon CodeWhisperer簡介】:https://aws.amazon.com/cn/blogs/machine-learning/introducing-amazon-codewhisperer-the-ml-powered-coding-companion/
個(gè)人開發(fā)者可以免費(fèi)使用CodeWhisperer。
3、比較
圖片
GitHub Copilot與Amazon CodeWhisperer的比較。
3.1 哪個(gè)更受歡迎?
由于CodeWhisperer的發(fā)布時(shí)間較短,GitHub Copilot憑借其一年的先發(fā)優(yōu)勢(shì),目前占據(jù)著主導(dǎo)地位。根據(jù)GitHub自己的數(shù)據(jù),在預(yù)覽階段的12個(gè)月里,超過120萬開發(fā)者使用了Copilot的技術(shù)預(yù)覽版。他們自己的研究表明,用戶平均接受了GitHub Copilot提供的所有補(bǔ)全內(nèi)容的26%,并且高達(dá)40%的開發(fā)者的代碼文件是由GitHub Copilot生成的。
3.2 隱私如何保護(hù)?
為了提高性能,Copilot和CodeWhisperer都會(huì)收集用戶的數(shù)據(jù)。在工作中使用這些工具是否會(huì)危及企業(yè)的代碼庫或數(shù)據(jù)?這是一個(gè)重要的問題,對(duì)于大多數(shù)公司來說可能是一個(gè)潛在的決定因素。
為了提供代碼建議,GitHub Copilot會(huì)將開發(fā)者的代碼和注釋發(fā)送到GitHub Copilot服務(wù)。該服務(wù)依賴于文件內(nèi)容的上下文,包括正在編輯的文件以及項(xiàng)目中的相鄰或相關(guān)文件。它還可能收集存儲(chǔ)庫的URL或文件路徑以識(shí)別相關(guān)的上下文。某些數(shù)據(jù)收集部分可以在遙測(cè)設(shè)置中禁用。但是其他部分,如使用信息,則是使用Copilot所必需的,無法關(guān)閉。其中可能包括個(gè)人數(shù)據(jù),詳見GitHub隱私聲明。
【GitHub隱私聲明】:https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement
GitHub還表示,根據(jù)他們的內(nèi)部測(cè)試,他們發(fā)現(xiàn)GitHub Copilot的建議中很少包含直接從訓(xùn)練集中提取的個(gè)人數(shù)據(jù)。然而,其中一些建議可能只是看起來像個(gè)人數(shù)據(jù)(電子郵件地址、電話號(hào)碼等),但實(shí)際上是從訓(xùn)練數(shù)據(jù)中的模式合成的虛構(gòu)信息。
Amazon CodeWhisperer也會(huì)收集某些信息,如上下文信息(包括文件內(nèi)容)、反饋、遙測(cè)指標(biāo)和用戶環(huán)境信息。在其服務(wù)條款中,亞馬遜表示在預(yù)覽階段會(huì)向開發(fā)者提供打開或關(guān)閉內(nèi)容共享的選項(xiàng)。
3.3 風(fēng)險(xiǎn)和漏洞如何處理?
這兩個(gè)助手都是在可能包含不安全編碼模式、錯(cuò)誤或過時(shí)的API或習(xí)慣用語引用的公共代碼上進(jìn)行訓(xùn)練的。報(bào)告《Asleep at the Keyboard? Assessing the Security of GitHub Copilot’s Code Contributions》研究發(fā)現(xiàn),在使用Copilot的測(cè)試場景中多達(dá)40%的代碼存在漏洞。
【報(bào)告】:https://arxiv.org/pdf/2108.09293.pdf
GitHub承認(rèn)Copilot有時(shí)可能會(huì)建議使用舊的或已棄用的庫和語言,并且它可能會(huì)合成包含不良模式的代碼。為了減少這種情況,他們建議將其與GitHub Actions、Dependabot和CodeQL等工具結(jié)合使用,以幫助提高代碼質(zhì)量。
亞馬遜也是如此,不過值得稱贊的是,亞馬遜已經(jīng)采取了很好的應(yīng)對(duì)措施,他們提供了安全掃描功能,用于檢測(cè)Java和Python項(xiàng)目中的漏洞。
圖片
當(dāng)選擇運(yùn)行安全掃描時(shí),CodeWhisperer會(huì)檢測(cè)到此漏洞并顯示問題。(來源:AWS機(jī)器學(xué)習(xí)博客)
話雖如此,開發(fā)者應(yīng)該始終將AI輔助編碼助手與適當(dāng)?shù)臏y(cè)試、良好的代碼審查實(shí)踐、可靠的安全工具以及自己的判斷力結(jié)合使用!
3.4 公共代碼的(錯(cuò)誤)使用情況如何?
關(guān)于在訓(xùn)練集中大量使用公共代碼的問題已經(jīng)引起了人們的關(guān)注。理想情況下,助手應(yīng)該始終生成之前從未見過的代碼。如果助手直接從訓(xùn)練集中引用代碼,這可能使代碼失去合理使用的資格,并可能侵犯原始所有者的版權(quán)。
為了減少這種情況,Copilot內(nèi)置了一個(gè)過濾器,試圖檢測(cè)和抑制GitHub Copilot建議中包含的代碼與GitHub上的公共代碼相匹配的情況。這個(gè)過濾器是可選的,可以關(guān)閉。根據(jù)GitHub官方的說法,Copilot大約有1%的情況下會(huì)輸出與公共代碼完全相同的超過約150個(gè)字符的代碼片段。他們將此歸咎于GitHub Copilot無法從開發(fā)者正在編寫的代碼中獲取足夠的上下文,或者此問題存在一個(gè)常見的、甚至是普遍的解決方案。
與Copilot類似,CodeWhisperer還配備了一個(gè)引用跟蹤器,可以檢測(cè)生成的輸出是否與特定訓(xùn)練數(shù)據(jù)相似。關(guān)于用戶編寫的代碼收集,亞馬遜表示他們不會(huì)在預(yù)覽階段使用任何開發(fā)者編寫的代碼來進(jìn)一步訓(xùn)練其模型。然而,CodeWhisperer確實(shí)會(huì)存儲(chǔ)與開發(fā)者對(duì)代碼建議的響應(yīng)(如接受或拒絕建議)相關(guān)的用戶活動(dòng)數(shù)據(jù)。該服務(wù)使用這些反饋來提高其機(jī)器學(xué)習(xí)模型的準(zhǔn)確性,從而使CodeWhisperer能夠改進(jìn)未來的建議。
4、勝出者是誰?
在語言和集成開發(fā)環(huán)境(IDE)支持方面,GitHub Copilot是勝者。它正式推出的時(shí)間更長,這就給了GitHub工作人員更多的時(shí)間來修復(fù)錯(cuò)誤和解決問題。使用它需要進(jìn)行少量的資金投入,但開發(fā)者將獲得一個(gè)功能齊全、隨時(shí)可用的產(chǎn)品。
然而,如果開發(fā)者在AWS環(huán)境中工作,那么Amazon CodeWhisperer可能是更合適的選擇。亞馬遜是第一家提供智能編碼助手的云服務(wù)提供商,而且主要是針對(duì)自己的產(chǎn)品。此外,其集成的漏洞檢測(cè)功能也是考慮使用它的一個(gè)很好的理由。最后,它對(duì)于個(gè)人開發(fā)者是免費(fèi)的。