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