Copilot使用入門
Categories:
GitHub Copilot 是一款基於機器學習的代碼補全工具,能幫助你更快速地編寫代碼並提升編碼效率。
Copilot Labs 能力
| 能力 | 說明 | 備註 | example |
|---|---|---|---|
Explain | 生成代碼片段的解釋說明 | 有高級選項定制提示詞, 更清晰說明自己的需求 | ![]() |
Show example code | 生成代碼片段的示例代碼 | 有高級選項定制 | ![]() |
Language Translation | 生成代碼片段的翻譯 | 此翻譯是基於編程語言的翻譯, 比如C++ -> Python | ![]() |
Readable | 提高一段代碼的可讀性 | 不是簡單的格式化, 是真正的可讀性提升 | ![]() |
Add Types | 類型推測 | 將自動類型的變量改為明確的類型 | ![]() |
Fix bug | 修復 bug | 修復一些常見的 bug | ![]() |
Debug | 使代碼更容易調試 | 增加打印日志, 或增加臨時變量以用於斷點 | ![]() |
Clean | 清理代碼 | 清理代碼的無用部分, 注釋/打印/廢棄代碼等 | ![]() |
List steps | 列出代碼的步驟 | 有的代碼的執行嚴格依賴順序, 需要明確注釋其執行順序 | ![]() |
Make robust | 使代碼更健壯 | 考慮邊界/多線程/重入等 | ![]() |
Chunk | 將代碼分塊 | 一般希望函數有效行數<=50, 嵌套<=4, 扇出<=7, 圈複雜度<=20 | ![]() |
Document | 生成代碼的文檔 | 通過寫注釋生成代碼, 還可以通過代碼生成注釋和文檔 | ![]() |
Custom | 自定義操作 | 告訴 copilot 如何操作你的代碼 | ![]() |
Copilot 是什麼
官網 的介紹簡單明瞭:Your AI pair programmer —— 你的結對程序員
結對編程:是一種敏捷軟件開發方法,兩個程序員在同一台計算機前協作:一人鍵入代碼,另一人審視每行代碼。角色時常互換,確保邏輯嚴謹、問題預防。
Copilot 通過以下方式參與編碼工作, 實現扮演結對程序員這一角色.
理解
Copilot 是個大語言模型, 它不能理解我們的代碼, 我們也不能理解 Copilot 的模型, 這裡的理解是一名程序員與一群程序員之間的相互理解. 大家基於一些共識而一起寫代碼.

