0%

讓 Github Copilot 成為最佳幫手

2023.12.29 LLM 更新為 GPT-4

套件下載

簡介

  1. Copilot 是基於基於 OpenAI 加上 GitHub 上大量的原始碼人工智慧技術的開發助手,可以透過開發者輸入的部分程式碼與註解產生相關的程式碼,支援多種程式語言,目前最多的語言是 JavaScript。
  2. 底層是用 python。
  3. 目前所使用的 LLM 模型是 GPT-4。(2023.12.29 更新)
  4. 可透過上下文判斷自動完成程式碼。
  5. 沒有足夠的上下文也可以透過註解提供更完整的上下文,但混亂的上下文會導致無建議產生。
  6. 擅長寫重複的程式碼,減少輸入的時間。
  7. 可自動建立與單元測試程式碼。
  8. 可促進程式碼的可讀性與標準化。
  9. 需要連結 Github 帳戶。
  10. 官方聲稱可以提升 40% 的效率。

優點

  1. 可以快速生成程式碼,節省部分時間。
  2. 可根據上下文提示,幫助提供更好理解的程式碼與問題。
  3. 提高程式碼品質與效率,「可能」減少錯誤與瑕疵。(但如果提示很爛,回饋程式碼也很爛)
  4. 會一直學習跟進化,會依照專案中的程式碼提供貼近需求的答案。

問題

  1. 可能存在版權與隱私問題,因為它是透過 Github 程式碼來訓練跟改進模型。
  2. 不見得會真正了解上下文,所以會提供不合理或不安全的程式碼。
  3. 會降低開發人員的手感。

課金的力量

註冊此服務要提供信用卡號,可免費使用 30 天,若時間快到了,會先行通知,等到期會開始收費,有官方認證過的教師、學生身份與熱門專案開源者,可以免費使用。

目前力推商務版跟 Enterprise,使用影片可以參考下方的延伸閱讀第二點。

image

輔助鍵(會跟原本 VS Code 預設快捷鍵衝突)

  • Ctrl + :arrow_right: 可一步一步確認提供的程式碼
  • Alt + [ : 選擇上一個建議。
  • Alt + ] : 選擇下一個建議。
  • Alt +/ : 呼叫建議。
  • tab: 同意此建議。
  • Ctrl + Enter (提供建議方法)

用嘴巴寫 code?

Demo

透過 Github Copliot 可以完成的功能

  • 限制星期六的早上七點到八點才能打卡

  • 移除項目

  • 修復 bug

  • 程式碼中聊天

  • 新建訂便當系統專案

  • 建立 firebase

  • 修改語法或重構

Github Copliot Lab (不能用了)

image

  • READBLE: 增加可讀性(好用功能)
  • ADD TYPES: 加入型別定義(適用 TS)。
  • FIX BUG: 修復臭蟲(部分好用)。
  • DEBUG: 找出臭蟲(沒有很好用)。
  • CLEAN: 刪除廢 code(很少使用)。
  • LIST STEPS: 列出程式碼執行步驟。
  • MAKE ROBUST: 建立更強壯的程式碼(想確認有沒有更好的防呆可用)。
  • CHUNK:拆分程式碼。
  • DOUMENT: 撰寫文件。
  • CUSTOM:自訂修改需求。

GitHub Copilot Chat

  • VSCode 需要 v1.79.0 以上版本。

  • 功能強大,幾乎可以包辦所有開發的事情。

  • 可透過 prompt 產生對應的程式碼。

  • 新功能:@workspace @terminal, @search, @api

  • 好的註解提示 (prompt) 需要非常具體,因電腦只做你告訴它的事,避免講一大串的要解決的流程,它更擅長處理一步一步的命令。沒有具體的提示可能會回應錯誤的結果。

  • 移到所選取的程式碼按右鍵也可直接使用。

  • 可直接插入建議後的片段程式碼。

  • 使用 @workspace 產生新專案並且 work。

Copilot Chat 可以完成的工作

  • 撰寫各種常見的程式邏輯

  • 撰寫複雜的正則表示式(Regular Expression)

  • 將 HTML 轉成 JavaScript 產生 DOM 的程式碼

  • 撰寫呼叫函式/方法的程式碼

  • 撰寫特定演算法的程式碼

  • 撰寫各種複雜 SQL 語句

  • 撰寫 OpenAPI Spec

  • 自動生成測試資料

  • 自動生成測試程式碼

  • 刪除不要的程式碼

  • 自動補完程式碼

    • 參考現有專案原始碼
    • 參考現有專案程式碼樣式

支援「原始檔控制」自動產生 PR commit message

更動程式後,選擇左方工具列的原始檔控制選項,會在輸入 PR Commit 的欄位右側有個類似星號的圖示,點下去之後,會自動偵測開發者所變動的內容,給予與情境相當的 Commit Message,不會 100% 正確,但可以當作參考,至少不用從頭去想。

image

使用心得

  1. 大部分的基本功能開發可以透過此套件完成,越訓練會越快速完成。
  2. 商業邏輯部分仍需要靠自己開發,但可透過詢問問題越來越聚焦。
  3. 提問的過程會順便幫忙解釋程式碼與提供建議寫法。
  4. 出入 ctrl+enter 可參考 Copilot 提供的寫法,知道原來還有其他方式,但有時候跑不出來。
  5. 大推 Copilot Chat 的使用。
  6. 正確的提問會大大提高想得到的答案,越明確越好。
  7. 會針對已開啟的檔案交互參考,無法參考整個專案。
  8. 對變數跟函式命名會使用清楚且一致的規則。

不要這樣用 Copilot

不要完全依賴 Copilot

Copilot 雖然好用,但應視為輔助的開發工具,甚至當一個怎麼問都不會累的同事,不是完全取代開發者,畢竟它只能處理基本跟簡單的程式邏輯,並不能完全代替開發者的知識,因為許多程式牽扯商業邏輯,而且有時候產生的程式碼可能不是最好、最安全的。

有效使用 Copilot 工具

適當地使用 Copilot 的提示功能,避免使用不好的方式,例如直接在註解中提示,雖然 Copilot 會依照註解提供相似的程式碼,但許多時候如果註解寫不好,反而會得到跟預期落差較大的結果,應優先使用內聯對話 (inline chat),也就是在程式碼中下指令 Ctrl + I 叫出對話框, 或側邊面板 (side panel) 使用 chat 對話,根據情境選擇最適合的提示方式。

避免重複創建提示

使用 Copilot 時,利用現有的命令 (斜線命令),也就是如下圖的方式 來快速解決問題,而不是重複創建提示。

image

考慮上下文資訊

在使用 Copilot 時,提供清晰明確的上下文資訊或程式碼,可以幫助獲得更相關的解決方案。包括清理不相關的對話、選擇相關程式碼段落等。

使用反饋功能

積極使用 Copilot 的反饋 (feedback) 和評分 (rating) 功能,幫助 Copilot 學習並改進,提供更好的代碼建議,如果 Copilot 答對了,也可以讚美它一下。

延伸閱讀