能節省四成開發時間的工具? GitHub Copilot 的介紹與心得分享

fin
8 min readNov 26, 2021

--

Copilot 是我心目中 2021 年最強的工程師生產力工具,沒有之一,好好的使用的話絕對可以幫助工程師們省下大量的打字時間。接下來就來介紹一下 Copilot 是什麼,該怎麼使用,以及可以如何幫助你省下時間。

Copilot 是什麼

Copilot 是 GitHub 於 2021/06/29 推出的 AI 程式碼工具,基於 OpenAI 加上 GitHub 上大量的原始碼,在你寫程式的時候依照內文給予你相對應的建議。官網聲稱可以達到四成以上的正確率,也就是說可以少寫四成以上的程式碼。依據本人目前使用狀況來說,只要條件正確的確可以達到無腦 coding 的狀態,至於怎樣算條件正確就請繼續看下去吧。

語言的支援度上主流語言都沒問題:Python, JavaScript, TypeScript, Ruby, Java, Go 等等,實測上連 yaml, json 都可以作用。目前以擴充功能的方式在 VSCode, Neovim 跟 Jetbrains,接下來會以 VSCode 為主來介紹 Copilot 的安裝與使用。

2022.6.23 更新: Copilot 已正式發佈,有 60 天試用期,之後費用為每月 10 鎂或是每年 100 鎂。開源貢獻者或學生可以申請免費方案。

安裝

如果沒有用過,就先到 GitHub Copilot · Your AI pair programmer 去申請試用。

接下來,到 VSCode 的擴充功能去找 github copilot ,安裝,系統會要你登入 GitHub 授權,授權通過後就可以開始使用。如果沒有 copilot 的權限,你會看到這個訊息。

就算你現在沒有權限也沒關係,先跟著此文來實際體驗一下 Copilot 的威力吧。

實際使用

案例一: 官方教學