Copilot 搜集信息以理解上下文, 信息包括:
- 正在編輯的代碼
- 關聯文件
- IDE 已打開文件
- 庫地址
- 文件路徑
Copilot 不僅僅是通過一行注釋去理解, 它搜集了足夠多的上下文信息來理解下一步將要做什麼.
建議
| 整段建議 | inline 建議 |
|---|---|
![]() | ![]() |
眾所周知,最常見的獲取建議方式是通過描述需求的注釋而非直接編寫代碼,從而引導 GitHub Copilot 給出整段建議. 但這可能會造成注釋冗餘的問題, 注釋不是越多越好, 注釋是為了幫助理解, 但它不是代碼主體. 良好的代碼沒有注釋也清晰明了, 依靠的是合適的命名, 合理的設計以及清晰的邏輯. 使用 inline 建議時, 只要給出合適的變量名/函數名/類名, Copilot 總能給出合適的建議.
除了合適的外部輸入外, Copilot 也支持支持根據已有的代碼片段給出建議, Copilot Labs->Show example code可以幫助生成指定函數的示例代碼, 只需要選中代碼, 點擊Show example code.
Ctrl+Enter, 總是能給人非常多的啟發, 我創建了三個文件, 一個 main.cpp 空文件, 一個 calculator.h 空文件, 在 calculator.cpp 中實現"加"和"減", Copilot 給出了如下建議內容:
- 添加"乘"和"除"的實現
- 在 main 中調用"加減乘除"的實現
- calculator 靜態庫的創建和使用方法
- main 函數的運行結果, 並且結果正確
- calculator.h 頭文件的建議內容
- g++編譯命令
- gtest 用例
- CMakeLists.txt 的內容, 並包含測試
- objdump -d main > main.s 查看彙編代碼, 並顯示了彙編代碼
- ar 查看靜態庫的內容, 並顯示了靜態庫的內容
默認配置下, 每次敲擊Ctrl+Enter展示的內容差異很大, 無法回看上次生成的內容, 如果需要更穩定的生成內容, 可以設置temperature的值[0, 1]. 值越小, 生成的內容越穩定; 值越大, 生成的內容越難以捉摸.
以上建議內容遠超了日常使用的一般建議內容, 可能是由於工程確實過於簡單, 一旦把編譯文件, 頭文件寫全, 建議就不會有這麼多了, 但它仍然常常具有很好的啟發作用.
使用 Copilot 建議的快捷鍵
| Action | Shortcut | Command name |
|---|---|---|
| 接受 inline 建議 | Tab | editor.action.inlineSuggest.commit |
| 忽略建議 | Esc | editor.action.inlineSuggest.hide |
| 顯示下一條 inline 建議 | Alt+] | editor.action.inlineSuggest.showNext |
| 顯示上一條 inline 建議 | Alt+[ | editor.action.inlineSuggest.showPrevious |
| 觸發 inline 建議 | Alt+\ | editor.action.inlineSuggest.trigger |
| 在單獨面板顯示更多建議 | Ctrl+Enter | github.copilot.generate |
調試
一般兩種調試方式, 打印和斷點.
- Copilot 可以幫助自动生成打印代碼, 根據上下文選用格式的打印或日志.
- Copilot 可以幫助修改已有代碼結構, 提供方便的斷點位置. 一些嵌套風格的代碼難以打斷點, Copilot 可以直接修改它們.
Copilot Labs 預置了以下功能:
- Debug, 生成調試代碼, 例如打印, 斷點, 以及其他調試代碼.
檢視
檢視是相互的, 我們和 copilot 需要經常相互檢視, 不要輕信快速生成的代碼.
Copilot Labs 預置了以下功能:
- Fix bug, 直接修復它發現的 bug, 需要先保存好自己的代碼, 仔細檢視 Copilot 的修改.
- Make robust, 使代碼更健壯, Copilot 會發現未處理的情況, 生成改進代碼, 我們應該受其啟發, 想的更縝密一些.
重構
Copilot Labs 預置了以下功能:
- Readable, 提高可讀性, 真正的提高可讀性, 而不是簡單的格式化, 但是要務必小心的檢視 Copilot 的修改.
- Clean, 使代碼更簡潔, 去除多餘的代碼.
- Chunk, 使代碼更易於理解, 將代碼分塊, 將一個大函數分成多個小函數.
文檔
Copilot Labs 預置了以下功能:
- Document, 生成文檔, 例如函數注釋, 以及其他文檔.
使用 Custom 擴展 Copilot 邊界
Custom不太起眼, 但它讓 Copilot 具有無限可能. 我們可以將它理解為一種新的編程語言, 這種編程語言就是英語或者中文.
你可以通過 Custom 輸入
移除注釋代碼
增加乘除的能力
改寫為go
添加三角函數計算
添加微分計算, 中文這裡不好用了, 使用support calculate differential, 在低溫模式時, 沒有靠譜答案, 高溫模式時, 有幾個離譜答案.
在日常工作中, 隨時可以向 Copilot 提出自己的需求, 通過 Custom 能力, 可以讓 Copilot 幫助完成許多想要的操作.
一些例子:
| prompts | 說明 |
|---|---|
generate the cmake file | 生成 cmake 文件 |
generate 10 test cases for tan() | 生成 10 個測試用例 |
format like google style | 格式化代碼 |
考慮邊界情況 | 考慮邊界情況 |
確認釋放內存 | 確認釋放內存 |
Custom 用法充滿想象力, 但有時也不那麼靠譜, 建議使用前保存好代碼, 然後好好檢視它所作的修改.
獲得更專業的建議
給 Copilot 的提示越清晰, 它給的建議越準確, 專業的提示可以獲得更專業的建議. 許多不合適的代碼既不影響代碼編譯, 也不影響業務運行, 但影響可讀性, 可維護性, 擴展性, 復用, 這些特性也非常重要, 如果希望獲得更專業的建議, 我們最好了解一些最佳實踐的英文名稱.
- 首先是使用可被理解的英文, 可以通過看開源項目學習英語.
- 命名約定, 命名是概念最基礎的定義, 好的命名可以避免產生歧義, 避免閱讀者陷入業務細節, 從而提高代碼的可讀性, 也是一種最佳實踐.
- 通常只需要一個合理的變量名, Copilot 就能給出整段的靠譜建議.
- 設計模式列表, 設計模式是一種解決問題的模板, 針對不同問題合理取捨SOLID設計基本原則, 節省方案設計時間, 提高代碼的質量.
- 只需要寫出所需要的模式名稱, Copilot 就能生成完整代碼片段.
- 算法列表, 好的算法是用來解決一類問題的高度智慧結晶, 開發者需自行將具體問題抽象, 將數據抽象後輸入到算法.
- 算法代碼通常是通用的, 只需要寫出算法名稱, Copilot 就能生成算法代碼片段, 並且 Copilot 總是能巧妙的將上下文的數據結構合理運用到算法中.
純文本的建議
| en | zh |
|---|---|
| GitHub Copilot uses the OpenAI Codex to suggest code and entire functions in real-time, right from your editor. | GitHub Copilot 使用 OpenAI Codex 在編輯器中實時提供代碼和整個函數的建議。 |
| Trained on billions of lines of code, GitHub Copilot turns natural language prompts into coding suggestions across dozens of languages. | 通過數十億行代碼的訓練,GitHub Copilot 將自然語言提示轉換為跨語言的編碼建議。 |
| Don’t fly solo. Developers all over the world use GitHub Copilot to code faster, focus on business logic over boilerplate, and do what matters most: building great software. | 不要孤軍奮戰。世界各地的開發人員都在使用 GitHub Copilot 來更快地編碼,專注於業務邏輯而不是樣板代碼,並且做最重要的事情:構建出色的軟件。 |
| Focus on solving bigger problems. Spend less time creating boilerplate and repetitive code patterns, and more time on what matters: building great software. Write a comment describing the logic you want and GitHub Copilot will immediately suggest code to implement the solution. | 專注於解決更大的問題。花更少的時間創建樣板和重復的代碼模式,更多時間在重要的事情上:構建出色的軟件。編寫描述您想要的邏輯的注釋,GitHub Copilot 將立即提供代碼以實現該解決方案。 |
| Get AI-based suggestions, just for you. GitHub Copilot shares recommendations based on the project’s context and style conventions. Quickly cycle through lines of code, complete function suggestions, and decide which to accept, reject, or edit. | 獲得基於 AI 的建議,只為您。GitHub Copilot 根據項目的上下文和風格約定共享建議。快速循環代碼行,完成函數建議,並決定接受,拒絕或編輯哪個。 |
| Code confidently in unfamiliar territory. Whether you’re working in a new language or framework, or just learning to code, GitHub Copilot can help you find your way. Tackle a bug, or learn how to use a new framework without spending most of your time spelunking through the docs or searching the web. | 在不熟悉的領域自信地編碼。無論您是在新的語言或框架中工作,還是剛剛開始學習編碼,GitHub Copilot 都可以幫助您找到自己的方式。解決 bug,或者在不花費大部分時間在文檔或搜索引擎中尋找的情況下學習如何使用新框架。 |
這些翻譯都由 Copilot 生成, 不能確定這些建議是基於模型生成, 還是基於翻譯行為產生. 事實上你在表的en列中寫的任何英語內容, 都可以被 Copilot 翻譯(生成)到zh列中的內容.

設置項
客戶端設置項
| 設置項 | 說明 | 備註 |
|---|---|---|
| temperature | 採樣溫度 | 0.0 - 1.0, 0.0 生成最常見的代碼片段, 1.0 生成最不常見更隨機的代碼片段 |
| length | 生成代碼建議的最大長度 | 默認 500 |
| inlineSuggestCount | 生成行內建議的數量 | 默認 3 |
| listCount | 生成建議的數量 | 默認 10 |
| top_p | 優先展示概率前 N 的建議 | 默認展示全部可能的建議 |
個人賬戶設置有兩項設置, 一個是版權相關, 一個是隱私相關.
- 是否使用開源代碼提供建議, 主要用於規避 Copilot 生成的代碼片段中的版權問題, 避免開源協議限制.
- 是否允許使用個人的代碼片段改進產品, 避免隱私洩露風險.
數據安全
Copilot 的信息收集
- 商用版
- 功能使用信息, 可能包含個人信息
- 搜集代碼片段, 提供建議後立刻丟棄, 不保留任何代碼片段
- 數據共享, GitHub, Microsoft, OpenAI
- 個人版
- 功能使用信息, 可能包含個人信息
- 搜集代碼片段, 提供建議後, 根據個人 telemetry 設置, 保留或丟棄
- 代碼片段包含, 正在編輯的代碼, 關聯文件, IDE 已打開文件, 庫地址, 文件路徑
- 數據共享, GitHub, Microsoft, OpenAI
- 代碼數據保護, 1. 加密. 2. Copilot 團隊相關的 Github/OpenAI 的部分員工可看. 3. 訪問時需基於角色的訪問控制和多因素驗證
- 避免代碼片段被使用(保留或訓練), 1. 設置 2. 聯繫 Copilot 團隊
- 私有代碼是否會被使用? 不會.
- 是否會輸出個人信息(姓名生日等)? 少見, 還在改進.
- 詳細隱私聲明
常見問題
- Copilot 的訓練數據, 來自 Github 的公開庫.
- Copilot 寫的代碼完美嗎? 不一定.
- 可以為新平台寫代碼嗎? 暫時能力有限.
- 如何更好的使用 Copilot? 拆分代碼為小函數, 用自然語言描述函數的功能, 以及輸入輸出, 使用有具體意義的變量名和函數名.
- Copilot 生成的代碼會有 bug 嗎? 當然無法避免.
- Copilot 生成的代碼可以直接使用嗎? 不一定, 有時候需要修改.
- Copilot 生成的代碼可以用於商業項目嗎? 可以.
- Copilot 生成的代碼屬於 Copilot 的知識產權嗎? 不屬於.
- Copilot 是從訓練集里拷貝的代碼嗎? Copilot 不拷貝代碼, 極低概率會出現超過 150 行代碼能匹配到訓練集, 以下兩種情況會出現
- 在上下文信息非常少時
- 是通用問題的解決方案
- 如何避免與公開代碼重復, 設置filter

- 如何正確的使用 Copilot 生成的代碼? 1. 自行測試/檢視生成代碼; 2. 不要在檢視前自動編譯或運行生成的代碼.
- Copilot 是否在每種自然語言都有相同的表現? 最佳表現是英語.
- Copilot 是否會生成冒犯性內容? 已有過濾, 但是不排除可能出現.














