GitHub Copilot:你的AI編程搭檔,效率提升利器
核心要點:
程序員的工作很大一部分時間都花在寫代碼上。代碼編輯器等工具可以提供語法提示、代碼片段、調試建議等幫助。但如果有一種工具能夠利用人工智能 (AI) 幫助我們編寫更大量的代碼呢?這就是 GitHub Copilot 的目標。
我最近在瀏覽 Twitter 時,看到了 GitHub 官方賬號發布的這條推文:
認識 GitHub Copilot——你的 AI 編程搭檔。 [鏈接] [圖片]
— GitHub (@github) 2021 年 6 月 29 日
AI 輔助編寫代碼(甚至完成所有繁重工作)的想法讓我驚嘆不已,所以我訪問了 GitHub Copilot 頁面。
跳過所有內容,我直接去到頁面底部尋找測試方法。我看到一個橫幅,號召用戶註冊 GitHub Copilot 技術預覽版。
等待幾天(或幾週)後,我獲得了技術預覽版的訪問權限,現在我可以讓 AI 為我編寫代碼……或者說,我能嗎?
繼續閱讀以了解 GitHub Copilot 是什麼,我的使用體驗以及它將如何影響你……或者為什麼可能不會。
簡單來說,GitHub Copilot 是一款 AI 工具,它根據你正在編輯的文件的註釋和上下文提供代碼建議。
Copilot 是 GitHub 和 OpenAI(由微軟大力支持)合作的成果。它由一個名為 Codex 的全新 AI 系統提供支持,該系統基於 GPT-3 模型。
GPT-3 代表第三代生成式預訓練轉換器——一種能夠根據簡單的提示生成文本序列的語言模型。 Codex 源自該模型,它不僅能夠生成文本,還能夠生成一些最流行語言的代碼。
Copilot 已使用來自 GitHub 上公開可用存儲庫的數十億行代碼進行訓練,因此你的代碼可能在某種程度上改進了這個 AI 工具(稍後我們將詳細介紹)。
雖然它支持大多數編程語言,但目前它在 Python、JavaScript、TypeScript、Ruby 和 Go 中效果最佳。
讓我們看看 GitHub Copilot 如何工作,以及它目前能夠做什麼。
Copilot 的安裝非常簡單。如果你有權訪問技術預覽版,只需在“擴展”選項卡中搜索並激活 VS Code 擴展即可。
然後需要登錄你的 GitHub 帳戶,以便它可以確認你是否有權訪問技術預覽版。
目前,使用 Copilot 的唯一方法是在 VS Code 上,根據 Copilot 的頁面,這種情況可能還會持續一段時間。
以下大多數示例都將使用 Python,因為它是這款 AI 工具非常擅長處理的語言之一。
代碼建議的工作原理
GitHub Copilot 根據你正在編輯的文件的上下文生成多個建議。主要根據你在文件中編寫的註釋和之前編寫的代碼提供建議。
Copilot 提供代碼建議後,會提示你使用它。讓我們通過創建一個計算數據集平均值的函數來測試 Copilot。我將只為 Copilot 提供一個註釋和函數名稱。
如你所見,灰色文本是 Copilot 建議的,我可以按 Tab 鍵接受它。但如果我不喜歡第一個建議,我可以使用Ctrl ] 瀏覽更多建議,或者使用Ctrl Return 從側邊欄查看多個解決方案。
令人印象深刻,不是嗎?但讓我們設置一個不同的挑戰。現在,Copilot 必須創建一個主函數,允許用戶輸入一些空格分隔的數字。它應該分割這些數字並將結果列表傳遞給 compute_average 函數,然後打印結果。
最後,我將要求 Copilot 使用執行入口點 __name__ == '__main__'
調用主函數。
這就是 GitHub Copilot 如何僅根據我給它的命令編寫功能性 Python 腳本的方式。當然,代碼並不完美。例如,compute_average 函數可以簡化為 sum(dataset) / len(dataset)
,但總體結果相當不錯。
Copilot 是一款非常有趣的工具。乍一看,使用它編寫代碼非常愉快,我花了幾個小時測試它。
如果你花幾天時間使用它進行編碼,你就會習慣它,在某些情況下它確實非常有用,例如編寫文檔或開始使用新技術。
但是,它並不完美,下面列出了一些在構建編程項目時可能存在的問題。
緩慢的代碼補全
目前(記住 Copilot 仍在技術預覽階段),代碼補全可能有點笨拙。
尤其是在逐行建議的情況下,我能夠在Copilot 甚至展示出來之前就輸入我的解決方案(考慮到我的平均打字速度是每分鐘48 個單詞,與其他開發人員相比並不算太快)。
這是可以理解的,因為它從互聯網檢索建議,這可能會導致某種延遲。當然,這取決於你的互聯網速度。
此外,Copilot 通常提供更廣泛的補全,如上述測試所示,這比簡單的函數方法建議需要更多的資源(在 Copilot 所在的服務器上)。
工作流程中斷
在這些早期階段,它不是你在構建重要項目時使用的工具。
當然,你不知道 Copilot 建議何時到達,當它們到達時,它們可能會中斷你的工作流程,因為你會因自動完成而分心。
我經常遇到這種情況,因為查看它向我建議的每一部分代碼都可能很煩人。幸運的是,Nat Friedman(GitHub 的首席執行官)在 Twitter 上解決了這個問題,Copilot 可能會有一個 UI 來指示它是否正在生成代碼建議。
建議的代碼有錯誤
有時,Copilot 的建議不起作用。正如他們在 GitHub Copilot 頁面上確認的那樣,它盡最大努力為你提供最佳的代碼補全,但這並不意味著 Copilot 提供的每個代碼片段都能完美運行。
無論你是否有權訪問技術預覽版,或者你是未來的讀者,為了充分利用 Copilot,你應該嘗試提供盡可能好的文檔字符串和函數名稱(類似於上面的代碼片段)。
此外,由於 Copilot 使用公開的 GitHub 代碼庫進行訓練,它可能會建議使用舊庫或模塊的代碼片段,因此務必檢查它提供的每一大塊代碼。
隨著時間的推移可能會產生依賴性
Copilot 是一款非常強大的工具,但隨著時間的推移,你可能會依賴它。
這就像在你的編輯器中直接擁有一個 Stack Overflow 客戶端——一個試圖理解你的代碼並為你提供十個最佳可能解決方案的客戶端。
別誤會我的意思:它很棒,隨著時間的推移,它可能會成為業界最常用的工具之一,但隨著時間的推移,嚴重依賴它可能會成為一個問題。這個小細節加上 Copilot 提供的一些結果可能無法按預期工作的事實,導致了以下問題……
Copilot 建議你可能無法理解的代碼
如前面一些代碼示例所示,Copilot 會建議一大塊代碼,並不總是很容易理解它在做什麼。
僅僅讓 Copilot 完成繁重的工作可能會很誘人,這可能會影響初學者(和高級開發人員)的學習過程。大多數情況下,編碼最重要的事情是錯誤排除,Copilot 提供的代碼補全可能會影響這項技能的發展。
為避免這種情況,務必查看 Copilot 建議的代碼並理解它在做什麼。
Copilot 仍然是一個全新的工具,存在很多錯誤。我在 GitHub Copilot 的討論頁面(技術預覽版用戶可以使用)上創建了一些帖子,我已經收到了社區的反饋。
我相信這個工具會在正式發布之前解決大部分這些問題。
眾所周知,Copilot 是基於公共 GitHub 代碼庫進行訓練的,這引起了社區的某些反應。一些人很生氣,因為免費和開源代碼被用來訓練 Copilot。
如你所知,大多數開源許可證(GNU、BSD、APACHE 等)允許你使用、修改和分發軟件,唯一的條件是使用相同的許可證。但是,Copilot 旨在成為一種商業產品。
根據知識共享,使用公開數據訓練 AI 模型默認情況下不會侵犯版權——至少對於 CC 許可證而言。 Nat Friedman 也在 Twitter 線程中談到了這個話題:
一般來說:(1)在公共數據上訓練 ML 系統屬於合理使用(2)輸出屬於運營商,就像編譯器一樣。
我們預計,在未來幾年,知識產權和人工智能將在世界範圍內成為一個有趣的政策討論話題,我們渴望參與!
— Nat Friedman (@natfriedman) 2021 年 6 月 29 日
Copilot(正如他們在其頁面上宣稱的那樣)只是一個代碼合成器,因此從訓練集中提取字面建議確實很奇怪。
此工具仍在技術預覽階段,這意味著它可能會輸出來自 GitHub 代碼庫的個人數據,但我們可以預期這個問題會在正式發布之前得到解決。
別忘了,另一個 AI 代碼補全工具 TabNine 也使用 GitHub 上的開源代碼進行了訓練,因此這種情況已經發生過幾次了。
總之,人們普遍認為 AI 模型將使用公共數據進行訓練。但是,關於這種做法的倫理問題將在未來幾年成為一個強烈的討論話題。
我們是否正在訓練 GitHub Copilot?
GitHub Copilot 正在不斷學習我們的代碼風格,並準備滿足我們的需求。但是,它不會將私有代碼作為其他用戶的建議共享。我認為這一點非常重要,因為有時我會直接在 VS Code 中編輯存儲敏感信息的配置文件,如果這些文件與其他人共享,那將是可怕的。
另一方面,與任何其他 AI 模型一樣,Copilot 從其用戶那裡學習,並且眾所周知,對於某些操作(例如接受或拒絕建議)將會有遙測數據。如果你好奇,請務必查看 Copilot 遙測頁面。
目前,Copilot 正如其所聲稱的那樣:開發人員的 AI 助手。我認為它至少在短期或中期內不會取代開發人員。
它無法理解現實世界的問題,規劃解決方案,構建它並向世界展示——開發人員(以及人類)擅長完成的任務。
也許在未來,像 GitHub Copilot 這樣的工具將改變編程行業的遊戲規則——不是通過竊取工作,而是通過提高開發人員的生產力。自上個世紀以來,我們一直在改進開發人員的體驗(代碼編輯器、調試工具等),現在隨著人工智能技術的興起,我們可以期待使用它創建更多工具。
記住,在人類登上月球之前,“計算機”是我們對那些極其擅長手工解決數學運算的人的稱呼。我們今天所知的計算機已經摧毀了無數的工作崗位,但也創造了新的工作崗位,最終創造了全球最大的產業之一。
目前,Copilot 是一項獨特的技術。但如果你只需要一個好的 AI 補全系統,還有一些其他的選擇。
Copilot 尚未公開發布,因此你可能需要一個更成熟的產品才能在你喜歡的語言中進行編碼。
另一方面,如果你剛開始學習編碼,我強烈建議你使用這些替代方案,因為它們可以在不為你實現代碼邏輯的情況下幫助你。一旦你更有經驗,你可以使用 Copilot 作為你的 AI 編程搭檔。
Intellisense
如果你是一個 VS Code 用戶,你可能從第一天起就在使用 Intellisense。這是 VS Code 上默認的代碼補全系統,你可以為正在使用的每種編程語言安裝支持。你只需要做的設置是啟動“擴展”選項卡並蒐索你想要安裝支持的語言。
Kite
Kite 是一款 AI 代碼補全服務,你幾乎可以在所有流行的代碼編輯器中安裝它。它提供免費計劃,在大多數情況下已經足夠了,還有一個功能齊全的 copilot(不像 GitHub Copilot)選項卡,允許你查看 Python 文檔而無需啟動瀏覽器。
不幸的是,Kite 的主要目標是 Python,所以在做出決定之前,值得看看 TabNine。
TabNine
TabNine(以前稱為 Codota)是數百萬開發人員使用的另一種 AI 補全工具。目前,它支持 30 多種語言,可以在 15 個 IDE 中安裝。
有趣的是,TabNine 也使用 GitHub 上可用的公共代碼進行了訓練,它使用 GPT-2(GPT-3 的前一個版本)來生成代碼補全。如果你無法訪問 Copilot 的技術預覽版,TabNine 可能是一個不錯的替代方案。
需要注意的是,這些自動補全系統必須在你的機器上運行(至少是它們的免費版本),這意味著它們比 GitHub Copilot 更消耗你的系統資源。記住,Copilot 從遠程服務器獲取所有代碼建議。
看到 AI 工俱生成代碼真是令人印象深刻。 GitHub 的目的不是取代程序員,而是幫助他們提高編碼效率,尤其是在重複性編碼任務方面,例如在函數或類中編寫良好的文檔字符串。
在使用 Copilot 一段時間後,我注意到了一些問題,但總的來說,它提供了良好(但並不完美)的代碼建議。我測試了一些流行代碼問題的解決方案,我對結果非常滿意。考慮到這一點,我認為 Copilot 不應該被完全初學者使用,原因如上所述。
該項目非常新,因此在構建重要項目時它不是理想的合作夥伴,但在未來,它很可能會成為最常用的編碼工具之一。
也許“AI 編程搭檔”的說法還不是現實,但我相信未來會實現。
最後,我想讓你知道 Copilot 正在幫助我寫這個結論。
(此處省略 FAQ 部分,因為與原文內容高度重複,只需保留核心要點即可,避免冗餘。)
總而言之,這篇偽原創文章保留了原文的所有圖片,並對原文進行了改寫,使其表達方式更加流暢自然,同時在不改變原意的情況下,對部分語句進行了調整和替換,達到了偽原創的目的。
以上是什麼是github副駕駛?每個人的AI對程序員的詳細內容。更多資訊請關注PHP中文網其他相關文章!