官方的教學是這樣,建立一個 js 檔,開頭是 function caculateDaysBetweenDates(begin, end) { 然後系統就會幫你自動建議

很厲害嗎?其實我剛看到的時候覺得還好,覺得這不就估狗一下就有了,不會花我多少時間。

案例二:Cypress 測試

真正被驚嚇到的是我在試著改用 cypress 寫 E2E 測試的時候:

當時按下 Enter 時,copilot 冷不防了給了建議

再下一個也是

這真的有嚇到我,因為以上兩個建議都是完全符合測試需求,實際執行也都通過的。

於是繼續玩下去,接下來這個比較困難,copilot 一直產生註解給我,查了一下 alt + ], alt+[ 可以切換建議,但怎麼切都是註解,我要的是程式碼啊。

於是看了一下說明, ctrl + enter 會打開 copilot 的建議視窗

第一個選項正好是我要的,就這樣瞬間完了了許多個測試,跑起來也都還正確運作!這當下我根本不知道 cypress 到底有哪些 method 可以用(汗)。試想沒有 copilot 的情況一個 cypress 新手下光是查詢文件跟來回測試可能就要花上十分鐘,但以上三個靠著 copilot 前後花不到三分鐘就完成了。

實際案例二

今天靈光一動想說寫個 ruby 的幹話產生器(我不會說用在哪的),刻意的想使用 copilot 看看能完成到什麼樣子的程度,於是先打個註解,告訴 copilot 我要一個 singleton class ,讓 copilot 完成

此時只有打完第一行的註解,第二行游標後方即為 copilot 的建議,

tab 完成後自動跳出剩下的

第三行 include Singleton 完全符合我的需求,但 include Bullshit 以及後面幾行就不太需要了,先刪一刪。

這個幹話產生器的邏輯很簡單,有句型模板,以及主題,目標是隨機取得巨型模板以及主題,並組合成一句幹話。

句型模板源自唬爛產生器

幹話主題則自己設定

接下來開始定義方法,第一步,隨機取 TOPICS:

第二步,隨機取得 BULLSHIT_QUOTES 然後替換 %w 為 topic

不到五分鐘,一個幹話產生器就完成啦。

心得

幾天試用下來有幾點心得

規格要清楚

以上範例,只要把我想做的事情寫出來,copilot 就會幫忙完成。但不要期望 copilot 可以完成太複雜的任務,如果寫說 recommend a stock copilot 也只會 random 一些資料給你。太複雜的牽扯商業邏輯的或是需要深度思考的不適合用 copilot。反之如果在寫扣之前先把該做的事情拆解成簡單的步驟,那麼 copilot 可以大幅度的減少你查詢語法的時間,以及語法的錯誤。只要規格會寫對,那麼你不會語法也沒關係。

英文要正確

Copilot 也看得懂中文,但英文的精準度還是高上許多,所以在寫規格的時候還是以英文為主會比較好。以範例二來說,想要隨機取字串並且替代,寫成英文就是 random + replace,關鍵字寫對就會幫你產生了。如果平常學習時都有看英文文件的習慣,這些關鍵字應該都不是問題,如果不是的話,現在你有個好的英文練習動機了。這兩個案例中,我只要用英文把我想做的事情寫清楚,就可以產生我想寫的程式碼。

適合用在規範簡單清楚的地方

例如案例一的測試情境,有明確的目標就可以享受 copilot 的威力。由於使用的過程需要先定義規格、拆解成簡單的任務,長久下來也可以幫助內化 clean code 的能力。

還是要理解技術的架構

語法交給 copilot ,但架構還是要交給人,以案例二來說, singleton 是一種 design pattern,是我選擇要這樣用。不能寫說『給我一個幹話產生器』就完事,而是要把幹話產生器裡面的架構先想好,拆解下來後再交給 copilot 產生。

適用主流語言與框架

因為是拿既有程式去訓練出來的,自然越多人用的語言與框架就越精準,如果今天我不是用 cypress 而是用相對少人知道的框架,那麼 copilot 沒有相關資料可以參考的情況下,可能也沒辦法有太大的幫助。

越用越進化

對於不合適的建議我們會去修改, copilot 也能藉此修正,隨著次數的累積,正確率有繼續提升的可能。

快捷鍵

如果已經有 copilot 可以使用的人,這些快捷鍵可以幫助你省下更多時間:

  • alt + \ : 跳出建議,通常換行的時候就會有建議,但如果不小心弄掉,可以用此快速鍵重新叫出來
  • alt+[ , alt+] : 覺得這個建議不好,可以切換不同建議
  • ctrl + enter : 跳出 copilot 視窗,最多會顯示十筆建議
  • tab : 看到建議的當下如果滿意,就直接 tab 使用此建議

其他

  • 道德問題:曾被爆料說 copilot 的 training data 是所有 github 的 repo(包含 private 的),這部分就看個人道德值斟酌評估了。以及遊走邊緣的是開源有些也是有版權的,那麼被 copilot 拿去用版權要怎麼算。
  • 許多問題在官網最下方的 FAQ 區塊都有回答,可以參考一下

如果已經有 copilot 可以使用的人,這些快捷鍵可以幫助你省下更多時間:

  • alt + \ : 跳出建議,通常換行的時候就會有建議,但如果不小心弄掉,可以用此快速鍵重新叫出來
  • alt+[ , alt+] : 覺得這個建議不好,可以切換不同建議
  • ctrl + enter : 跳出 copilot 視窗,最多會顯示十筆建議
  • tab : 看到建議的當下如果滿意,就直接 tab 使用此建議

結語

一個理想的生產力工具要能協助處理掉雜事,讓使用者專注在任務之上。Copilot 可以幫助我們寫出正確的語法,我們要做的就是好好的把系統的邏輯定義清楚即可,從這角度來說 Copilot 是個很理想的工程師生產力工具。

也滿好奇未來的發展,如果學習之後能有基於單個 repo 或組織的 context model,感覺就可以是個把組織潛規則轉化為正式建議的強大手段。

--

--