本文內容為Will保哥 GitHub Copilot 協作開發實戰課程筆記[^2] GitHub Copilot 是一個編輯器的外掛,可用於VS Code、Visual Studio ## 目錄 [2024.01.29 簡介GitHub Copilot](https://hackmd.io/@Eudicotz/BJVuG93i6) [2024.02.05 安裝和設定 GitHub Copilot](https://hackmd.io/@Eudicotz/rkVeQ5hip) [2024.02.05 GitHub Copilot實際操作](https://hackmd.io/@Eudicotz/HkIj793oT) [2024.02.16 GitHub Copilot advance usage其他妙用](https://hackmd.io/@Eudicotz/SyGvHkAsT) [2024.02.16 GitHub Copilot Chat](https://hackmd.io/@Eudicotz/BkfOVkCiT) ## 什麼是GitHub Copilot - 基於AI/LLM的開發助手,用於改善開發者體驗(DX: Developer Experience) - 核心技術來自GPT-3.5 Turbo模型,但**已更新至GPT-4** [^1] - 基於自然語言文本資料集進行訓練,具備一定的**推理能力** - 初階者常遇盲區:只使用註解來產生資料 - 主要能力 - 運用輸入的**部分程式碼**與描述(**註解**)來產生相應的程式碼 - 可以**解釋程式碼**的邏輯與行為,任何複雜的邏輯都可以解釋 - 注意事項:GitHub Copilot不是萬能 - 可以透過精練的提示(**Prompt**)告訴他該如何行動(**Action**) - 必須**與使用者協作**,它不是一個可以單獨憑空產生出完整程式碼的工具 - 如何讓GitHub Copilot可以發揮到極致? - Prompt 非常重要 - 「說人話」,如果人可以理解,那GitHub Copilot就可以理解 ## 大幅提升開發者體驗(DX) ### 幾乎支援「任何」程式語言 - 其訓練資料來自於GitHub的Public Repo - **能找到的Source Code越多,則其能理解語言的能力越強**,例如廣泛使用的Python、JavaScript等 - 越少公開的程式語言範例,則產生的代碼則越爛,因訓練資料受限,例如:COBOL(訓練資料不多) - 寫最好的語言是**JavaScript**,因為訓練資料最多,而Python、Java、C#、Golang同樣也有很好的表現 ### 專注於解決問題 - 開發人員經常容易「**切換畫面**」到Stack Overflow或其他網站尋找資料 - GitHub Copilot完美解決這個問題,減少需要切出IDE外查詢的時間 - 大多數簡單、重複、單調的問題可以藉由其自動產生解決 - 產出的Code**取決於專案內的Code品質**:目前專案的Code品質越好,GitHub Copilot能產生的Code就更好,也因此對於越Senior的工程師幫助越大 - 能夠產生多重範本(且為多執行續Call多次API),速度極快,可選到需要的使用 - Flow - 強調寫 Code 的「心流」模式不被破壞! ## GitHub Copilot運作機制  1. 送出Context - GitHub Copilot送出選取範圍的Code - 同時送出上下文 2. Context送入GitHub Server,同時產生出一份專業的Prompt 3. 將Prompt送入GPT模型,現在為GPT-4,回傳可能為文字也可能為Code 4. GitHub Server會整理為程式碼建議 5. 將建議(Suggestion)寫入原選取Code範圍之後 ## GitHub Copilot 特色 - 精準的**判斷上下文**,並**自動完成**程式碼 - 檔名、路徑名、類別名、已開啟的檔案內容、現有程式碼的上下文內容 - 沒有足夠的上下文,也可以透過「**註解**」提供更完整的上下文資訊 - 可透過**妥善命名**的**類別**、**方法**、**參數**即可自動產生適合的程式碼 - 擅長撰寫**重複的程式碼**,可幫助開發人員節省時間和精力,提高開發效率 - 可以學習並模仿自己的Code,在另外的檔案產生Code - Code的品質取決於自己撰寫的能力:**範本越好產生Code越好** - 可以幫助新手開發者快速上手一門技術,如 HTML, CSS, JS, C#, ... - 可自動建立與撰寫**單元測試**程式碼 - 可促進程式碼的**標準化**和**可讀性** ## GitHub Copilot 優點 - 可以**快速生成程式碼**,節省開發人員的時間與精力 - 可在不熟悉的領域提高寫Code的自信度 - 可以**根據上下文**提供**建議**與**提示**,幫助開發人員更好地理解程式與問題 - 上下文如何判斷而轉為Prompt是黑箱,目前只知道會擷取上下文,但不告知是如何做的 - 可以**提高程式碼品質**和**開發效率**,減少錯誤和瑕疵(但不保證) - 可以**學習**和**進化**,不斷提高其生成程式碼的**品質**與**準確性** ## GitHub Copilot的限制與潛在問題 - 可能存在**版權**和**隱私**問題 - 因為訓練來源來自大量的GitHub的開源(Open Source)程式庫 - 有可能有開源授權與公司衝突,或是該開源並不給予修改 - 設定:GitHub > Settings > Copilot - Suggestions matching public code - Allowed:檢查與開源庫有無重疊地方 ,也就是拿**產生的Code**來比對有無抄襲嫌疑 - 結論:建議勾選,取消反而不會去比對 - Allow GitHub to use my code snippets for product improvements - 自己的程式碼是否允許**給GitHub Copilot進行訓練** - 可能產生不合理或不安全程式碼 - 因為他不見得可以理解給出的上下文 - 可能會對開發人員的技能產生影響 [^1]: [嘴一下,就能寫出程式?GitHub升級Copilot、導入GPT-4,提高10倍生產力](https://www.bnext.com.tw/article/74557/github-copilot-chatbot-openai-gpt-4) [^2]:[GitHub-Copilot-協作開發實戰](https://www.accupass.com/event/2311170145205340711850)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up