初探 GitHub Copilot
從 Vibe Coding 到 Agentic Development 的程式碼自動生成魔法之旅
變革
從 2023年到2026年,軟體開發有著天翻地覆的改變。AI 驅動的程式碼自動生成從邊緣工具演變成核心開發能力,開發者的角色從手工編碼者轉變為意圖表達者與程式邏輯架構師。
GitHub Copilot 也從簡單的程式碼補全(Code Suggestion)進化到支援完整的應用程式生成框架,而多模態 AI 模型的出現讓自然語言與程式碼之間的溝通變得更加流暢。同時,企業對 AI 輔助開發的採用率從小眾試驗躍升至主流實踐,改變了整個軟體交付的速度與質量標準。
從一個最簡單的情境開始
你可能很熟悉這種工作:改完一段程式,發現下面還有兩段也要跟著改。改完之後,再逐行確認變數沒有用錯、計算結果沒有改變。
這些修改不見得困難,卻需要一直重複。
如果你先示範一處修改,Copilot 就能接著提出其他位置的修改建議,你只要看懂、確認,再決定是否接受,寫程式的過程會有什麼不同?
這次要透過一支簡單的 C# 程式,體驗這種合作方式。你會從編輯器裡的灰色建議文字開始,逐步把重複的計算整理成一個類別,最後執行程式確認結果。
讀完這份教材,你應該能說明三件事:註解如何引導 AI、Copilot 如何協助連續修改,以及為什麼接受建議後仍要驗證。
1. 一個很小的程式,也有值得整理的地方
起始專案只有蘋果的折扣計算:
double applePrice = 35;
double appleDiscount = 0.1;
Console.WriteLine("蘋果折扣後價格是:" + applePrice * (1 - appleDiscount));
接著,你會請 Copilot 協助補上香蕉與榴槤。三種水果的名稱、價格和折扣不同,但都使用同一個公式:
折扣後價格 = 單價 × (1 - 折扣率)
程式可以正常執行。
不過,如果同一條規則散落在許多地方,日後調整時,就得逐一找出並修改,也比較容易漏改。
因此,我們要把共同的資料與計算方式整理到 Fruit 類別中。使用它的程式,只需要呼叫:
apple.GetDiscountedPrice()
這就是這次的重構(Refactoring):調整內部的程式結構,同時保持原本的對外行為。
本例的驗收條件很具體:重構前後,蘋果、香蕉、榴槤的價格仍然分別是 31.5、17、80。
2. 你寫下的註解,也可以是提示詞
在這次練習中,你會直接把需求寫在 Program.cs 裡:
// 一個計算水果折扣的類別,具有水果名稱、單價、折扣三個屬性,和一個計算折扣後價格的方法。
這段註解同時交代了資料與行為:這個類別代表什麼、應該保存哪些資訊,以及要提供什麼功能。
Copilot 可以參考註解與周圍的程式碼,提出後續實作建議。
這裡的關鍵在於把影響結果的資訊說清楚。
這是減少AI幻覺的關鍵,也是 Prompt Engineering 在日常開發中的一種實踐:把你的意圖表達得足夠清楚,讓產生的內容更容易符合需求,也更容易檢查。
3. 從「接著寫」,到「接著改」
影片中會出現兩種值得分開理解的能力。
| 能力 | 它協助的事情 | 本次練習的例子 |
|---|---|---|
| Code Completion/Ghost Text | 在目前游標位置,提出接下來的程式碼 | 根據註解,補上香蕉計算或 Fruit 類別 |
| Next Edit Suggestions(NES) | 根據你正在做的修改,預測下一個要修改的位置與內容 | 蘋果改用 Fruit 後,建議調整其他相關敘述 |
灰色文字的補完,通常按 Tab 就能接受。NES 出現時,有時第一次 Tab 是前往建議的位置,第二次才是接受修改。這些功能的行為與設定可參考 VS Code 官方說明。
在 Lab 中,你會先把蘋果改成使用 Fruit,再觀察 Copilot 是否提出其他位置的修改。這時候,你剛才做出的修改,也提供了接下來要怎麼改的線索。
這種互動不需要先開啟 Agent Mode,也不需要把整個重構任務送進聊天視窗。你可以留在程式碼編輯區,透過註解、輸入和逐次接受建議來完成工作。
Copilot 不一定每次都提出相同的建議,也不保證一次改完所有位置。沒有出現建議時,手動移到下一段、補上程式碼前綴,仍然可以繼續操作。
4. 這樣做,有哪些實際好處?
少一些重複輸入,保留對每次修改的掌握
建立物件、填入屬性、替換計算式,常常都有相似的模式。Copilot 可以協助產生這些內容,讓你把注意力放在變數是否正確、方法是否符合需求。
每次接受的修改範圍相對小,你也比較容易看出「這一段到底改了什麼」。例如,把 applePrice * (1 - appleDiscount) 換成 apple.GetDiscountedPrice(),就能直接比較修改前後的意義。
在熟悉的編輯位置表達需求
對剛開始接觸 AI 輔助開發的學員而言,這是一個容易開始的入口:從一行註解、一段建議和一次執行結果,就能觀察人與 AI 如何合作。
讓相似的修改有機會被一起找出來
你改了第一個用法之後,NES 可能接著提醒其他相關位置。這對同一個檔案中重複出現的模式特別容易觀察,例如本例三種水果的計算。
這能協助你注意到後續修改,但最後仍要自己確認三段程式都已完成,沒有留下舊公式或重複的輸出。
5. 人與 Copilot 各自負責什麼?
| 工作 | 你負責的判斷 | Copilot 可以協助的部分 |
|---|---|---|
| 找到重構方向 | 判斷哪些邏輯重複、是否值得整理 | 依照你提供的方向提出程式碼 |
| 描述類別需求 | 定義資料、折扣意義與預期行為 | 根據註解補上屬性及方法 |
| 修改使用方式 | 檢查每種水果使用的物件與數值 | 補上初始化內容、提出下一處修改建議 |
| 驗證結果 | 決定正確結果、執行並比對 | 產生的內容供你檢查與修正 |
按下 Tab,代表你接受了這次建議。接受之前,至少要能回答:「這段程式做什麼?它用的資料對嗎?」
以本例來說,香蕉物件如果誤用了蘋果的單價,程式仍可能編譯成功;折扣公式寫反,也可能正常執行。可以執行,和符合需求,是兩件需要分別確認的事。
6. 接下來,你會親手完成什麼?
整個 Lab 從一段蘋果計算程式開始,最後完成三種水果共用同一個類別。操作路線如下:
| 階段 | 你要觀察的重點 | Lab 對應位置 |
|---|---|---|
| 取得與執行專案 | 起始程式已經可以算出蘋果價格 | 步驟 1–2 |
| 用註解補上其他水果 | Copilot 如何沿用既有寫法 | 步驟 3–4 |
建立 Fruit 類別 |
提示詞是否把資料與行為說清楚 | 步驟 5 |
| 將原本程式改用類別 | 一處修改如何延伸到其他位置 | 步驟 6–7 |
| 執行與比對結果 | 結構改了,原本的計算行為是否保留 | 步驟 8 |
這個範例刻意保持簡單,方便你把注意力放在互動過程。完成後,可以再想想自己工作中有哪些相似情況:幾段重複的資料轉換、相似的物件初始化,或同一種呼叫方式需要逐一調整。