本文將介紹如何與 GitHub Copilot 現代化代理溝通、教導其偏好、修正錯誤、檢視其工作,以及跨多場次管理升級。
GitHub Copilot 現代化是一個互動協作器,能提問、提出策略、調整你的回饋,並隨時間從你的偏好中學習。 為了獲得最佳效果,請先給客服人員背景資訊。 它越了解你的目標、限制和偏好,表現就越好。
❌ Vague — the agent has to guess
"Upgrade my project"
✅ Specific — the agent knows exactly what you need
"Upgrade the WebAPI project to .NET 10. We need to keep backward
compatibility with our existing REST clients, and we can't change the
public API surface."
小提示
你不必一開始就提供所有背景。 當客服需要更多資訊時,會提出後續問題。
開始交談
- 在 VS Code、Visual Studio 或 Copilot CLI 中開啟 Copilot Chat。
- 從代理選擇器中選擇 GitHub Copilot 現代化代理 for .NET,或根據你的環境輸入正確的代理名稱:在 VS Code 和 Copilot CLI 中使用
@modernize-dotnet,或者在 Visual Studio 中使用@Modernize。 - 用自然語言描述你想達成的目標。
該說什麼呢
自然語言是有效的。 試試這些例子:
| 你想要什麼 | 該說什麼呢 |
|---|---|
| 升級完整解決方案 | 」把我的解決方案升級到.NET 10“ |
| 升級特定技術 | 「幫我從 EF6 升級到 EF Core」 |
| 看看有哪些可用資源 | 「有哪些情境可用?」 |
| 先升級一個專案 | 「先升級 API 專案,再升級共享函式庫」 |
| 了解當前的狀況 | 「我的升級目前狀況如何?」 |
接下來會發生什麼
當你開始對話時,客服會檢查你工作區中已有的升級工作:
- 如果沒有現有工作,經紀人會重新開始,通常會先評估你的解決方案。
- 如果已有進行中的工作,客服會從你停下的地方接續,顯示當前狀態,例如「完成 8 項任務中的 3 項」。
選擇一種流模式
代理支援兩種操作模式,用於控制代理因應你的輸入所暫停的程度。
自動模式
在自動模式下,代理在工作过程中會逐步完成各階段(評估、規劃、執行),且在每個階段不需停下來等待批准。 代理人仍會停留在真正的阻隔因素,或是需要你自己做決定時。
最適合有經驗的使用者,升級簡單,解決方案也較小。
導引模式
在導引模式下,代理會在每個階段邊界暫停,供你檢視:
- 評估後,在制定計畫之前。
- 在規劃之後,在執行任何任務之前。
- 在進行複雜任務分解之前。
- 在做出關鍵決策的時刻,存在多種有效方法。
最適合首次使用者、複雜解決方案,以及想學習流程時使用。
會議中途切換模式
可隨時自由切換模式:
| 切換到 | 該說什麼呢 |
|---|---|
| 導引模式 | 「暫停」 或 「切換到導引模式」 |
| 自動模式 | 「繼續」 或 「請繼續」 |
小提示
第一次升級時先用引導模式。 引導模式是了解代理人如何思考及其做出決策的最佳方式。 等你覺得舒服了再切換到自動模式。
教導代理人
經紀人會向你學習。 代理程式會將你的更正、偏好設定和指示儲存在升級狀態資料夾中的 scenario-instructions.md。 這些偏好會在整個會話中持續存在。
糾正錯誤
當代理人做出你不同意的決定時,請告訴代理人:
You: "Actually, don't use Newtonsoft.Json — we're standardizing on System.Text.Json."
Agent: "Got it. I'll use System.Text.Json for all serialization going forward.
I've saved this as a preference."
代理會更新 scenario-instructions.md ,即使在未來的會話中也不會再做同樣的選擇。
偏好設定
主動告訴代理你希望的做法:
You: "Always use bottom-up strategy for this solution — upgrade leaf projects first."
Agent: "Noted. I'll use a bottom-up upgrade strategy, starting with projects that
have no internal dependencies and working up to the top-level projects."
給出任務特定的指示
有時偏好只適用於特定任務:
You: "For this task, skip the test validation — the tests are broken for a known
reason and we'll fix them separately."
Agent: "Understood. I'll skip test validation for this task only."
代理人所保存的資料
檔案 scenario-instructions.md 被組織成清晰的區塊:
| 章節 | 包含的内容 | 範例 |
|---|---|---|
| 使用者偏好(技術層面) | 套件選擇、框架決策、程式碼模式 | 「使用 System.Text.Json,不要用 Newtonsoft」 |
| 使用者偏好設定(執行風格) | 代理程式的運作方式 | 「永遠使用自下而上的策略」 |
| 關鍵決策日誌 | 重要決策及其理由 | 「選擇EF核心而非Dapper,因為......」 |
| 每個任務的自訂指令 | 專用任務覆寫 | 「跳過任務 3.1 的測試」 |
小提示
也請直接編輯 scenario-instructions.md 。 這是一個 Markdown 檔案。.github/upgrades/{scenarioId}/ 代理人會在每次互動開始時讀取檔案。
在會話中途進行修正
代理程式從容地處理中斷,不會忘記自己所處的位置或正在執行的任務。
暫停與回顧
You: "Wait, stop — let me review that change first."
Agent: "Here's what I was about to do: [describes planned changes].
Would you like me to proceed, or adjust the approach?"
Redirect
You: "Actually, let's do Project B before Project A — it has fewer dependencies."
Agent: "Good call. I'll reorder the tasks and start with Project B."
還原
You: "That last change broke the build. Can we revert it?"
Agent: "I'll revert the last commit (abc1234: 'Migrate auth middleware').
Reverting now."
同時,也可以使用標準的 Git 命令自行還原提交。 代理程式會寫出清晰且具描述性的提交訊息,讓你清楚知道每個提交改變了什麼。
在流程中提出問題
提問不會打亂工作流程:
You: "Why did you choose to migrate the data layer before the API controllers?"
Agent: "The API controllers depend on the data layer interfaces. By migrating
the data layer first, we avoid temporary compilation errors in the
controllers and can validate each layer independently."
審查經紀人的工作
代理人提供多種方式來檢視其工作。
源碼管理
代理建議在另一個分支上進行工作,並在工作的過程中提交變更。 用標準 Git 指令檢視代理的變更:
git log --oneline -10
git diff main..<agent-branch>
工作流程檔案
客服人員會維護多個 .github/upgrades/{scenarioId}/ 檔案,讓你能全面查看:
| File | 它顯示的內容 |
|---|---|
tasks.md |
視覺化的進度總覽,包含所有任務、狀態指標(✅ 完成、 🔄 進行中、⬜待處理),以及進度條 |
execution-log.md |
完整的時間順序稽核,記錄該代理人採取的每一個行動、時間點及發生了什麼事 |
assessment.md |
對解決方案的初步分析,包括相依性、破壞性變更及升級複雜度 |
scenario-instructions.md |
你的偏好設定與代理人的學習型決策 |
tasks/{taskId}/progress-details.md |
各任務細節:遇到的建置錯誤、解決方式、測試結果及決策 |
恢復中斷的工作
關閉聊天室或關閉你的 IDE。 代理人處理這種情況非常流暢。
代理程式會把所有狀態 .github/upgrades/ 都儲存在你的儲存庫裡。 當你開始新對話時,客服會檢查當前狀態,並立即知道:
- 哪一種情境是有效的。
- 哪些任務已完成、正在進行中或待處理。
- 有哪些產物(評估、計畫、任務檔案)存在。
- 是否有任何任務看起來過時( 🔄 卡在上一次會話的狀態)。
過時任務偵測
如果某項任務是從前一個會話進行到一半,代理程式會判斷該任務可能已過時,並提供繼續、重啟或跳過的選項。
小提示
因為 state 在你的 repo 中,所以會隨著程式碼一起移動。 把你的分支推到遠端,再拉到另一台機器上,代理程式就會從你上次停下的地方繼續。
跨多場工作
大型升級,例如包含 20 個專案的解決方案、複雜的框架升級,或多步驟現代化,通常會跨越數天或數週的多次會期。 代理自然地處理多時段工作:
-
持續狀態: 所有資料都在
.github/upgrades/。 記憶體中的狀態不會丟失。 - 會議獨立性: 每個聊天會話都是獨立的。 代理程式每次都會從狀態檔案重建其上下文。
- 跨 IDE 支援: 從 VS Code 開始,Visual Studio 或 Copilot CLI 繼續。 狀態資料夾就是共用合約。
多階段工作的建議
- 提交狀態資料夾。 將
.github/upgrades/推送到你的分支,以備份資料夾並使團隊可見。 - 在每次會談之間複習。 閱讀
tasks.md並execution-log.md回憶上次會談發生了什麼。 - 隨著學習更新偏好設定。 如果你在測試中發現某些東西,應該改變客服的做法,請在下一次會談開始時告訴客服。
尋求幫助
不確定客服能做什麼,或事情進展到什麼程度? 提問:
| 你想知道的 | 該說什麼呢 |
|---|---|
| 可升級情境 | 「你能怎麼辦?」 或者 「有哪些可用的情境?」 |
| 現況進展 | 「目前狀況如何?」 或 「給我看看進度」 |
| 升級計畫 | 「解釋計畫」 或 「帶我完成任務」 |
| 評估細節 | 「給我看評估結果」 或 「評估結果是什麼?」 |
| 可用技能 | 「你有什麼技能?」 或 「列出你的技能」 |
| 一個特定的判決 | 「你為什麼選了X而不是Y?」 |
| 風險或疑慮 | 「這次升級有什麼風險?」 |
有效溝通
你的互動品質直接影響結果的品質。
具體說明範圍
」只將 Data.Access 和 Data.Models 專案升級到 .NET 10“,讓代理程式有明確的焦點。 「全部升級」是 可行的,但客服會自行決定訂單和優先順序。
分享上下文
代理人不會知道你的業務限制,除非你主動分享。
- 「我們升級是因為Azure App 服務 11月要取消.NET 8的支援。」
- 「這是一個高流量的生產服務——API 回應完全沒有行為改變。」
表示約束
告訴代理程式不該做什麼,而不只是該做什麼:
- 「不要改變公開的 API 表面——我們有外部消費者。」
- 「我們還不能升級 Newtonsoft.Json——擁有共享合約的團隊還沒升級。」
- 「別碰舊有報告模組——那是另外重寫的。」
提供意見反應
正面回饋和糾正一樣有幫助,能確認代理人走在正確的道路上:
- 「那個升級看起來很棒——對另一個資料庫專案也用同樣的方法。」
- 「這樣可以,但我們在這個程式碼庫裡比較喜歡用建構器注入而不是屬性注入。」
快速參考
| Situation | 該說什麼呢 |
|---|---|
| 開始新的升級 | 」把我的解決方案升級到.NET 10“ |
| 恢復先前的工作 | 「繼續」 或 「狀況如何?」 |
| 切換到導引模式 | 「暫停」 或 「切換到導引模式」 |
| 切換到自動模式 | 「繼續前進」 或 「不詢問直接繼續」 |
| 糾正決策 | 「其實,用X代替Y。」 |
| 設定偏好 | 「永遠為這個解法執行X」 |
| 審查變更 | 「給我看看你改了什麼」 或查看 Git 日誌 |
| 還原變更 | 「回復上一次更改」 |
| 問問為什麼 | 「你為什麼選擇那種方式?」 |
| 跳過任務 | 「先跳過這個任務。」 |
| 尋求幫助 | 「你能怎麼辦?」 |