Github Copilot生態圈教學手冊

版本:5.0
最後更新:2026 年 5 月 28 日
適用對象:資深工程師 / Tech Lead / Architect
適用於:GitHub Copilot (Free / Student / Pro / Pro+ / Max / Business / Enterprise)
VS Code 版本:1.111+
重大異動:2026 年 6 月 1 日起全面轉換為 AI Credits 用量計費制(Token-based)
Created by:Eric Cheng

目錄

第一章 GitHub Copilot 生態圈全貌總覽

第二章 Copilot 與「資深工程師角色」的正確關係

第三章 Copilot 在實際開發流程中的使用時機

第四章 Copilot Prompt Engineering(重點章節)

第五章 Copilot + Code Review + Testing 最佳實務

第六章 資安、法遵與風險控管

第七章 常見誤用與反模式

第八章 團隊導入與治理建議

第九章 進階應用案例

第十章 總結:如何把 Copilot 變成「資深工程師的放大器」

附錄


第一章 GitHub Copilot 生態圈全貌總覽

1.1 什麼是 GitHub Copilot 生態圈

GitHub Copilot 已從單純的「程式碼自動補全工具」演進為完整的 AI 輔助開發生態系統。截至 2026 年中,Copilot 生態圈涵蓋了從程式碼補全、對話式 AI、自主編碼代理到企業治理的全方位功能。對資深工程師而言,理解其全貌是有效運用的前提。

⚠️ 2026 年 6 月 1 日重大計費變更:GitHub Copilot 將從 Premium Requests(每月次數) 模式,全面切換為 GitHub AI Credits(用量計費) 模式。每月方案費用換算為 AI Credits 額度,使用量依模型及 Token 數計算。程式碼補全(Inline Suggestions)與 Next Edit Suggestions 維持不限次數,不消耗 AI Credits。詳見 1.4 版本與授權模式

graph TB
    subgraph "GitHub Copilot 生態圈"
        A[Copilot Inline<br/>程式碼補全 + NES] --> E[開發者工作流程]
        B[Copilot Chat<br/>Ask / Agent / Plan] --> E
        C[Copilot Code Review<br/>PR 審查] --> E
        D[Copilot CLI Agent] --> E
        F[Cloud Agent<br/>Copilot Coding Agent] --> E
        N[Copilot Spaces<br/>上下文管理] --> E
        O[GitHub Spark<br/>全端應用建構] --> E
        TP[Third-party Agents<br/>Anthropic / OpenAI] --> E
    end
    
    subgraph "GitHub 平台整合"
        E --> G[Issues]
        E --> H[Pull Requests]
        E --> I[Actions / CI/CD]
        E --> J[Code Search]
        E --> P[GitHub Desktop]
        E --> Q[GitHub Mobile]
    end
    
    subgraph "擴展與自訂"
        R[MCP Servers]
        S[Custom Instructions]
        T[Prompt Files]
        U[Custom Agents .agent.md]
        V[多模型選擇]
        W[Agent Skills]
        X[Agent Hooks]
        Y[Agent Plugins]
    end
    
    subgraph "企業治理層"
        K[Policy & Governance]
        L[Security & Compliance]
        M[Audit & Logging]
    end
    
    E --> R
    E --> S
    E --> T
    E --> U
    E --> V
    E --> W
    E --> X
    E --> Y
    E --> K
    K --> L
    L --> M

1.2 生態圈各組件說明

組件功能定位適用場景資深工程師價值
Copilot Inline Suggestions即時程式碼補全日常編碼、實作細節減少 boilerplate,專注設計
Next Edit Suggestions (NES)預測下一個編輯位置並建議補全連續編輯、重構加速連續修改流程
Copilot Chat (Ask Mode)對話式問答、程式碼解釋問題分析、設計討論架構決策輔助、知識傳承
Copilot Chat (Agent Mode)自主完成多步驟任務複雜開發任務、跨檔案修改自動化實作、整合 MCP
Copilot Chat (Plan Mode)制定詳細實作計畫任務規劃、需求分析在動手前確認方案完整性
Local Agent在 VS Code 內互動式執行即時回饋的開發任務日常開發主力
Copilot CLI Agent背景執行的本機代理明確定義的獨立任務用 Git worktree 隔離工作
Cloud Agent (Coding Agent)雲端自主編碼代理從 Issue 自動建立 PR將例行任務交給 Agent 執行
Third-party AgentsAnthropic Claude / OpenAI Codex 等代理使用特定 AI 提供者能力依任務需求選擇最佳代理
Copilot Code ReviewAI 驅動的程式碼審查PR 審查、程式碼品質提升 Review 效率與品質
Copilot PR Summaries自動生成 PR 摘要PR 描述撰寫節省文件撰寫時間
Copilot Spaces組織上下文資訊集中程式碼、文件、規格為特定任務提供精確上下文
Copilot Memory記憶使用者 / repo / session 知識持續開發同一專案提升跨 session 一致性
Custom Instructions自訂回應偏好(always-on / file-based)統一團隊風格確保 AI 輸出符合規範
Prompt Files可重用的 Prompt 範本(Slash Command)標準化工作流程團隊知識共享
Agent Skills可共享的專業能力套件跨工具重用(VS Code / CLI / Cloud)封裝團隊最佳實務
Custom Agents (.agent.md)自訂 AI 角色與工具限制安全審查員、DBA 等角色建立專業化工作流程
Agent HooksAgent 生命週期自動化自動格式化、安全政策、稽核確定性的流程控制
Agent Plugins(Preview)預打包的自訂化套件從市集安裝第三方外掛快速擴展功能
MCP (Model Context Protocol)擴展 Copilot 能力整合外部工具與服務連接企業內部系統
Copilot Integrations將 Cloud Agent 整合至外部平台從 Teams / Slack / Jira / Linear / Azure Boards 觸發 Agent流程自動化、減少上下文切換
Agents Window(Preview)Agent-first 專屬視窗跨專案編排 Agent Sessions以 prompt 思維駅動多專案開發
Remote Agent Sessions遠端執行 Agent在遠端主機運行,隨時隨地監控關上筆電後繼續工作,稍後查看結果
GitHub Spark自然語言建構全端應用快速原型、內部工具快速驗證概念
Copilot in GitHub Desktop自動生成 commit 訊息日常 Git 操作提升 commit 品質

⚠️ Edit Mode 已棄用:自 VS Code v1.110 起,Edit Mode 已正式棄用,將於 v1.125 完全移除。Agent Mode 已涵蓋其功能。

1.3 Copilot 在企業開發流程中的定位

flowchart LR
    subgraph "SSDLC 階段"
        A[需求分析] --> B[設計]
        B --> C[開發]
        C --> D[測試]
        D --> E[部署]
        E --> F[維運]
    end
    
    subgraph "Copilot 介入點"
        A -.->|Chat: 需求釐清| G[Copilot Chat]
        B -.->|Chat: 架構討論| G
        C -.->|Inline: 程式碼生成| H[Copilot Inline + NES]
        C -.->|Agent: 自主開發| I[Agent Mode]
        C -.->|Chat: 重構建議| G
        D -.->|Inline: 測試生成| H
        D -.->|Chat: 測試策略| G
        E -.->|CLI: 部署腳本| J[Copilot CLI Agent]
        F -.->|Chat: 問題診斷| G
    end
    
    subgraph "自動化"
        K[Cloud Agent<br/>Issue 到 PR]
        L[Copilot Code Review<br/>AI 審查]
        M2[Agent Hooks<br/>生命週期自動化]
    end

1.4 版本與授權模式

GitHub Copilot 目前提供六種方案,適用不同規模的使用者。

⚠️ 重大計費變更 (2026/06/01):GitHub 將全面轉換為 GitHub AI Credits 用量計費。月費方案訂閱費換算為「基礎 Credits 額度」,額外提供「彈性配額(Flex Allotment)」,兩者合計為每月可用上限。1 AI Credit = $0.01 USD。Chat、Coding Agent、Spaces、Spark 等均消耗 AI Credits;程式碼補全(Inline Suggestions)與 Next Edit Suggestions 不計費,維持無限使用。詳見官方文件:Usage-based billing for individuals

個人方案(2026/06/01 起 AI Credits 計費)

版本適用對象月費基礎 Credits彈性配額每月合計
Copilot Free所有 GitHub 用戶免費有限 AI Credits 配額2,000 次補全 + 50 次 Chat + AI Credits 配額
Copilot Student在學驗證學生免費同 Pro 級無限補全 + 300 Premium Requests + Premium 模型
Copilot Pro個人開發者$10 USD1,000 Credits500 Credits1,500 Credits / 月
Copilot Pro+AI 進階使用者$39 USD3,900 Credits3,100 Credits7,000 Credits / 月
Copilot Max重度 AI 使用者$100 USD10,000 Credits10,000 Credits20,000 Credits / 月

Copilot Free:提供基礎 AI 輔助體驗,包含每月 2,000 次程式碼補全、50 則 Chat 訊息,以及有限的 AI Credits。僅支援 GPT-4.1、GPT-5 mini、Claude Haiku 4.5、Raptor mini、Goldeneye 等 Included 模型。
Copilot Student:適用於通過 GitHub Education 學生驗證的在學生,功能等同 Pro(含 Cloud Agent),但部分高階模型(如 Claude Opus 系列、GPT-5.3-Codex 手動選擇)受限。
超額付費:AI Credits 耗盡後,可設定額外預算繼續使用($0.01/Credit),不強制中斷。
年費方案注意:現有年費方案不會自動續約。年費訂戶將在續約日前收到通知,可選擇取消並獲得按比例退款,或降級至 Copilot Free。

企業方案

版本適用對象月費(每座位)每月 AI Credits(共池)主要特色
Copilot Business企業/組織(GitHub Free/Team/Enterprise Cloud)$19 USD1,900 Credits / 用戶⁵組織管理、Policy 控制、Coding Agent、Audit Logs
Copilot Enterprise大型企業(GitHub Enterprise Cloud)$39 USD3,900 Credits / 用戶⁵Business 全功能 + GitHub Spark + 第三方 Agent + 組織自訂指令

AI Credits 共池機制(Pooling):企業方案的 AI Credits 以組織(或企業)為單位共享。例如 100 位 Business 用戶,組織共享 190,000 Credits 池。重度使用者可消耗較多額度,輕度使用者自然平衡。新增授權立即增加池額度,移除授權在下個計費週期生效。

🎁 推廣期優惠(2026/06/01 - 2026/09/01):現有 Business 客戶享有每用戶 3,000 Credits/月、Enterprise 客戶享有 7,000 Credits/月的推廣額度。推廣期結束後回到上表標準額度。

💡 企業預算控管:管理員可在四個層級設定預算上限——Enterprise 級、Organization 級、Cost Center 級、User 級。設定 $0 的用戶級預算即可完全停用該用戶的 Copilot 存取權。詳見 Setting up budgets to control spending

可用 AI 模型一覽(2026/05 最新)

依據 GitHub 官方模型與定價頁面 整理。

模型類別FreeStudentProPro+BusinessEnterprise
GPT-4.1 ¹Included
GPT-5 mini ¹Included
GPT-5.2GA
GPT-5.2-CodexGA
GPT-5.3-CodexGA❌²
GPT-5.4GA
GPT-5.4 miniGA
GPT-5.4 nano ³GA
GPT-5.5GA
Claude Haiku 4.5GA
Claude Sonnet 4GA
Claude Sonnet 4.5GA
Claude Sonnet 4.6GA
Claude Opus 4.5GA
Claude Opus 4.6GA
Claude Opus 4.6 (fast mode)Preview
Claude Opus 4.7GA
Gemini 2.5 ProGA
Gemini 3 FlashPreview
Gemini 3.1 ProPreview
Gemini 3.5 FlashGA
Raptor miniPreview
GoldeneyePreview
自動模型選擇

註釋
¹ GPT-4.1 與 GPT-5 mini 為 Included 模型(不額外計費 AI Credits)。
² Student 方案的 GPT-5.3-Codex 不在模型選擇器中,但可透過自動模型選擇使用。
³ GPT-5.4 nano 目前僅限 Codex VS Code 擴充套件(Pro+ 方案),不在 Copilot Chat 中提供。
⁴ Goldeneye 為 GitHub 微調模型,使用 GPT-5.1-Codex 定價,僅限 Free 方案。

Per-Token 定價一覽(每 100 萬 Token,2026/06/01 起生效)

所有 AI 互動均以 Token 消耗換算為 AI Credits(1 AI Credit = $0.01 USD)。

OpenAI 模型

模型輸入 Token快取輸入輸出 Token
GPT-4.1$2.00$0.50$8.00
GPT-5 mini$0.25$0.025$2.00
GPT-5.2 / 5.2-Codex / 5.3-Codex$1.75$0.175$14.00
GPT-5.4$2.50$0.25$15.00
GPT-5.4 mini$0.75$0.075$4.50
GPT-5.4 nano$0.20$0.02$1.25
GPT-5.5$5.00$0.50$30.00

Anthropic 模型(含快取寫入成本)

模型輸入 Token快取輸入快取寫入輸出 Token
Claude Haiku 4.5$1.00$0.10$1.25$5.00
Claude Sonnet 4 / 4.5 / 4.6$3.00$0.30$3.75$15.00
Claude Opus 4.5 / 4.6 / 4.7$5.00$0.50$6.25$25.00

Google 模型

模型輸入 Token快取輸入輸出 Token
Gemini 2.5 Pro$1.25$0.125$10.00
Gemini 3 Flash$0.50$0.05$3.00
Gemini 3.1 Pro$2.00$0.20$12.00
Gemini 3.5 Flash$1.50$0.15$9.00

GitHub 微調模型

模型輸入 Token快取輸入輸出 Token
Raptor mini$0.25$0.025$2.00
Goldeneye$1.25$0.125$10.00

💡 成本估算提示:輕量級問答(GPT-5 mini)每次互動約消耗 0.1-0.5 Credits;複雜的 Agent Mode session(GPT-5.5 / Claude Opus 4.7)可能消耗 50-200+ Credits。善用自動模型選擇可顯著降低成本。

⚠️ 新簽約暫停通知(2026/04/20 起):新的 Copilot Pro、Pro+、Student 個人方案目前暫停新簽約;Copilot Business(GitHub Free/Team 組織)自助簽約亦暫停。現有訂閱不受影響,企業方案可聯繫 GitHub Sales。

💡 自動模型選擇(Auto Model Selection):Copilot 可依任務類型自動挑選最適模型,無需手動切換。輕量問答使用低成本模型,複雜推理任務自動升級至高階模型,有助節省 AI Credits 用量。

⚠️ 企業使用注意:Business/Enterprise 版本承諾不使用您的程式碼訓練模型,這對金融業等受監管產業至關重要。

1.5 AI Credits 計費機制詳解

2026 年 6 月 1 日起,GitHub Copilot 全面從 Premium Requests(固定次數)切換至 AI Credits(Token 用量計費)。資深工程師與企業管理者必須深入理解此機制,以有效管理成本。

1.5.1 AI Credits 運作原理

使用者互動 → 消耗 Token(輸入 + 輸出 + 快取) → 依模型定價換算 → AI Credits 扣除
                                                        1 AI Credit = $0.01 USD

影響消耗量的主要因素:

因素說明成本影響
對話長度與複雜度越長的對話累積越多 Token線性增長
Agentic 功能Agent Mode、Cloud Agent 涉及多次模型呼叫顯著增長(可能 10-100x)
模型選擇高階模型(GPT-5.5、Claude Opus 4.7)成本遠高於輕量模型差距 10-60x
程式碼補全 / NES不消耗 AI Credits,所有付費方案無限使用零成本

1.5.2 Credits 使用優先順序

flowchart LR
    A[基礎 Credits<br/>隨方案訂閱] --> B[彈性配額<br/>額外贈送]
    B --> C{已用完?}
    C -->|否| D[繼續使用]
    C -->|是| E{設定額外預算?}
    E -->|是| F[繼續使用<br/>$0.01/Credit]
    E -->|否| G[等待下月重置]

1.5.3 哪些功能消耗 AI Credits

消耗 AI Credits不消耗 AI Credits
Copilot Chat(所有模式)程式碼補全(Inline Suggestions)
Copilot CLINext Edit Suggestions(NES)
Cloud Agent(Coding Agent)
Copilot Spaces
GitHub Spark
Third-party Agents

1.5.4 Copilot Code Review 的特殊計費

自 2026/06/01 起,Code Review 採用雙重計費:

  1. AI Credits:Token 消耗依模型定價扣除(模型由系統自動選擇,無法指定)
  2. GitHub Actions minutes:Code Review 使用 GitHub-hosted runner 執行,消耗 Actions 分鐘數(self-hosted runner 不計費)

💡 查看用量:可透過 GitHub Actions metrics 篩選 copilot-pull-request-reviewer workflow 檢視 Code Review 用量。

1.5.5 企業成本管控策略

策略做法預期效果
啟用 Auto Model Selection讓 Copilot 自動選擇最適模型節省 30-50% Credits
設定 User-level 預算為每位用戶設定月度上限防止單一用戶過度消耗
推廣輕量模型鼓勵使用 GPT-5 mini、Claude Haiku 4.5 做日常問答單次互動成本降低 90%
限制 Agent Mode 使用場景僅在明確定義的任務中使用 Agent避免失控的多輪 Agent session
監控 Usage Dashboard定期檢視組織用量報表及早發現異常消耗

1.6 Copilot Cloud Agent 整合平台

Copilot Cloud Agent 已支援與多個外部平台整合,讓團隊可以從既有工作流中直接觸發 Agent 任務,減少上下文切換與操作摩擦。

支援的整合平台

平台整合方式適用方案典型情境
Microsoft Teams從 Teams 頻道觸發 Cloud AgentPro, Pro+, Business, Enterprise在討論中直接指派開發任務
Slack從 Slack Workspace 觸發 Cloud AgentPro, Pro+, Business, Enterprise將討論轉化為 PR
Linear從 Linear Issue 觸發 Cloud AgentPro, Pro+, Business, EnterpriseIssue 自動轉為程式碼變更
Azure Boards從 Work Item 觸發 Cloud AgentPro, Pro+, Business, Enterprise將 Azure DevOps 任務自動化
Jira從 Jira Workspace 觸發 Cloud AgentPro, Pro+, Business, Enterprise將 Jira Issue 轉為 PR

整合核心優勢

  • 無縫工作流:從既有工具直接觸發 Agent,無需切換到 GitHub
  • 上下文感知:Agent 會擷取整個討論串或 Issue 內容作為上下文
  • 團隊協作:團隊成員可從共享平台觸發 Agent,結果自動反映於 PR
  • 資料用途透明:整合的上下文會存儲於 Agent 建立的 PR 中,便於稽核

⚠️ 安全提醒:整合平台的討論內容會傳送給 Agent。避免在討論串中包含機敏資訊(API Key、密碼、客戶個資)。

1.7 2025-2026 年新功能重點摘要

以下為近期 Copilot 生態圈的重要更新,資深工程師應特別留意:

功能類別說明影響程度
🔴 AI Credits 用量計費(2026/06 上線)計費從 Premium Requests 改為 GitHub AI Credits,Token 用量計費制🔴 高
AI Credits 共池(企業)計費Business/Enterprise 用戶的 Credits 以組織為單位共享🔴 高
四級預算控管計費Enterprise / Org / Cost Center / User 四層預算上限🔴 高
推廣期優惠額度計費現有企業客戶 2026/06-09 享加倍 Credits(Business 3,000 / Enterprise 7,000)🟡 中
Copilot Max 方案計費$100/月,20,000 Credits,適合重度 AI 使用者🟡 中
Copilot Student 方案計費在學學生免費享 Pro 等級功能🟡 中
自動模型選擇(Auto Model Selection)模型Copilot 自動依任務選擇最適模型,節省 Credits🔴 高
GPT-5.x 系列模型模型GPT-5.2/5.2-Codex/5.3-Codex/5.4/5.4 mini/5.4 nano/5.5 陸續上線🔴 高
Claude 4.x 系列模型模型Claude Sonnet 4/4.5/4.6、Opus 4.5/4.6/4.6 fast/4.7、Haiku 4.5🔴 高
Gemini 3.x 系列模型模型Gemini 3 Flash、3.1 Pro、3.5 Flash🟡 中
Goldeneye(GitHub 微調模型)模型新增 GitHub 自有微調模型,Free 方案專屬🟡 中
Agent Management 面板AgentRepository 內的 Agents 標籤頁,集中管理所有 Agent sessions🔴 高
Agent Sessions 管理Agent多 Session 並行、統一管理列表、Session 交接、即時導向🔴 高
Autopilot(Preview)Agent 權限Agent 全自主執行,自動完成所有工具呼叫🔴 高
Agent 權限層級Agent 權限Default / Bypass Approvals / Autopilot 三層級🔴 高
Cloud Agent (Coding Agent)自主代理可將 GitHub Issue 指派給 Copilot,自動建立 PR🔴 高
Copilot CLI自主代理終端機中的 Copilot Agent,可建立 PR 並與 Cloud Agent 交接🔴 高
Third-party Agents(Preview)自主代理支援 Anthropic Claude / OpenAI Codex 等第三方 Agent(Pro/Pro+/Business/Enterprise)🟡 中
Custom Agents(.agent.md / agents/*.md)自訂在 Repo 或 Org/Enterprise 層級定義專屬 Agent🔴 高
Agent Mode (IDE)Chat 模式在 IDE 中自主決定編輯哪些檔案、執行終端指令🔴 高
Edit Mode 棄用Chat 模式v1.110 起棄用,v1.125 移除,功能由 Agent Mode 取代🟡 中
Plan Mode (IDE)Chat 模式在動手前建立詳細實作計畫,可交接給其他 Agent 執行🟡 中
Agent Hooks(Preview)自動化8 個生命週期事件,確定性自動化與安全政策🔴 高
Agent Skills自訂可跨工具共享的能力套件(開放標準 agentskills.io)🟡 中
Agent Plugins(Preview)自訂從市集安裝預打包的自訂化套件🟡 中
Chat Customizations Editor自訂集中管理所有自訂化(agents / skills / hooks 等)🟡 中
Next Edit Suggestions補全預測下一個編輯位置,主動建議修改🟡 中
Copilot Spaces上下文整合程式碼、文件、規格至 Space,提升回應精準度🟡 中
Copilot Memory(Preview)上下文Repo 層級記憶,Cloud Agent 和 Code Review 可使用🟡 中
MCP 整合擴展透過 Model Context Protocol 連接外部工具與服務🔴 高
Custom Instructions自訂always-on / file-based 兩種模式,Org 層級支援🟡 中
Prompt Files自訂可重用的 .prompt.md 檔案,作為 Slash Command 使用🟡 中
Image SupportChat可在 Chat 中貼圖片(截圖、流程圖)進行分析🟢 低
SubagentsAgent在 Agent Mode 中委派子任務給獨立 Agent🟡 中
GitHub Spark(Preview)應用用自然語言建構與部署全端應用🟡 中
Copilot Chat in Windows Terminal平台在 Windows Terminal 中直接使用 Copilot Chat🟡 中
Copilot Integrations(Teams / Slack / Jira / Linear / Azure Boards)整合從外部平台直接觸發 Cloud Agent,減少上下文切換🔴 高
Agents Window(Preview)平台Agent-first 專屬視窗,跨專案編排 Sessions,可從瀏覽器或手機監控🔴 高
Remote Agent Sessions平台在遠端主機運行 Agent,隨時隨地監控與查看結果🟡 中
Copilot CLI 內建代理(explore / task / research / rubber-duck / code-review)AgentCopilot CLI 內建五個專業化子代理,各有獨立上下文視窗🔴 高
Custom Agent Handoffs自訂Agent 間的引導式工作流程交接,如 Plan → Implementation → Review🔴 高
IDE 跨平台擴展平台JetBrains、Eclipse(Preview)、Xcode(Preview)支援擴展🟡 中
Code Review 消耗 Actions minutes計費2026/06/01 起 Code Review 同時消耗 AI Credits + GitHub Actions 分鐘數🟡 中
/init 指令初始化自動生成 copilot-instructions.md 初始化專案🟡 中
/fork 指令Chat分支對話以探索不同方案🟢 低
AI 生成自訂化自訂/create-prompt/create-agent/create-hook🟡 中
gh skill CLI 指令自訂透過 GitHub CLI 探索並安裝社群 Skills🟡 中

第二章 Copilot 與「資深工程師角色」的正確關係

2.1 思維轉換:從「工具」到「協作夥伴」

資深工程師使用 Copilot 的心態應該是:

❌ 錯誤心態:「讓 AI 幫我寫程式」
✅ 正確心態:「讓 AI 加速我的思考與實作」

角色定位比較

面向傳統開發AI 輔助開發
設計決策工程師主導工程師主導,AI 提供選項
實作細節工程師撰寫AI 建議,工程師審核
品質把關Code ReviewCode Review + AI 輸出審核
知識應用查文件、經驗AI 快速提供,工程師驗證

2.2 資深工程師的不可取代價值

graph TB
    subgraph "AI 擅長"
        A[語法補全]
        B[模式識別]
        C[文件生成]
        D[Boilerplate 程式碼]
    end
    
    subgraph "資深工程師不可取代"
        E[架構決策]
        F[業務邏輯理解]
        G[效能調優策略]
        H[資安風險評估]
        I[技術債務判斷]
        J[團隊指導]
    end
    
    A --> K[協作產出]
    B --> K
    C --> K
    D --> K
    E --> K
    F --> K
    G --> K
    H --> K
    I --> K
    J --> K

2.3 正確的協作模式

模式一:AI 起草,人類精修

// 步驟 1: 提供明確的設計意圖(註解)
// 實作一個 Rate Limiter,使用 Token Bucket 演算法
// 需求:每秒最多 100 個請求,支援 burst 到 150

// 步驟 2: Copilot 生成初版程式碼
// 步驟 3: 資深工程師審核並修正
//   - 檢查 thread-safety
//   - 驗證邊界條件
//   - 確認效能特性

模式二:人類設計,AI 實作

// 資深工程師先定義介面與契約
public interface PaymentProcessor {
    /**
     * 處理付款請求
     * @param request 付款請求,包含金額、幣別、付款方式
     * @return 付款結果,包含交易編號與狀態
     * @throws PaymentException 當付款失敗時拋出
     */
    PaymentResult process(PaymentRequest request) throws PaymentException;
}

// 再讓 Copilot 協助實作具體邏輯

模式三:AI 解釋,人類決策

使用 Copilot Chat 分析既有程式碼:

Prompt: 請分析這段 Legacy Code 的問題,並提供重構建議:
- 識別潛在的效能瓶頸
- 指出可能的 thread-safety 問題
- 建議符合 Clean Architecture 的重構方向

2.4 效率提升的正確期待

任務類型預期效率提升說明
Boilerplate 程式碼60-80%CRUD、DTO、基本驗證
單元測試40-60%測試案例生成,邊界條件需人工補充
文件撰寫50-70%JavaDoc、README、API 文件
複雜業務邏輯10-20%AI 難以理解業務脈絡
架構設計5-15%提供參考,決策仍需人類
效能調優10-20%需要實際 profiling 數據

💡 實務建議:不要期待 Copilot 處理「需要深度業務知識」或「需要跨系統理解」的任務。


第三章 Copilot 在實際開發流程中的使用時機

3.1 開發流程與 Copilot 介入點

flowchart TB
    subgraph "需求階段"
        A1[接收需求] --> A2[需求分析]
        A2 --> A3[技術評估]
    end
    
    subgraph "設計階段"
        B1[架構設計] --> B2[介面定義]
        B2 --> B3[資料模型]
    end
    
    subgraph "開發階段"
        C1[核心邏輯] --> C2[整合開發]
        C2 --> C3[單元測試]
    end
    
    subgraph "審查階段"
        D1[自我審查] --> D2[PR 提交]
        D2 --> D3[Code Review]
    end
    
    A3 --> B1
    B3 --> C1
    C3 --> D1
    
    A2 -.->|Chat: 需求釐清| E[Copilot Chat]
    A3 -.->|Chat: 技術選型討論| E
    B2 -.->|Inline: 介面骨架| F[Copilot Inline]
    B3 -.->|Inline: Entity 生成| F
    C1 -.->|Inline: 實作輔助| F
    C3 -.->|Inline: 測試生成| F
    D1 -.->|Chat: 自我審查| E
    D3 -.->|PR: 審查輔助| G[Copilot for PR]

3.2 各階段使用策略

3.2.1 需求分析階段

適合使用 Copilot Chat 的場景:

## Prompt 範例:需求釐清

我收到以下需求:
「系統需要支援多幣別付款,包含台幣、美金、日圓」

請幫我列出:
1. 可能需要釐清的技術細節
2. 常見的實作考量點
3. 可能的 edge cases

Copilot 回應可能包含:

  • 匯率來源與更新頻率
  • 精確度與四捨五入規則
  • 時區與結算日考量
  • 監管合規要求

⚠️ 注意:Copilot 的建議需要與 BA/PM 確認,AI 不了解您的具體業務脈絡。

3.2.2 設計階段

介面定義輔助:

// 提供明確的設計意圖
/**
 * 多幣別付款處理器
 * 
 * 設計考量:
 * - 支援 TWD, USD, JPY
 * - 匯率由外部服務提供
 * - 需要 idempotency 支援
 * - 需要完整的 audit trail
 */
public interface MultiCurrencyPaymentProcessor {
    // Copilot 會根據註解生成方法簽名
}

3.2.3 開發階段

核心邏輯實作 - 建議流程:

1. 先寫完整的方法簽名與 JavaDoc
2. 寫關鍵的邏輯註解(pseudo code)
3. 讓 Copilot 填充實作細節
4. 逐行審核,特別注意:
   - 邊界條件
   - 錯誤處理
   - 效能考量
   - 資安風險

範例:

/**
 * 計算跨幣別轉換金額
 * 
 * @param amount 原始金額
 * @param fromCurrency 來源幣別
 * @param toCurrency 目標幣別
 * @return 轉換後金額,使用 BigDecimal 確保精確度
 * @throws CurrencyConversionException 當匯率不可用時
 */
public BigDecimal convertCurrency(
        BigDecimal amount, 
        Currency fromCurrency, 
        Currency toCurrency) {
    
    // 1. 驗證輸入參數
    // 2. 取得匯率(從快取或外部服務)
    // 3. 執行轉換計算,注意精確度
    // 4. 記錄 audit log
    // 5. 回傳結果
    
    // Copilot 會根據上述註解生成實作
}

3.2.4 測試階段

單元測試生成策略:

// 在測試類別中,提供明確的測試意圖
class MultiCurrencyPaymentProcessorTest {
    
    // 測試正常轉換情境
    // 測試資料:100 TWD -> USD,匯率 0.033
    @Test
    void shouldConvertTWDtoUSD_whenValidInput() {
        // Copilot 生成測試程式碼
    }
    
    // 測試邊界條件:金額為零
    @Test
    void shouldReturnZero_whenAmountIsZero() {
        // Copilot 生成測試程式碼
    }
    
    // 測試異常情境:匯率服務不可用
    @Test
    void shouldThrowException_whenExchangeRateUnavailable() {
        // Copilot 生成測試程式碼
    }
}

💡 最佳實務:讓 Copilot 生成測試後,手動補充 AI 可能遺漏的 edge cases。

3.3 不同類型任務的使用建議

任務類型建議方式Copilot 角色人工重點
新功能開發Inline + Chat生成骨架、實作細節設計決策、業務邏輯
Bug 修復Chat 分析 + Inline 修正問題診斷、修正建議根因分析、影響評估
重構Chat 討論 + Inline 實作重構方案、程式碼轉換決定重構範圍、驗證
效能優化Chat 分析潛在瓶頸識別Profiling、實測驗證
Legacy 維護Chat 解釋程式碼理解業務脈絡、風險評估

3.4 與現有工具鏈整合

flowchart LR
    subgraph "IDE 環境"
        A[VS Code / IntelliJ]
        B[Copilot Inline + NES]
        C[Copilot Chat<br/>Ask / Agent / Plan]
        M[MCP Servers]
    end
    
    subgraph "版本控制"
        D[Git]
        E[GitHub]
        F[Copilot Code Review]
        N[Copilot Coding Agent]
    end
    
    subgraph "CI/CD"
        G[GitHub Actions]
        H[SonarQube]
        I[Security Scan]
    end
    
    subgraph "上下文管理"
        O[Custom Instructions]
        P[Prompt Files]
        Q[Copilot Spaces]
    end
    
    A --> B
    A --> C
    A --> M
    A --> D
    D --> E
    E --> F
    E --> N
    E --> G
    G --> H
    G --> I
    
    O --> C
    P --> C
    Q --> C
    
    F -.->|AI 審查建議| E
    N -.->|自動建立 PR| E

3.5 實務案例:一個完整的開發循環

## 情境:實作「交易對帳功能」

### Step 1: 需求理解(Chat)
Prompt: 「請幫我分析銀行交易對帳功能的常見設計考量」

### Step 2: 介面設計(Inline)
- 定義 ReconciliationService interface
- 定義 ReconciliationResult DTO

### Step 3: 核心實作(Inline + 人工審核)
- 讓 Copilot 生成對帳邏輯
- 人工確認匹配演算法正確性
- 人工補充異常處理

### Step 4: 測試(Inline + 人工補充)
- Copilot 生成基本測試案例
- 人工補充:大量資料效能測試、並發測試

### Step 5: PR 提交(Copilot for PR)
- 自動生成 PR 摘要
- 審查者參考 Copilot 的 Review 建議

第四章 Copilot Prompt Engineering(重點章節)

4.1 Prompt Engineering 核心觀念

對資深工程師而言,Prompt Engineering 不只是「問問題的技巧」,而是將設計意圖精確傳達給 AI 的能力

graph LR
    A[模糊意圖] -->|Bad Prompt| B[低品質輸出]
    C[精確意圖] -->|Good Prompt| D[高品質輸出]
    
    subgraph "Good Prompt 要素"
        E[Context 脈絡]
        F[Constraint 限制]
        G[Example 範例]
        H[Format 格式]
    end
    
    C --> E
    C --> F
    C --> G
    C --> H

4.2 Inline Completion Prompt 技巧

4.2.1 註解驅動開發(Comment-Driven Development)

原則:註解越精確,生成品質越高

// ❌ Bad Prompt
// 處理付款

// ✅ Good Prompt
// 處理信用卡付款
// 步驟:1. 驗證卡號 2. 呼叫金流 API 3. 記錄交易
// 需要:idempotency key 防止重複扣款
// 例外:CardValidationException, PaymentGatewayException

4.2.2 簽名先行模式

先定義完整的方法簽名,再讓 Copilot 填充實作:

// ✅ 提供完整簽名與 JavaDoc
/**
 * 批次處理交易對帳
 * 
 * @param transactions 待對帳交易清單,不可為 null
 * @param bankStatements 銀行對帳單,不可為 null
 * @param toleranceAmount 容許誤差金額(用於浮點數比較)
 * @return 對帳結果,包含匹配、不匹配、待確認三類
 * @throws ReconciliationException 當對帳過程發生錯誤
 */
public ReconciliationResult reconcile(
        List<Transaction> transactions,
        List<BankStatement> bankStatements,
        BigDecimal toleranceAmount) throws ReconciliationException {
    // Copilot 會根據完整的上下文生成實作
}

4.2.3 分層註解模式

public class OrderService {
    
    // === 訂單建立相關 ===
    
    // 建立新訂單
    // 驗證庫存 -> 計算金額 -> 建立訂單 -> 發送通知
    public Order createOrder(CreateOrderRequest request) {
        // 1. 驗證庫存是否足夠
        
        // 2. 計算訂單金額(含折扣、稅金)
        
        // 3. 建立訂單實體並儲存
        
        // 4. 發送訂單建立通知
        
        // Copilot 會逐步填充每個區塊
    }
}

4.3 Copilot Chat Prompt 技巧

4.3.1 角色設定模式

## Prompt 範例

你是一位資深 Java 架構師,熟悉 Spring Boot、Clean Architecture 和金融系統開發。

請審查以下程式碼,從以下角度提供建議:
1. 架構設計是否符合 Clean Architecture
2. 是否有潛在的 thread-safety 問題
3. 是否符合 OWASP Top 10 安全規範
4. 效能是否有優化空間

[貼上程式碼]

4.3.2 CRISPE 框架

要素說明範例
Capacity角色能力「你是資深 DBA」
Role扮演角色「請以 Code Reviewer 角度」
Insight背景資訊「這是銀行核心系統」
Statement具體任務「請找出 SQL Injection 風險」
Personality回應風格「請條列重點,附程式碼範例」
Experiment嘗試要求「請提供三種解決方案」

完整範例:

## CRISPE Prompt

【角色】你是一位具有 10 年經驗的 Java 效能調優專家
【背景】我們的系統是銀行交易核心,需要處理每秒 1000+ TPS
【任務】請分析以下程式碼的效能瓶頸
【風格】請用條列方式說明,並提供優化後的程式碼
【嘗試】請提供至少 2 種優化方案,並比較優缺點

[程式碼]

4.3.3 多輪對話策略

## 第一輪:問題定義
「我需要設計一個分散式鎖的實作,使用 Redis,請問有哪些設計要點?」

## 第二輪:深入探討
「關於你提到的 Redlock 演算法,請詳細說明實作步驟」

## 第三輪:程式碼生成
「請用 Java + Lettuce 實作,需要支援可重入」

## 第四輪:審查確認
「請檢查這個實作是否有 race condition 風險」

4.4 Bad Prompt vs Good Prompt 對照

案例一:程式碼生成

// ❌ Bad Prompt
// 寫一個 API

// ✅ Good Prompt
/**
 * REST API: 查詢用戶交易紀錄
 * 
 * Endpoint: GET /api/v1/users/{userId}/transactions
 * 
 * 功能需求:
 * - 支援分頁(page, size)
 * - 支援日期區間篩選(startDate, endDate)
 * - 支援交易類型篩選(transactionType)
 * 
 * 安全需求:
 * - 需要 JWT 認證
 * - 只能查詢自己的交易(除非是 ADMIN 角色)
 * 
 * 回應格式:
 * - 成功:200 + Page<TransactionDTO>
 * - 未授權:401
 * - 禁止存取:403
 * - 找不到:404
 */
@GetMapping("/users/{userId}/transactions")
public ResponseEntity<Page<TransactionDTO>> getUserTransactions(
    @PathVariable Long userId,
    @RequestParam(defaultValue = "0") int page,
    @RequestParam(defaultValue = "20") int size,
    @RequestParam(required = false) LocalDate startDate,
    @RequestParam(required = false) LocalDate endDate,
    @RequestParam(required = false) TransactionType transactionType,
    @AuthenticationPrincipal UserDetails currentUser) {
    // Copilot 生成
}

案例二:Code Review

## ❌ Bad Prompt
看一下這段 code 有沒有問題

## ✅ Good Prompt
請以資深 Java 工程師角度審查以下程式碼:

審查重點:
1. 【安全性】是否有 SQL Injection、XSS、CSRF 風險
2. 【效能】是否有 N+1 Query、記憶體洩漏風險
3. 【可維護性】是否符合 SOLID 原則
4. 【錯誤處理】例外處理是否完整

請用以下格式回覆:
- 🔴 嚴重問題(必須修正)
- 🟡 中度問題(建議修正)
- 🟢 改善建議(可選)

[程式碼]

案例三:測試生成

## ❌ Bad Prompt
幫我寫測試

## ✅ Good Prompt
請為以下 Service 方法生成單元測試:

測試框架:JUnit 5 + Mockito
測試策略:
1. Happy Path:正常情境
2. Edge Cases:邊界值(null、空集合、最大值)
3. Error Cases:各種例外情境
4. Security Cases:權限驗證

命名規範:should_[預期結果]_when_[條件]

請確保:
- 每個測試方法只測試一個情境
- 使用 AAA 模式(Arrange-Act-Assert)
- Mock 所有外部依賴

[Service 程式碼]

4.5 進階 Prompt Pattern

4.5.1 Chain of Thought(思維鏈)

請分析這段程式碼的問題,請一步步思考:

1. 首先,說明這段程式碼的功能
2. 接著,分析可能的問題點
3. 然後,解釋每個問題的影響
4. 最後,提供具體的修正建議

[程式碼]

4.5.2 Few-Shot Learning(範例學習)

// 請依照以下範例風格,生成新的驗證方法

// 範例 1:
public void validateEmail(String email) {
    Objects.requireNonNull(email, "Email 不可為 null");
    if (!EMAIL_PATTERN.matcher(email).matches()) {
        throw new ValidationException("Email 格式不正確: " + email);
    }
}

// 範例 2:
public void validatePhoneNumber(String phone) {
    Objects.requireNonNull(phone, "電話不可為 null");
    if (!PHONE_PATTERN.matcher(phone).matches()) {
        throw new ValidationException("電話格式不正確: " + phone);
    }
}

// 請生成:validateTaiwanId(驗證台灣身分證字號)

4.5.3 Persona Pattern(人格模式)

從現在開始,請以「挑剔的資安專家」角度回答:
- 對任何程式碼都要先假設有安全漏洞
- 主動指出可能被攻擊的點
- 提供符合 OWASP 規範的修正建議

[程式碼]

4.6 Prompt Template 庫

以下是資深工程師常用的 Prompt Template:

Template 1:架構審查

## 架構審查 Prompt

【系統背景】
{簡述系統用途與規模}

【審查標的】
{貼上架構圖或程式碼}

【請評估】
1. 是否符合 {Clean Architecture / Hexagonal / etc.}
2. 各層職責是否清晰
3. 依賴方向是否正確
4. 是否有過度設計或設計不足
5. 可測試性評估

【輸出格式】
- 整體評分(1-10)
- 優點列表
- 待改善列表(含優先級)
- 具體修改建議

Template 2:效能分析

## 效能分析 Prompt

【效能需求】
- TPS 要求:{數值}
- 回應時間要求:P99 < {數值}ms
- 資源限制:{記憶體/CPU}

【分析標的】
{程式碼或設計}

【請分析】
1. 時間複雜度
2. 空間複雜度
3. I/O 瓶頸
4. 潛在的 blocking 點
5. 可能的 memory leak

【請提供】
- 優化建議(按影響程度排序)
- 優化後的程式碼
- 預期改善幅度

Template 3:重構建議

## 重構建議 Prompt

【重構原因】
{說明為何要重構}

【限制條件】
- 不可變更 public API
- 需要向後相容
- 時間限制:{工時}

【程式碼】
{Legacy Code}

【請提供】
1. 識別的 Code Smell
2. 建議的重構手法(參考 Refactoring 書籍術語)
3. 重構步驟(可逐步執行,每步可獨立驗證)
4. 重構後的程式碼
5. 風險評估與測試建議

4.7 Copilot Chat 快捷指令與互動方式

4.7.1 Chat 模式與 Agent 類型(VS Code)

⚠️ 重要變更:Edit Mode 自 VS Code v1.110 起已正式棄用,將於 v1.125 完全移除。Agent Mode 已涵蓋其所有功能。

Built-in Agents(內建代理):

Copilot Chat 在 VS Code 中提供三種內建代理,可透過 Chat 面板切換:

內建代理功能最佳使用場景
Agent自主完成多步驟任務,編輯檔案、執行終端指令複雜任務、跨檔案修改、需要執行終端指令
Plan建立結構化實作計畫,可交接給其他 Agent 執行在動手前制定計畫、確認方案完整性
Ask問答式互動,不修改檔案理解程式碼、探索想法、一般性問題

Agent 類型(執行環境):

Agent 類型執行位置適用場景說明
Local Agent本機 VS Code 內互動式開發、即時回饋完整存取 workspace、tools、models
Copilot CLI本機終端機明確定義的獨立任務可建立 PR、與 Cloud Agent 交接 session
Cloud Agent遠端雲端基礎設施團隊協作、PR 導向任務建立分支並開 PR,適合團隊 Review
Third-party Agent第三方提供者使用特定 AI 能力支援 Anthropic Claude、OpenAI Codex 等

💡 Session 交接:可將任務從一個 Agent 類型交接到另一個,完整對話歷史會一併帶過。例如:先用 Local Plan 規劃 → 交接給 Copilot CLI 執行 → 再交接給 Cloud Agent 提交 PR。

Agent 權限層級(v1.111+):

權限層級說明適用情境
Default Approvals使用已設定的核准規則,工具呼叫前需確認日常開發(預設)
Bypass Approvals自動核准所有工具呼叫,自動重試錯誤信任的重複性任務
Autopilot(Preview)全自主執行,自動核准、自動回答問題、持續工作直到完成完全信任的獨立任務

⚠️ 安全警告:Bypass Approvals 和 Autopilot 會跳過手動核准提示,包含檔案編輯、終端指令和外部工具呼叫等破壞性操作。僅在理解安全影響後才使用。

4.7.2 Slash Commands(斜線指令)

指令功能使用場景
/explain解釋程式碼理解 Legacy Code
/fix修正問題快速修 Bug
/tests生成測試補充單元測試
/doc生成文件補充 JavaDoc / JSDoc
/optimize優化建議效能改善
/new建立新專案快速搭建專案骨架
/newNotebook建立新 Notebook資料分析、探索性開發
/search搜尋工作區尋找相關程式碼
/setupTests設定測試框架初始化測試環境
/init初始化 AI 專案設定自動生成 copilot-instructions.md
/fork分支對話從當前對話分支探索不同方案
/hooks設定 Agent Hooks互動式管理 Hook 設定
/create-hookAI 生成 Hook描述需求自動生成 Hook 設定檔
/create-promptAI 生成 Prompt File描述需求自動生成 .prompt.md
/create-instructionAI 生成 Instructions描述需求自動生成指令檔
/create-skillAI 生成 Agent Skill描述需求自動生成 Skill
/create-agentAI 生成 Custom Agent描述需求自動生成 .agent.md
/delegate委派至 Cloud Agent在 Copilot CLI session 中委派任務

4.7.3 Chat Participants(聊天參與者)

使用 @ 前綴來指定特定的上下文提供者:

參與者功能使用範例
@workspace工作區上下文@workspace 專案中有哪些地方使用到 PaymentService?
@vscodeVS Code 操作相關@vscode 如何設定自動格式化?
@terminal終端相關@terminal 上一個指令錯誤是什麼原因?
@githubGitHub 平台技能@github 搜尋 repo 中的安全漏洞相關 Issue

💡 自動推斷(Preview):Copilot 可根據自然語言 prompt 自動推斷應使用哪個 Chat Participant,無需手動指定。

4.7.4 Chat Variables(聊天變數)

使用 # 前綴來附加特定上下文:

變數功能使用範例
#file引用特定檔案請審查 #file:PaymentService.java
#selection引用目前選取的程式碼解釋 #selection 的邏輯
#codebase整個程式庫上下文#codebase 中有哪些相似的模式?
#web搜尋網路@github #web 最新的 Spring Boot 版本是?
#terminalLastCommand上一個終端指令#terminalLastCommand 為什麼失敗?
#terminalSelection終端中選取的文字解釋 #terminalSelection
#debugEventsSnapshotAgent 除錯事件快照#debugEventsSnapshot 分析 token 消耗情況

4.7.5 GitHub Skills(@github 技能)

使用 @github 可存取 GitHub 平台特有的技能:

# 搜尋網路
@github #web What is the latest LTS of Node.js?

# 搜尋程式碼
@github 搜尋 repo 中所有使用 deprecated API 的地方

# 查看可用技能
@github What skills are available?

4.7.6 其他存取方式

方式快捷鍵 (Windows/Linux)說明
Chat View標題列 Copilot 圖示完整聊天面板
Quick ChatCtrl+Shift+Alt+L快速下拉式聊天
Inline ChatCtrl+I在編輯器中直接對話
Smart Actions右鍵 > Copilot上下文選單快速操作
Windows Terminal在 Windows Terminal 中直接使用 Copilot Chat
GitHub Mobile在 GitHub Mobile App 中對話
GitHub.com在 GitHub 網站上使用 Copilot Chat

範例使用:

# 使用 Agent 模式自主完成任務
(選擇 Agent 內建代理後)
請將 UserService 重構為使用 Repository Pattern,
並新增對應的單元測試。

# 使用 Plan 代理制定計畫
(選擇 Plan 內建代理後)
我想為這個專案新增 OAuth2 登入功能,
請幫我制定完整的實作計畫。

# 使用 Ask 代理提問
(選擇 Ask 內建代理後)
這個專案中的 PaymentService 架構設計考量是什麼?

# 使用 /init 初始化專案 AI 設定
/init

# 使用 /fork 分支對話
/fork
讓我試試另一種實作方式...

# 交接至 Cloud Agent 建立 PR
(在 Copilot CLI session 中使用 /delegate)
/delegate 請建立 PR 並請團隊 review

4.8 Custom Instructions 與 Prompt Files

4.8.1 Custom Instructions(自訂指令)

Custom Instructions 讓您可以為 Copilot 提供持久性的上下文偏好,提升回應品質與一致性。支援兩種模式:

Always-on Instructions(始終啟用): 自動附加到所有 Chat 請求。

File-based Instructions(檔案型): 根據檔案路徑模式或描述選擇性套用。

支援層級:

層級檔案說明
Repository.github/copilot-instructions.md專案級指令,自動附加到所有 Chat 問題
File-based.github/*.instructions.md針對特定檔案類型的指令
PersonalVS Code Settings個人偏好設定
OrganizationGitHub Org Settings組織統一規範(Business/Enterprise)

Repository Custom Instructions 範例:

<!-- .github/copilot-instructions.md -->

## 專案規範
- 使用 Java 17 + Spring Boot 3.x
- 遵循 Clean Architecture 分層
- 所有 public method 必須有 JavaDoc
- 使用 MapStruct 做 DTO 轉換
- 日誌使用 @Slf4j
- 例外處理使用自定義 BusinessException

## 程式碼風格
- 方法長度不超過 30 行
- 使用 Optional 而非 null 檢查
- 所有 API 回應使用 ResponseEntity 包裝

## 測試規範
- 使用 JUnit 5 + Mockito
- 測試命名:should_[預期結果]_when_[條件]
- 使用 AAA 模式(Arrange-Act-Assert)

File-based Instructions 範例:

<!-- .github/react-components.instructions.md -->
---
applyTo: "**/*.tsx"
---

## React 組件規範
- 使用 functional component + hooks
- Props 必須定義 TypeScript interface
- 使用 React.memo 優化效能

💡 快速生成:輸入 /init 可自動分析專案並生成 copilot-instructions.md。輸入 /create-instruction 可用 AI 輔助建立新指令檔。

4.8.2 Prompt Files(.prompt.md)

Prompt Files 是可重用的 prompt 範本檔案,存放在專案中,團隊成員可共享使用。在 Chat 中作為 /Slash Command 使用。

建立方式:

<!-- .github/prompts/code-review.prompt.md -->
---
description: "安全導向的 Code Review"
mode: "ask"
tools: []
---

請以資安專家角度審查以下程式碼:

審查重點:
1. 【安全性】OWASP Top 10 風險
2. 【效能】N+1 Query、記憶體洩漏
3. 【可維護性】SOLID 原則

輸出格式:
- 🔴 嚴重(必須修正)
- 🟡 中度(建議修正)
- 🟢 改善(可選)

{#selection}

使用方式: 在 Chat 中輸入 / 可看到可用的 Prompt Files。輸入 /create-prompt 可用 AI 輔助建立新 Prompt File。

4.8.3 Agent Skills(代理技能)

Agent Skills 是可跨工具共享的能力套件,基於 開放標準 agentskills.io。Skills 可在 VS Code、GitHub Copilot CLI 和 GitHub Copilot Coding Agent 之間共用。

支援的 Skill 存放路徑:

層級路徑說明
專案級(主要).github/skills/專案內共享
專案級(備選路徑).claude/skills/.agents/skills/相容層格
個人級~/.copilot/skills/~/.agents/skills/跨專案個人使用
組織/企業級即將支援(Coming soon)組織、企業級統一部署

Skill 結構:

.github/skills/
  security-audit/
    SKILL.md          # 技能描述與指令
    scripts/           # 可選的腳本
    resources/         # 可選的資源檔案

SKILL.md 範例:

---
name: "security-audit"
description: "執行安全審計,檢查 OWASP Top 10 風險"
---

# Security Audit Skill

## 指令
1. 掃描所有 Controller 和 Service 層的輸入驗證
2. 檢查 SQL 查詢是否使用參數化
3. 驗證認證與授權邏輯
4. 輸出結構化的安全報告

💡 快速生成:輸入 /create-skill 可用 AI 輔助建立新 Skill。使用 gh skill CLI 指令可從 GitHub Repository(如 anthropics/skillsgithub/awesome-copilot)探索並安裝社群 Skills。

4.8.4 Custom Agents(Agent Profiles)

Custom Agents 是專屬化的 Copilot Agent 版本,透過 Agent Profile(Markdown 檔案)定義可存取的工具、指令與 MCP Servers。

部署層級:

層級路徑說明
Repo 級.github/agents/AGENT-NAME.md專案內共享
組織/企業級.github-private repo 中的 /agents/AGENT-NAME.md全組織/企業可用

可使用環境:

  • GitHub.com:Cloud Agent 的 Agents 標籤、Issue 指派、PR
  • IDE:VS Code、JetBrains IDEs(Preview)、Eclipse(Preview)、Xcode(Preview)
  • GitHub Copilot CLI

基本範例:

<!-- .github/agents/security-reviewer.md -->
---
name: "Security Reviewer"
description: "專注於安全審查的 AI 代理"
---

你是一位資深資安專家,專注於 OWASP Top 10 風險審查。

## 審查規則
- 所有外部輸入必須驗證
- SQL 查詢必須參數化
- 敏感資料必須加密
- 錯誤訊息不得洩露系統資訊

## 輸出格式
使用嚴重度分級:🔴 Critical / 🟡 Warning / 🟢 Info

包含 MCP Server 的進階範例:

<!-- .github/agents/db-assistant.md -->
---
name: "DB Assistant"
description: "資料庫查詢與模式分析"
mcp-servers:
  my-database:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-postgres"]
    env:
      DATABASE_URL: "postgresql://localhost:5432/mydb"
---

你是資料庫專屬助理,可直接查詢相關資料庫並分析資料模式。

💡 快速生成:輸入 /create-agent 可用 AI 輔助建立新的 Custom Agent。

Custom Agent Frontmatter 屬性完整參考:

屬性說明預設值
nameAgent 顯示名稱必填
descriptionAgent 功能描述必填
tools可使用的工具清單全部
mcp-servers附掛的 MCP Server 定義
handoffs可交接的目標 Agent 與預填 prompt
hooksAgent 專屬的 Hook 定義(需啟用 chat.useCustomAgentHooks
user-invocable是否允許使用者直接在下拉選單中呼叫true
disable-model-invocation是否禁止模型自動路由至此 Agentfalse

⚠️ JetBrains / Eclipse / Xcode 支援狀況:Custom Agents 在這些 IDE 目前為 Public Preview,請先在 VS Code 驗證完整功能再全團隊部署。

💡 .chatmode.md.agent.md 遷移:如果您先前使用 .chatmode.md 格式,VS Code 已將其重新命名為 .agent.md。舊格式仍可使用,但建議遷移至新格式以支援 Handoffs 等新功能。

4.8.5 Agent Hooks(生命週期自動化)

Hooks 讓您在 Agent 生命週期的關鍵節點執行自訂 Shell 指令,提供確定性的自動化控制。

支援的 8 個生命週期事件:

事件觸發時機常見用途
SessionStart新 session 開始初始化資源、注入專案上下文
UserPromptSubmit使用者送出 prompt稽核請求、注入系統上下文
PreToolUseAgent 呼叫工具之前阻擋危險操作、要求核准
PostToolUse工具成功執行之後執行 formatter、記錄結果
PreCompact對話上下文壓縮之前匯出重要上下文、儲存狀態
SubagentStart子代理啟動追蹤巢狀 Agent、初始化資源
SubagentStop子代理完成彙總結果、清理資源
StopAgent session 結束生成報告、清理資源、發送通知

Hook 設定範例:

// .github/hooks/security-policy.json
{
  "hooks": {
    "PreToolUse": [
      {
        "type": "command",
        "command": "./scripts/validate-tool.sh",
        "timeout": 15
      }
    ],
    "PostToolUse": [
      {
        "type": "command",
        "command": "npx prettier --write \"$TOOL_INPUT_FILE_PATH\""
      }
    ]
  }
}

Hook 設定檔位置:

位置路徑說明
Workspace.github/hooks/*.json專案級 Hook
Claude 格式.claude/settings.json相容 Claude Code 格式
User~/.claude/settings.json使用者級 Hook
Custom Agent.agent.md frontmatterAgent 專屬 Hook

💡 互動式管理:輸入 /hooks 可開啟 Hook 設定 UI。輸入 /create-hook 可用 AI 輔助生成 Hook。

Hook 搜尋路徑設定:

VS Code 會從多個位置搜尋 Hook 定義,可透過設定自訂:

// settings.json
{
  "chat.hookFilesLocations": [
    ".github/hooks",
    ".claude"
  ]
}

Agent-Scoped Hooks(Agent 專屬 Hook):

可在 .agent.md 的 frontmatter 中直接定義 Agent 專屬 Hook,僅在該 Agent 執行時觸發:

---
name: "Secure Agent"
description: "安全審查專用 Agent"
hooks:
  PostToolUse:
    - type: command
      command: "npx prettier --write \"$TOOL_INPUT_FILE_PATH\""
  Stop:
    - type: command
      command: "./scripts/generate-report.sh"
---

⚠️ 使用 Agent-Scoped Hooks 需啟用:"chat.useCustomAgentHooks": true

Hook Input / Output 格式:

欄位說明
hook_event_name觸發的事件名稱(如 PreToolUse
tool_name被呼叫的工具名稱(僅適用 Tool 相關事件)
tool_input工具的輸入參數(JSON)
tool_output工具的輸出結果(僅 PostToolUse

Hook Script 可透過 exit code 控制行為:

  • exit 0:允許繼續
  • exit 2HOOK_EXIT_CODE_BLOCK):封鎖操作
  • 其他非零:報告錯誤但不封鎖

跨格式相容性:

格式說明
.github/hooks/*.jsonCopilot 原生格式
.claude/settings.jsonClaude Code 格式,VS Code 可直接讀取
Copilot CLI HooksCLI 也支援相同的 Hook 機制

⚠️ 安全注意:Hook 以與 VS Code 相同的權限執行 Shell 指令。務必審查 Hook 腳本,特別是來自不信任來源的設定。

4.8.6 Agent Plugins(Preview)

Agent Plugins 是預打包的自訂化套件,可從市集安裝。一個 Plugin 可包含 Slash Commands、Skills、Custom Agents、Hooks 和 MCP Servers。

4.8.7 Chat Customizations Editor

VS Code 提供集中化的 UI 管理所有自訂化項目:

  • 開啟方式:Command Palette → Chat: Open Chat Customizations
  • 可瀏覽分類:Agents / Skills / Instructions / Prompts / Hooks / MCP Servers
  • 支援 AI 輔助建立新項目
  • 內建程式碼編輯器

4.8.8 MCP (Model Context Protocol) 整合

MCP 讓 Copilot 可以連接外部工具與服務,大幅擴展 Agent Mode 的能力。

常見 MCP 使用場景:

場景MCP Server 類型說明
資料庫操作Database MCP讓 Agent 直接查詢與操作資料庫
API 測試Postman / REST MCP自動發送與驗證 API 請求
文件搜尋Knowledge Base MCP搜尋內部文件與知識庫
監控整合Observability MCP查詢 logs、metrics、traces
專案管理Jira / Azure DevOps MCP同步 Issue 狀態與更新

VS Code MCP 設定範例:

// .vscode/mcp.json
{
  "servers": {
    "my-database": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://localhost:5432/mydb"
      }
    }
  }
}

⚠️ 安全注意:MCP Server 可存取外部系統,在企業環境中應經過安全審查後才啟用。

4.9 Copilot CLI 內建代理(Built-in Agents)

Copilot CLI 內建數個專業化子代理,各自擁有獨立的上下文視窗,可依任務性質精準分工。

4.9.1 內建代理一覽

代理用途何時使用獨立上下文
general-purpose預設通用代理未指定特定代理時自動使用
explore唯讀程式碼探索理解程式碼架構、追蹤呼叫鏈、查找定義
task自動化任務執行執行多步驟開發任務、批次修改檔案
code-review程式碼審查在本地進行程式碼品質檢查
research深度研究需要大範圍搜尋與分析時使用
rubber-duck思維對話與 Copilot 討論設計決策、釐清問題

4.9.2 使用方式

# 直接指定代理
copilot "使用 explore 代理分析專案架構"
copilot "使用 research 代理研究 OAuth2 PKCE 流程"

# 在代理對話中自動路由子代理
# Copilot CLI 會自動啟動子代理並管理上下文切換

4.9.3 子代理機制

  • 獨立上下文:每個子代理擁有獨立的上下文視窗,不會汙染主對話
  • 自動路由:CLI 的 general-purpose 代理可自動判斷何時啟動子代理
  • 結果彙總:子代理完成後,結果會摘要回傳至主代理

💡 最佳實務:對於大型程式碼庫,優先使用 explore 代理進行唯讀探索,避免在主對話中累積過多上下文。使用 rubber-duck 代理進行設計討論,可避免影響實作中的代理狀態。

4.10 VS Code Agents Window(Preview)

Agents Window 是 VS Code 中全新的 Agent-first 專屬介面,讓使用者以 prompt 思維驅動多專案開發,取代傳統的 file-first 工作模式。

4.10.1 核心概念

flowchart LR
    subgraph "Agents Window"
        A[新增 Session] --> B[選擇 Agent 或 Custom Agent]
        B --> C[輸入 Prompt]
        C --> D[Agent 自主執行]
        D --> E[監控進度 / 審核結果]
    end
    
    subgraph "跨專案管理"
        F[Session 1 - 專案 A] 
        G[Session 2 - 專案 B]
        H[Session 3 - 專案 C]
    end
    
    E --> F
    E --> G
    E --> H

4.10.2 主要能力

功能說明
多專案 Sessions同時管理多個 Agent Session,跨不同專案
Agent 選擇可選擇內建 Agent 或自訂 Custom Agent
即時監控查看 Agent 的執行進度與中間產出
中途導引(Steering)在 Agent 執行中途補充指示或修正方向
結果審核審核 Agent 產出的所有變更,逐一接受或拒絕

4.10.3 Remote Agent Sessions

Remote Agent Sessions 讓 Agent 在遠端主機(如 GitHub Codespace 或自建伺服器)上執行,使用者可從瀏覽器或手機隨時監控。

適用場景:

  • 長時間執行的重構任務——關上筆電後 Agent 繼續工作
  • 需要大量運算資源的任務——利用遠端高規主機
  • 跨時區團隊——下班前啟動 Agent、隔天審核結果

⚠️ 安全提醒:Remote Agent Sessions 在遠端主機以您的權限執行。確保遠端環境符合企業安全政策,並在受控環境(如 Codespace)中運行。

4.11 Custom Agent Handoffs(工作流程交接)

Handoffs 讓 Custom Agent 之間可以進行引導式的順序交接,實現多步驟工作流程的自動化。

4.11.1 Handoffs 機制

flowchart LR
    A[Planning Agent] -->|handoff| B[Implementation Agent]
    B -->|handoff| C[Review Agent]
    C -->|需修正| B
    C -->|通過| D[完成]

4.11.2 設定方式

在 Custom Agent 的 .agent.md 檔案中,透過 handoffs 屬性定義交接對象:

<!-- .github/agents/planning-agent.agent.md -->
---
name: "Planning Agent"
description: "分析需求並產出實作計畫"
handoffs:
  - agent: "implementation-agent"
    prompt: "請根據以下計畫實作:{plan}"
  - agent: "review-agent"
    prompt: "請審查以下變更"
---

你是專案規劃專家。分析需求後產出結構化實作計畫,並交接給實作代理。

4.11.3 進階屬性

屬性說明預設值
user-invocable是否允許使用者直接呼叫此 Agenttrue
disable-model-invocation是否禁止模型自動呼叫此 Agentfalse
handoffs定義可交接的目標 Agent 與預填 prompt

💡 .chatmode.md.agent.md 遷移:VS Code 已將 .chatmode.md 重新命名為 .agent.md。舊格式仍可使用,但建議遷移至新格式以支援 Handoffs 等新功能。

4.11.4 組織級共享

Custom Agent 可在組織級別共享,讓團隊共用標準化的 Agent 定義:

層級設定方式說明
Workspace.github/agents/*.agent.md專案級 Agent,隨 Repo 版控
User~/.github/agents/*.agent.md使用者個人 Agent
Organization.github-private repo 或 VS Code 設定組織共享 Agent

啟用組織級 Agent:

// VS Code settings.json
{
  "github.copilot.chat.organizationCustomAgents.enabled": true
}

4.11.5 Claude Agent 格式相容

VS Code 同時支援 Claude Agent 格式(.claude/agents/*.md),讓已採用 Claude Code 的團隊可平滑過渡:

<!-- .claude/agents/my-agent.md -->
---
name: "My Agent"
description: "Claude-style agent definition"
---

Agent instructions here...

💡 跨格式相容:VS Code 會同時掃描 .github/agents/.claude/agents/ 兩個目錄,無需遷移既有 Claude Agent 定義。

4.12 Copilot Memory 深入指南

Copilot Memory 讓 Copilot 能記憶您的偏好與專案慣例,提供更一致的個人化體驗。

4.12.1 Memory 架構

flowchart TB
    subgraph "Memory 類型"
        A[Repository-Level Facts<br/>倉庫層級事實]
        B[User-Level Preferences<br/>使用者層級偏好<br/>Pro / Pro+ 限定]
    end
    
    subgraph "適用功能"
        C[Cloud Agent]
        D[Code Review]
        E[Copilot CLI]
        F[Chat / Agent Mode]
    end
    
    A --> C
    A --> D
    A --> E
    B --> C
    B --> F

4.12.2 Memory 特性

特性說明
儲存範圍Per-user(非 per-repo),各使用者的 Memory 獨立
引用驗證Repository-level facts 附帶 citations,系統會驗證引用來源
自動清除28 天未使用的 Memory 項目自動刪除
手動管理可在 GitHub Settings → Copilot → Memory 中檢視、編輯、刪除
企業控制Enterprise / Organization 管理員預設關閉,需明確啟用
支援平台GitHub.com、VS Code、Copilot CLI

4.12.3 Memory 的新增方式

# 對話中直接告知 Copilot
"請記住:這個專案使用 4 格縮排、所有 API 回應使用 snake_case"

# Copilot 會確認並儲存
"好的,我已記住以下偏好:
- 使用 4 格縮排
- API 回應使用 snake_case"

4.12.4 企業環境建議

  • 啟用前評估:在 Organization 層級啟用前,評估 Memory 中可能包含的敏感資訊
  • 定期審查:團隊成員應定期檢視自己的 Memory 內容
  • 結合 Custom Instructions:Memory 適合個人偏好;團隊標準應使用 .github/copilot-instructions.md
  • Code Review 整合:Memory 讓 Code Review 更了解專案慣例,減少誤報

⚠️ 隱私注意:Memory 內容會用於生成回應。避免在 Memory 中儲存密碼、API Key 等機敏資訊。


第五章 Copilot + Code Review + Testing 最佳實務

5.1 Copilot 與 Code Review 的整合

5.1.1 Copilot Code Review 功能概覽

Copilot Code Review 已大幅升級,不僅支援 PR 審查,還支援 IDE 內的即時審查:

flowchart LR
    subgraph "PR 建立"
        A[開發者提交 PR] --> B[Copilot 自動生成摘要]
        B --> C[Copilot 分析變更]
    end
    
    subgraph "Code Review"
        C --> D[Copilot Code Review<br/>AI 審查建議]
        D --> E[人工 Reviewer 審查]
        E --> F{決策}
    end
    
    subgraph "IDE Review"
        G[選取程式碼] --> H[Review Selection<br/>所有方案可用]
    end
    
    F -->|需修改| I[開發者修正]
    F -->|通過| J[Merge]
    I --> A

Copilot Code Review 的兩種使用方式:

方式說明可用方案
PR Code Review在 GitHub PR 頁面請求 Copilot 審查Pro, Pro+, Business, Enterprise
Review Selection在 VS Code 中選取程式碼進行局部審查所有方案(含 Free)

⚠️ Code Review 計費變更(2026/06/01 起):PR Code Review 採用雙重計費——AI Credits(Token 消耗)加上 GitHub Actions minutes(GitHub-hosted runner)。模型由系統自動選擇,per-token 成本可能因次而異。建議在 Actions metrics 中追蹤 copilot-pull-request-reviewer workflow 的用量。

💡 新功能 - Copilot Memory:Copilot 可記憶 repo 的慣例與知識,讓 Code Review 建議更符合專案風格。

5.1.2 使用 Copilot 輔助 Code Review

Step 1:讓 Copilot 生成 PR 摘要

## Copilot 自動生成的 PR 摘要範例

### Summary
This PR implements the multi-currency payment feature with the following changes:

### Changes
- Added `CurrencyConverter` service for exchange rate handling
- Implemented `PaymentProcessor` with support for TWD, USD, JPY
- Added idempotency support to prevent duplicate charges

### Testing
- Added unit tests covering normal flow and edge cases
- Integration tests with mock payment gateway

Step 2:使用 Copilot Chat 深入分析

## Prompt:PR 安全審查

請以資安專家角度審查這個 PR 的變更:

重點檢查:
1. 是否有 SQL Injection 風險
2. 是否有 Sensitive Data Exposure
3. 輸入驗證是否完整
4. 是否有適當的 Error Handling(不洩露系統資訊)

@workspace #file:PaymentProcessor.java #file:CurrencyConverter.java

5.1.3 Code Review Checklist(結合 Copilot)

審查項目Copilot 輔助方式人工重點
功能正確性Chat: 解釋邏輯業務邏輯驗證
程式碼品質Chat: 識別 Code Smell架構一致性
效能Chat: 複雜度分析實際負載評估
安全性Chat: 漏洞掃描業務風險評估
測試覆蓋Inline: 補充測試測試策略審查
文件完整Inline: 補充 JavaDoc文件準確性

5.2 Copilot 與 Testing 的整合

5.2.1 測試金字塔與 Copilot 角色

graph TB
    subgraph "測試金字塔"
        A[E2E Tests<br/>少量] 
        B[Integration Tests<br/>適量]
        C[Unit Tests<br/>大量]
    end
    
    subgraph "Copilot 效益"
        D[低效益<br/>需大量上下文]
        E[中效益<br/>可生成骨架]
        F[高效益<br/>快速生成]
    end
    
    A --- D
    B --- E
    C --- F

5.2.2 單元測試生成最佳實務

策略一:Test-Driven Prompting

// 先寫測試意圖,讓 Copilot 生成測試程式碼
class PaymentProcessorTest {
    
    @Nested
    @DisplayName("正常付款流程")
    class NormalPaymentFlow {
        
        // 測試:有效信用卡應該成功扣款
        // Given: 有效卡號、足夠餘額
        // When: 執行付款
        // Then: 回傳成功結果,包含交易編號
        @Test
        void shouldProcessPayment_whenValidCreditCard() {
            // Copilot 生成 AAA 結構的測試
        }
    }
    
    @Nested
    @DisplayName("異常情境")
    class ExceptionScenarios {
        
        // 測試:卡號無效應拋出 CardValidationException
        @Test
        void shouldThrowCardValidationException_whenInvalidCardNumber() {
            // Copilot 生成
        }
        
        // 測試:餘額不足應拋出 InsufficientFundsException
        @Test
        void shouldThrowInsufficientFundsException_whenBalanceNotEnough() {
            // Copilot 生成
        }
    }
}

策略二:邊界值自動補充

## Prompt:邊界測試生成

請為以下方法生成邊界值測試:

方法簽名:
public BigDecimal calculateDiscount(BigDecimal amount, int quantity)

請涵蓋:
1. amount = 0, amount = MAX_VALUE
2. quantity = 0, quantity = 1, quantity = MAX_INT
3. amount 為 null
4. 負數情境

測試框架:JUnit 5 + AssertJ

5.2.3 測試程式碼品質檢查

使用 Copilot Chat 審查測試品質:

## Prompt:測試品質審查

請審查以下測試程式碼的品質:

檢查項目:
1. 測試是否獨立(不依賴執行順序)
2. 測試命名是否清晰描述測試意圖
3. 是否有適當的 Arrange-Act-Assert 結構
4. Mock 使用是否恰當
5. 是否有遺漏的測試情境

[測試程式碼]

5.3 CI/CD 整合建議

flowchart TB
    subgraph "開發階段"
        A[Local Development] --> B[Copilot Inline]
        B --> C[Pre-commit Hook]
    end
    
    subgraph "CI Pipeline"
        C --> D[Build]
        D --> E[Unit Tests]
        E --> F[Integration Tests]
        F --> G[Security Scan]
        G --> H[Code Quality]
    end
    
    subgraph "PR Review"
        H --> I[Copilot PR Summary]
        I --> J[Copilot Review Suggestions]
        J --> K[Human Review]
    end
    
    K -->|Approved| L[Merge to Main]
    K -->|Changes Requested| A

5.4 實務案例:完整的測試策略

## 案例:交易對帳服務測試策略

### 1. 單元測試(Copilot 高效輔助)
- ReconciliationEngine 核心邏輯
- MatchingAlgorithm 匹配演算法
- AmountComparator 金額比較(含容差)

### 2. 整合測試(Copilot 中度輔助)
- ReconciliationService + Database
- ReconciliationService + External API

### 3. E2E 測試(Copilot 低度輔助,需人工設計)
- 完整對帳流程
- 異常恢復測試

### Copilot 使用建議
- 單元測試:大量使用 Copilot 生成
- 整合測試:使用 Copilot 生成骨架,人工補充設定
- E2E 測試:人工設計場景,Copilot 輔助實作

第六章 資安、法遵與風險控管

6.1 Copilot 的資安風險概覽

graph TB
    subgraph "輸入風險"
        A[機敏程式碼外洩]
        B[Prompt Injection]
    end
    
    subgraph "輸出風險"
        C[生成不安全程式碼]
        D[著作權侵權風險]
        E[機敏資訊洩露]
    end
    
    subgraph "流程風險"
        F[過度信任 AI]
        G[Review 不足]
        H[稽核軌跡缺失]
    end
    
    A --> I[組織風險]
    B --> I
    C --> I
    D --> I
    E --> I
    F --> I
    G --> I
    H --> I

6.2 常見安全漏洞與防範

6.2.1 SQL Injection

// ❌ Copilot 可能生成的不安全程式碼
public User findByUsername(String username) {
    String sql = "SELECT * FROM users WHERE username = '" + username + "'";
    return jdbcTemplate.queryForObject(sql, userRowMapper);
}

// ✅ 應該修正為
public User findByUsername(String username) {
    String sql = "SELECT * FROM users WHERE username = ?";
    return jdbcTemplate.queryForObject(sql, userRowMapper, username);
}

審查要點:

  • 任何 SQL 字串拼接都要警覺
  • 使用 PreparedStatement 或 JPA
  • 啟用 SQL 參數化檢查工具

6.2.2 XSS (Cross-Site Scripting)

// ❌ 不安全
@GetMapping("/user/{name}")
public String greeting(@PathVariable String name) {
    return "<h1>Hello, " + name + "</h1>";
}

// ✅ 安全
@GetMapping("/user/{name}")
public String greeting(@PathVariable String name) {
    return "<h1>Hello, " + HtmlUtils.htmlEscape(name) + "</h1>";
}

6.2.3 敏感資訊洩露

// ❌ Copilot 可能在 log 中洩露敏感資訊
logger.info("Processing payment for card: " + cardNumber);

// ✅ 應該遮罩
logger.info("Processing payment for card: " + maskCardNumber(cardNumber));

private String maskCardNumber(String cardNumber) {
    return "****-****-****-" + cardNumber.substring(cardNumber.length() - 4);
}

6.3 Copilot 生成程式碼的審查清單

審查項目檢查重點風險等級
輸入驗證是否驗證所有外部輸入🔴 高
SQL 查詢是否使用參數化查詢🔴 高
認證授權是否正確檢查權限🔴 高
錯誤處理是否洩露系統資訊🟡 中
日誌記錄是否記錄敏感資訊🟡 中
加密處理是否使用安全演算法🔴 高
依賴引用是否引入不安全依賴🟡 中

6.4 法遵考量

6.4.1 著作權風險

graph LR
    A[Copilot 生成程式碼] --> B{是否包含<br/>受著作權保護<br/>的程式碼?}
    B -->|可能| C[法律風險]
    B -->|否| D[可安全使用]
    
    C --> E[建議措施]
    E --> F[啟用 Duplicate Detection]
    E --> G[人工審查相似度高的建議]
    E --> H[保留程式碼來源紀錄]

建議設定:

// VS Code settings.json
{
  "github.copilot.advanced": {
    "debug.filter.duplication": true
  }
}

💡 Block Suggestions Matching Public Code:所有 Copilot 方案都支援此功能,可在設定中啟用,阻擋與公開程式碼高度相似的建議。

6.4.2 資料保護合規

法規相關要求Copilot 使用注意
個資法個資處理需有法律依據不可將客戶個資貼入 Prompt
GDPR資料最小化原則不可傳輸歐盟居民資料
金融監理資料不得外流使用 Enterprise 版本
內部稽核保留軌跡記錄 Copilot 使用情況

6.5 企業級安全設定

6.5.1 組織層級設定

GitHub 提供完整的企業治理功能,管理員可透過 Policy Management 控制:

# GitHub Organization / Enterprise 設定項目
copilot_policies:
  # 功能啟用控制
  copilot_chat_in_ide: enabled
  copilot_code_review: enabled
  copilot_coding_agent: enabled
  copilot_cli: enabled
  
  # Agent Hooks / Skills 控制
  agent_hooks: enabled
  agent_skills: enabled
  agent_plugins: disabled  # Preview 功能,建議先停用
  
  # 安全設定
  block_suggestions_matching_public_code: enabled
  editor_preview_features: enabled
  
  # 內容排除(Content Exclusion)
  content_exclusion:
    - "**/*.env"
    - "**/*.pem"
    - "**/*.key"
    - "**/secrets/**"
    - "**/config/credentials/**"
  
  # Audit Logs 自動啟用(Business/Enterprise)
  audit_logging: enabled

管理員功能(Business/Enterprise):

功能說明
Policy Management控制哪些 Copilot 功能可使用
Access Management指定哪些組織成員可使用 Copilot
Content Exclusion排除敏感檔案不被 Copilot 存取
Audit Logs追蹤 Copilot 使用行為
Usage Data檢視使用量數據與採用率
Organization Custom Instructions統一組織級的 Copilot 行為規範

6.5.2 開發者工作站設定

// VS Code settings.json - 企業建議設定
{
  // Copilot 功能控制
  "github.copilot.enable": {
    "*": true,
    "**/*.env": false,
    "**/*.pem": false,
    "**/*.key": false,
    "**/secrets/**": false,
    "plaintext": false,
    "markdown": true
  },
  
  // Chat 相關設定
  "github.copilot.chat.localeOverride": "zh-TW",
  
  // 排除敏感內容(搭配 .gitignore)
  "files.exclude": {
    "**/.env": true,
    "**/secrets": true
  }
}

💡 Content Exclusion(組織級):Business/Enterprise 管理員可在 GitHub 組織設定中排除特定檔案路徑,被排除的檔案不會傳送至 Copilot 服務。這比個人設定更安全,因為是強制生效的。

6.6 Copilot 在 SSDLC 中的定位

flowchart LR
    subgraph "SSDLC 階段"
        A[需求] --> B[設計]
        B --> C[開發]
        C --> D[測試]
        D --> E[部署]
        E --> F[維運]
    end
    
    subgraph "安全活動"
        A1[威脅建模]
        B1[安全設計審查]
        C1[安全編碼]
        D1[安全測試]
        E1[安全部署]
        F1[安全監控]
    end
    
    A --> A1
    B --> B1
    C --> C1
    D --> D1
    E --> E1
    F --> F1
    
    subgraph "Copilot 角色"
        G[Chat: 威脅識別輔助]
        H[Chat: 安全設計建議]
        I[Inline: 安全程式碼生成]
        J[Inline: 安全測試案例]
        K[CLI: 安全腳本]
        L[Chat: 事件分析]
    end
    
    A1 -.-> G
    B1 -.-> H
    C1 -.-> I
    D1 -.-> J
    E1 -.-> K
    F1 -.-> L

6.7 稽核與追蹤

GitHub 平台提供的稽核功能(Business/Enterprise):

功能說明
Audit Logs記錄所有 Copilot 相關事件,包含啟用/停用、Policy 變更等
Usage Data使用者活動數據,包含 suggestion 接受率、chat 使用量
License Usage授權使用狀況,識別未使用的座位

建議在關鍵程式碼加入 Copilot 輔助標記:

// 建議在關鍵程式碼加入 Copilot 輔助標記
/**
 * 匯率轉換服務
 * 
 * @author developer-name
 * @created 2026-01-22
 * @ai-assisted 此類別的基本架構由 Copilot 輔助生成,
 *              核心邏輯經人工審查與修改
 * @security-review PASSED - 2026-01-22 by security-team
 */
@Service
public class ExchangeRateService {
    // ...
}

第七章 常見誤用與反模式

7.1 Anti-Pattern 總覽

graph TB
    subgraph "認知誤區"
        A[盲目信任 AI]
        B[取代思考]
        C[忽略審查]
    end
    
    subgraph "使用誤區"
        D[Prompt 過於模糊]
        E[一次給太多任務]
        F[不提供上下文]
    end
    
    subgraph "流程誤區"
        G[跳過 Code Review]
        H[不寫測試]
        I[不做安全檢查]
    end
    
    A --> J[低品質程式碼]
    B --> J
    C --> J
    D --> J
    E --> J
    F --> J
    G --> K[生產問題]
    H --> K
    I --> K

7.2 Anti-Pattern 詳解

7.2.1 盲目信任 AI(Blind Trust)

症狀:

// Copilot 建議什麼就接受什麼,不經思考
// 按 Tab 鍵的速度比思考還快

危害:

  • 引入潛在 Bug
  • 產生不安全程式碼
  • 效能問題被忽略

正確做法:

✅ 每次接受建議前先問自己:
1. 這段程式碼做了什麼?
2. 有沒有邊界條件沒處理?
3. 有沒有安全風險?
4. 效能是否可接受?

7.2.2 取代思考(Thought Replacement)

症狀:

❌ 直接問 Copilot:「怎麼設計這個系統?」
❌ 期待 Copilot 做所有架構決策

正確做法:

✅ 先自己思考設計方案
✅ 使用 Copilot 驗證或比較方案
✅ 讓 Copilot 處理實作細節,自己負責設計

7.2.3 Prompt 過於模糊(Vague Prompting)

Bad Example:

// ❌ 模糊的 Prompt
// 處理資料

// ❌ 缺乏上下文
// 寫一個 function

Good Example:

// ✅ 明確的 Prompt
/**
 * 處理銀行交易對帳資料
 * 
 * 輸入:交易清單(Transaction[])+ 銀行對帳單(BankStatement[])
 * 輸出:對帳結果(包含:匹配成功、匹配失敗、待確認)
 * 規則:
 *   - 金額相同且日期在 3 天內視為匹配
 *   - 金額差異在 0.01 以內視為匹配(處理浮點誤差)
 *   - 其餘視為待確認
 */
public ReconciliationResult reconcile(...) {

7.2.4 一次給太多任務(Task Overload)

Bad Example:

❌ 請幫我設計一個完整的電商系統,包含:
- 用戶管理
- 商品管理
- 訂單管理
- 付款系統
- 物流追蹤
- 推薦引擎

Good Example:

✅ 分步驟進行:
Step 1: 先討論整體架構
Step 2: 設計用戶管理模組介面
Step 3: 實作用戶管理核心邏輯
Step 4: 為用戶管理寫測試
...依此類推

7.2.5 忽略程式碼上下文(Context Ignorance)

Bad Example:

// ❌ 在不提供現有程式碼風格的情況下請求生成
// 新增一個 Service

// 結果:生成的程式碼風格與專案不一致

Good Example:

// ✅ 提供上下文
// 請參考現有的 UserService 風格,新增 OrderService
// 專案使用:
// - Spring Boot 3.x
// - MapStruct 做 DTO 轉換
// - 使用 @Transactional 管理交易
// - 日誌使用 @Slf4j

7.3 Copilot 不適合做的事情

類別不適合的任務原因
架構設計系統架構決策缺乏業務脈絡理解
效能調優確定瓶頸位置需要實際 Profiling 數據
安全審計作為唯一安全檢查可能漏掉細微漏洞
業務邏輯複雜業務規則不理解業務 Domain
遺留系統完整理解 Legacy缺乏歷史脈絡
合規判斷法規遵循決策法規變動快,AI 可能過時

7.4 常見錯誤案例分析

案例一:複製貼上症候群

// ❌ 錯誤:直接複製 Copilot 建議的 catch block
try {
    // ...
} catch (Exception e) {
    e.printStackTrace();  // Copilot 常見的偷懶寫法
}

// ✅ 正確:審查後修正
try {
    // ...
} catch (BusinessException e) {
    log.error("Business error occurred: {}", e.getMessage());
    throw e;  // 重新拋出讓上層處理
} catch (Exception e) {
    log.error("Unexpected error", e);
    throw new SystemException("System error", e);
}

案例二:效能陷阱

// ❌ Copilot 可能生成的低效程式碼
public List<User> findActiveUsers(List<User> users) {
    List<User> result = new ArrayList<>();
    for (User user : users) {
        if (userRepository.isActive(user.getId())) {  // N+1 問題!
            result.add(user);
        }
    }
    return result;
}

// ✅ 應該批次處理
public List<User> findActiveUsers(List<User> users) {
    List<Long> userIds = users.stream()
        .map(User::getId)
        .collect(Collectors.toList());
    Set<Long> activeIds = userRepository.findActiveUserIds(userIds);
    return users.stream()
        .filter(u -> activeIds.contains(u.getId()))
        .collect(Collectors.toList());
}

案例三:安全漏洞

// ❌ Copilot 可能生成的不安全程式碼
@GetMapping("/download")
public void downloadFile(@RequestParam String filename, HttpServletResponse response) {
    File file = new File("/uploads/" + filename);  // Path Traversal 風險!
    // ...
}

// ✅ 應該驗證路徑
@GetMapping("/download")
public void downloadFile(@RequestParam String filename, HttpServletResponse response) {
    // 驗證檔名不包含路徑穿越字元
    if (filename.contains("..") || filename.contains("/") || filename.contains("\\")) {
        throw new SecurityException("Invalid filename");
    }
    
    Path basePath = Paths.get("/uploads").toRealPath();
    Path filePath = basePath.resolve(filename).normalize();
    
    // 確認檔案在允許的目錄內
    if (!filePath.startsWith(basePath)) {
        throw new SecurityException("Access denied");
    }
    // ...
}

7.5 自我檢查清單

在接受 Copilot 建議前,請確認:

□ 我理解這段程式碼在做什麼
□ 我檢查過邊界條件
□ 我確認過沒有安全風險
□ 程式碼風格與專案一致
□ 例外處理適當
□ 效能可接受
□ 有對應的測試

第八章 團隊導入與治理建議

8.1 導入成熟度模型

graph LR
    subgraph "Level 1: 探索期"
        A[個人嘗試]
        B[非正式使用]
    end
    
    subgraph "Level 2: 試行期"
        C[團隊試點]
        D[建立初步規範]
    end
    
    subgraph "Level 3: 擴展期"
        E[全組織推廣]
        F[完善治理機制]
    end
    
    subgraph "Level 4: 優化期"
        G[持續改善]
        H[效益量化]
    end
    
    A --> B
    B --> C
    C --> D
    D --> E
    E --> F
    F --> G
    G --> H

8.2 各階段導入建議

Level 1: 探索期(1-2 週)

活動目的產出
選定 3-5 位先行者收集第一手經驗使用心得報告
安裝與基本教學確保環境就緒安裝指南
自由探索了解工具能力邊界案例收集

Level 2: 試行期(2-4 週)

活動目的產出
建立使用規範草案統一使用方式規範文件 v0.1
定義適用場景明確使用邊界場景清單
建立 Prompt 範本提升效率Prompt Library
定期分享會知識傳承會議紀錄

Level 3: 擴展期(1-2 個月)

活動目的產出
全團隊教育訓練普及使用培訓教材
正式化規範治理機制規範文件 v1.0
整合 CI/CD流程自動化Pipeline 設定
建立 Review 機制品質把關Review Checklist

Level 4: 優化期(持續)

活動目的產出
效益量化證明 ROI指標報告
規範更新持續改善規範文件 vN
經驗分享組織學習案例庫
工具演進追蹤掌握新功能更新報告

8.3 團隊使用規範範本

# GitHub Copilot 團隊使用規範

## 1. 適用範圍
- 適用於:所有使用 GitHub Copilot 的開發人員
- 版本:3.0
- 生效日期:2026-03-11

## 2. 可以做(Do)
✅ 使用 Copilot 生成 Boilerplate 程式碼
✅ 使用 Copilot Chat 協助理解程式碼
✅ 使用 Copilot 生成單元測試骨架
✅ 使用 Copilot 生成 JavaDoc 與文件
✅ 使用 Copilot Code Review 輔助程式碼審查
✅ 使用 Agent Mode 完成明確定義的開發任務
✅ 使用 Copilot Coding Agent 處理例行性 Issue
✅ 使用 Custom Instructions 統一團隊風格
✅ 使用 Agent Skills 建立可重用的團隊技能
✅ 使用 Agent Hooks 建立自動化流程
✅ 使用 MCP 整合經審核通過的外部工具

## 3. 不可以做(Don't)
❌ 將客戶個資或機敏資料貼入 Prompt
❌ 將 API Key、密碼等機敏設定貼入 Prompt
❌ 盲目接受 Copilot 建議,不經審查
❌ 用 Copilot 取代設計思考
❌ 跳過 Code Review 流程
❌ 未經審核就啟用第三方 MCP Server
❌ 未經審查就啟用來路不明的 Agent Hooks
❌ 將 Agent 模式用於安全性關鍵的核心系統修改

## 4. 安全規範
- 不可在 Prompt 中包含任何客戶資料
- 不可在 Prompt 中包含內部系統架構機敏資訊
- 生成的程式碼必須通過安全掃描
- 使用 Business/Enterprise 版本(確保資料不外流)
- 啟用 Block Suggestions Matching Public Code
- 設定 Content Exclusion 排除敏感檔案

## 5. 品質規範
- 所有 Copilot 生成的程式碼必須經過人工審查
- 核心業務邏輯不可完全依賴 Copilot
- 必須為 Copilot 生成的程式碼撰寫測試
- Copilot Coding Agent 的 PR 須經資深工程師審查

## 6. 審查流程
1. 開發者使用 Copilot 生成程式碼
2. 開發者自我審查(使用 Checklist)
3. 提交 PR,觸發自動化掃描
4. 可選:請求 Copilot Code Review
5. Reviewer 進行人工 Code Review
6. 通過後方可 Merge

## 7. Copilot Coding Agent 使用規範
- 僅用於描述明確的 Bug Fix 與簡單功能增強
- Issue 必須包含清楚的需求描述與驗收條件
- Agent 產出的 PR 必須由人工審查
- 不可用於安全性關鍵修改

## 8. 例外處理
- 如有特殊需求需違反規範,須經 Tech Lead 核准
- 核准紀錄須保留備查

## 9. Agent Hooks 與 Skills 治理
- 全部 Hook 腳本須經 Code Review 後始可合併
- 不可啟用來路不明的 Agent Hook 設定
- Agent Skills 與 Custom Agents 須由團隊共同審查
- 定期檢視並更新 .github/hooks/ 設定

8.4 Code Review 要點(Copilot 輔助後)

flowchart TB
    A[PR 提交] --> B{包含 Copilot<br/>生成程式碼?}
    B -->|是| C[加強審查模式]
    B -->|否| D[標準審查模式]
    
    subgraph "加強審查模式"
        C --> E[確認 Prompt 意圖]
        E --> F[逐行審查生成程式碼]
        F --> G[檢查安全漏洞]
        G --> H[驗證邊界條件]
        H --> I[確認測試覆蓋]
    end
    
    subgraph "標準審查模式"
        D --> J[標準 Code Review]
    end
    
    I --> K[完成審查]
    J --> K

Reviewer 額外檢查項目:

項目檢查重點
意圖驗證程式碼是否符合原始需求
邏輯完整性是否有遺漏的 edge case
安全性是否有 OWASP Top 10 風險
效能是否有明顯的效能問題
一致性是否符合專案編碼規範
可維護性程式碼是否易於理解與維護

8.5 效益衡量指標

指標計算方式目標
開發效率功能點完成時間提升 20-30%
程式碼品質SonarQube 分數維持或提升
Bug 數量每千行程式碼 Bug 數不增加
開發者滿意度問卷調查> 4.0/5.0
學習曲線新人上手時間縮短 30%

8.6 組織架構建議

graph TB
    subgraph "治理層"
        A[AI 工具治理委員會]
    end
    
    subgraph "管理層"
        B[IT 資安團隊]
        C[開發標準團隊]
        D[培訓團隊]
    end
    
    subgraph "執行層"
        E[各專案 Tech Lead]
        F[開發人員]
    end
    
    A --> B
    A --> C
    A --> D
    B --> E
    C --> E
    D --> E
    E --> F

各角色職責:

角色職責
治理委員會制定政策、風險評估、預算核准
IT 資安團隊安全規範、稽核、事件處理
開發標準團隊使用規範、Prompt Library、最佳實務
培訓團隊教育訓練、知識傳承
Tech Lead執行監督、團隊指導
開發人員遵循規範、回報問題

第九章 進階應用案例

9.1 案例一:Legacy Code 重構

9.1.1 情境描述

【背景】
- 一段 10 年歷史的付款處理程式碼
- 單一方法超過 500 行
- 缺乏測試,無人敢動
- 需要新增多幣別支援

【挑戰】
- 理解現有邏輯
- 不破壞現有功能
- 安全地進行重構

9.1.2 使用 Copilot 的策略

flowchart TB
    A[理解階段] --> B[規劃階段]
    B --> C[測試補充階段]
    C --> D[重構階段]
    D --> E[驗證階段]
    
    A1[Copilot Chat<br/>解釋程式碼] --> A
    B1[Copilot Chat<br/>重構策略討論] --> B
    C1[Copilot Inline<br/>生成測試] --> C
    D1[Copilot Inline<br/>逐步重構] --> D
    E1[執行測試<br/>確認行為不變] --> E

Step 1:理解現有程式碼

## Copilot Chat Prompt

請分析以下 Legacy 程式碼:

1. 說明這段程式碼的主要職責
2. 識別主要的執行流程
3. 標記可能的問題點:
   - 過長的方法
   - 違反 SOLID 的地方
   - 潛在的 bug
4. 建議重構的優先順序

[貼上 Legacy Code]

Step 2:建立特徵測試(Characterization Test)

// 使用 Copilot 生成特徵測試,保護現有行為
// Prompt: 請為以下 legacy 方法生成特徵測試,
//         測試目的是記錄「現有行為」而非「預期行為」

@Test
void characterization_processPayment_normalFlow() {
    // Copilot 生成的測試,用於捕捉現有行為
    PaymentRequest request = createTestRequest();
    PaymentResult result = legacyService.processPayment(request);
    
    // 記錄現有行為(即使看起來怪怪的)
    assertThat(result.getStatus()).isEqualTo("SUCCESS");
    assertThat(result.getFee()).isEqualTo(new BigDecimal("1.50"));
}

Step 3:逐步重構

// 使用「提取方法」重構,Copilot 輔助生成新方法

// 原始程式碼中的一段(在 500 行方法中)
// --- 驗證卡號邏輯 ---
String cardNumber = request.getCardNumber();
if (cardNumber == null || cardNumber.length() < 13) {
    throw new InvalidCardException("Invalid card");
}
// Luhn 驗證...
// --- 驗證結束 ---

// 提取為獨立方法
// Prompt: 請將以下卡號驗證邏輯提取為獨立方法,
//         包含完整的 JavaDoc 和錯誤處理

/**
 * 驗證信用卡卡號
 * 
 * @param cardNumber 信用卡卡號
 * @throws InvalidCardException 當卡號格式不正確或未通過 Luhn 驗證
 */
private void validateCardNumber(String cardNumber) {
    // Copilot 生成的驗證邏輯
}

9.1.3 重構成果

【重構前】
- 1 個 500 行的方法
- 0 個測試
- 無法新增功能

【重構後】
- 15 個小方法,每個 < 30 行
- 45 個特徵測試 + 20 個新測試
- 成功新增多幣別支援
- 程式碼可讀性大幅提升

9.2 案例二:API 設計與實作

9.2.1 情境描述

【需求】
設計並實作「交易查詢 API」:
- RESTful API 設計
- 支援複雜查詢條件
- 分頁與排序
- 符合 OpenAPI 規範

9.2.2 使用 Copilot 的完整流程

Phase 1:API 設計討論

## Copilot Chat Prompt

我需要設計一個交易查詢 API,請協助:

1. 建議 RESTful endpoint 設計
2. 查詢參數設計(日期範圍、交易類型、金額範圍等)
3. 分頁策略(offset vs cursor)
4. 回應格式設計
5. 錯誤處理策略

背景:
- 資料量:每日約 100 萬筆交易
- 查詢頻率:每秒約 100 次
- 使用者:內部系統 + 外部合作夥伴

Phase 2:OpenAPI 規格生成

# Copilot 輔助生成的 OpenAPI 規格
openapi: 3.0.3
info:
  title: Transaction Query API
  version: 1.0.0
  
paths:
  /api/v1/transactions:
    get:
      summary: 查詢交易紀錄
      parameters:
        - name: startDate
          in: query
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          schema:
            type: string
            format: date
        - name: transactionType
          in: query
          schema:
            type: string
            enum: [DEPOSIT, WITHDRAWAL, TRANSFER]
        - name: minAmount
          in: query
          schema:
            type: number
        - name: maxAmount
          in: query
          schema:
            type: number
        - name: page
          in: query
          schema:
            type: integer
            default: 0
        - name: size
          in: query
          schema:
            type: integer
            default: 20
            maximum: 100
      responses:
        '200':
          description: 查詢成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionPage'

Phase 3:Controller 實作

// Prompt: 請根據以上 OpenAPI 規格,實作 Spring Boot Controller
// 要求:使用 @Validated、適當的錯誤處理、OpenAPI 註解

@RestController
@RequestMapping("/api/v1/transactions")
@Tag(name = "Transaction", description = "交易查詢 API")
@Validated
@RequiredArgsConstructor
public class TransactionController {

    private final TransactionQueryService queryService;

    @GetMapping
    @Operation(summary = "查詢交易紀錄")
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "查詢成功"),
        @ApiResponse(responseCode = "400", description = "查詢參數錯誤"),
        @ApiResponse(responseCode = "401", description = "未授權"),
        @ApiResponse(responseCode = "403", description = "無權限")
    })
    public ResponseEntity<Page<TransactionDTO>> queryTransactions(
            @RequestParam(required = false) 
            @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
            
            @RequestParam(required = false) 
            @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate,
            
            @RequestParam(required = false) TransactionType transactionType,
            
            @RequestParam(required = false) 
            @PositiveOrZero BigDecimal minAmount,
            
            @RequestParam(required = false) 
            @PositiveOrZero BigDecimal maxAmount,
            
            @RequestParam(defaultValue = "0") @Min(0) int page,
            
            @RequestParam(defaultValue = "20") @Min(1) @Max(100) int size,
            
            @AuthenticationPrincipal UserDetails currentUser) {
        
        // Copilot 生成的實作...
        TransactionQuery query = TransactionQuery.builder()
            .startDate(startDate)
            .endDate(endDate)
            .transactionType(transactionType)
            .minAmount(minAmount)
            .maxAmount(maxAmount)
            .build();
            
        Page<TransactionDTO> result = queryService.query(
            query, 
            PageRequest.of(page, size),
            currentUser
        );
        
        return ResponseEntity.ok(result);
    }
}

Phase 4:測試生成

// Prompt: 請為上述 Controller 生成完整的整合測試
// 包含:正常查詢、分頁、篩選、權限驗證、錯誤處理

@WebMvcTest(TransactionController.class)
@AutoConfigureMockMvc
class TransactionControllerTest {

    @Autowired
    private MockMvc mockMvc;
    
    @MockBean
    private TransactionQueryService queryService;

    @Test
    @WithMockUser
    void shouldReturnTransactions_whenValidQuery() throws Exception {
        // Copilot 生成的測試...
    }
    
    @Test
    @WithMockUser
    void shouldReturnBadRequest_whenInvalidDateRange() throws Exception {
        // Copilot 生成的測試...
    }
    
    @Test
    void shouldReturnUnauthorized_whenNotAuthenticated() throws Exception {
        // Copilot 生成的測試...
    }
}

9.3 案例三:Batch 程式開發

9.3.1 情境描述

【需求】
開發日終對帳 Batch:
- 每日 00:00 執行
- 處理前一日所有交易
- 與銀行對帳單比對
- 產出差異報表
- 需要支援 restart/retry

9.3.2 使用 Copilot 的策略

// Prompt: 使用 Spring Batch 設計日終對帳 Job
// 要求:
// - 支援大量資料(100 萬筆)
// - Chunk-based 處理
// - 可重啟
// - 完整的錯誤處理
// - 執行狀態追蹤

@Configuration
@RequiredArgsConstructor
public class ReconciliationJobConfig {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;
    
    @Bean
    public Job reconciliationJob(
            Step loadTransactionsStep,
            Step loadBankStatementsStep,
            Step reconcileStep,
            Step generateReportStep) {
        
        return jobBuilderFactory.get("reconciliationJob")
            .incrementer(new RunIdIncrementer())
            .listener(new JobExecutionListener() {
                // Copilot 生成 listener...
            })
            .start(loadTransactionsStep)
            .next(loadBankStatementsStep)
            .next(reconcileStep)
            .next(generateReportStep)
            .build();
    }
    
    @Bean
    public Step reconcileStep(
            ItemReader<TransactionPair> reader,
            ItemProcessor<TransactionPair, ReconciliationResult> processor,
            ItemWriter<ReconciliationResult> writer) {
        
        return stepBuilderFactory.get("reconcileStep")
            .<TransactionPair, ReconciliationResult>chunk(1000)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .faultTolerant()
            .skipLimit(100)
            .skip(DataIntegrityException.class)
            .retryLimit(3)
            .retry(TransientDataAccessException.class)
            .listener(new StepExecutionListener() {
                // Copilot 生成 listener...
            })
            .build();
    }
}

9.4 案例四:架構文件生成

9.4.1 使用 Copilot 生成 ADR(Architecture Decision Record)

## Copilot Chat Prompt

請協助我生成一份 ADR(架構決策紀錄):

決策主題:採用 Redis 作為分散式快取

背景:
- 系統每秒處理 1000+ 請求
- 部分資料變動頻率低(幣別匯率、系統參數)
- 目前直接查詢 DB,造成效能瓶頸

請以標準 ADR 格式輸出:
- 標題
- 狀態
- 背景
- 決策
- 後果(正面/負面)

Copilot 生成的 ADR:

# ADR-001: 採用 Redis 作為分散式快取

## 狀態
已接受(Accepted)

## 背景
現行系統面臨效能瓶頸:
- 每秒處理 1000+ 請求
- 部分低變動資料重複查詢 DB
- DB 連線數經常達到上限
- P99 回應時間超過 500ms

## 考量的方案

### 方案一:本地快取(Caffeine)
- 優點:實作簡單、無網路延遲
- 缺點:多節點間資料不一致

### 方案二:Redis
- 優點:分散式一致、成熟穩定
- 缺點:增加架構複雜度

### 方案三:Hazelcast
- 優點:功能豐富
- 缺點:學習曲線高、授權成本

## 決策
採用 Redis(方案二)

理由:
1. 已有 Redis 維運經驗
2. 生態系成熟,社群支援良好
3. 符合分散式一致性需求
4. 團隊熟悉度高

## 後果

### 正面
- 預期 DB 查詢量減少 60%
- P99 回應時間降至 100ms 以下
- 支援水平擴展

### 負面
- 增加 Redis 維運成本
- 需處理快取失效策略
- 增加故障點

## 相關決策
- ADR-002: Redis 快取策略
- ADR-003: Redis 高可用配置

9.5 案例五:使用 Copilot Coding Agent 自動化開發

9.5.1 情境描述

【背景】
- 團隊有大量的小型 Bug Fix 和功能增強 Issue
- 資深工程師時間寶貴,不想花在例行性修改上
- Issue 描述明確,修改範圍可控

【挑戰】
- 如何將例行任務交給 Copilot Coding Agent
- 如何確保 Agent 產出的 PR 品質
- 如何建立有效的 Agent 工作流程

9.5.2 Copilot Coding Agent 使用流程

flowchart TB
    A[在 GitHub Issue 中<br/>指派 Copilot] --> B[Coding Agent<br/>分析 Issue]
    B --> C[Agent 自動<br/>建立分支]
    C --> D[Agent 實作<br/>程式碼變更]
    D --> E[Agent 建立<br/>Pull Request]
    E --> F[人工審查 PR]
    F -->|通過| G[Merge]
    F -->|需修改| H[在 PR 中<br/>留下回饋]
    H --> D

Step 1:撰寫適合 Agent 的 Issue

## Issue: 新增交易查詢 API 的日期驗證

### 描述
目前 `GET /api/v1/transactions` 的 `startDate` 和 `endDate` 參數
沒有驗證日期範圍是否合理。

### 需求
1. `endDate` 不可早於 `startDate`
2. 查詢範圍不可超過 90 天
3. 不可查詢未來日期
4. 回傳 400 Bad Request 並附上明確錯誤訊息

### 檔案位置
- Controller: `src/main/java/.../TransactionController.java`
- 測試: `src/test/java/.../TransactionControllerTest.java`

### 驗收條件
- [ ] 新增日期驗證邏輯
- [ ] 新增對應的錯誤處理
- [ ] 新增單元測試覆蓋所有情境

Step 2:指派 Copilot

在 Issue 中將 Assignee 設定為 Copilot,Agent 會自動開始工作。

Step 3:審查 Agent 產出的 PR

## 審查重點(Copilot Coding Agent PR)
✅ 邏輯是否正確符合 Issue 描述
✅ 是否符合專案編碼規範
✅ 測試是否覆蓋所有情境
✅ 是否有安全風險
⚠️ 是否有不必要的變更(Agent 可能修改超出範圍的檔案)

9.5.3 適合交給 Coding Agent 的任務

適合不適合
Bug Fix(明確重現步驟)架構重構
新增驗證邏輯複雜業務邏輯
補充單元測試涉及多系統整合
更新文件效能調優
簡單功能增強安全性關鍵修改

⚠️ 注意:Copilot Coding Agent 目前適用於 Pro、Pro+、Business、Enterprise 方案。Issue 描述越詳細,Agent 產出品質越高。

9.6 最佳實務總結

場景Copilot 主要用途人工重點
Legacy 重構理解程式碼、生成測試重構策略、風險評估
API 開發OpenAPI 規格、程式碼生成API 設計決策、安全審查
Batch 開發骨架程式碼、錯誤處理效能調優、資料驗證
架構文件文件草稿、格式化技術決策、內容正確性

第十章 總結:如何把 Copilot 變成「資深工程師的放大器」

10.1 核心心法

graph TB
    subgraph "資深工程師的價值"
        A[設計思維]
        B[業務理解]
        C[品質把關]
        D[架構決策]
    end
    
    subgraph "Copilot 的角色"
        E[實作加速]
        F[知識檢索]
        G[模式套用]
        H[文件生成]
    end
    
    subgraph "放大效果"
        I[效率提升]
        J[品質維持]
        K[創新聚焦]
    end
    
    A --> I
    B --> I
    C --> J
    D --> J
    E --> I
    F --> I
    G --> I
    H --> I
    I --> K
    J --> K

10.2 黃金法則

## 資深工程師使用 Copilot 的十二大法則

1. **AI 是助手,不是主人**
   - 設計決策永遠是人做的
   
2. **Prompt 品質決定輸出品質**
   - 投資時間在寫好 Prompt 與 Custom Instructions
   
3. **永遠審查,從不盲信**
   - 每行程式碼都要理解,無論是 Inline 還是 Agent 產出
   
4. **用 AI 做 AI 擅長的事**
   - Boilerplate、測試、文件、例行性 Bug Fix
   
5. **保持安全意識**
   - 不洩露機敏資訊,善用 Content Exclusion
   
6. **測試不可省略**
   - AI 生成的程式碼更需要測試
   
7. **善用 Agent Mode 與 Coding Agent**
   - 將例行任務自動化,專注高價值工作
   
8. **建立團隊自訂化資產**
   - 共享 Custom Instructions、Prompt Files、Skills、Hooks、MCP 設定
   
9. **量化效益**
   - 用 Usage Data 與指標說話
   
10. **保持批判性思維**
    - AI 可能是錯的,特別是業務邏輯與安全性
    
11. **善用上下文管理**
    - 使用 Spaces、Custom Instructions 提升回應品質
    
12. **持續學習新功能**
    - Copilot 生態圈快速演進,定期查看官方文件更新

10.3 技能發展路徑

graph LR
    A[初階使用者] --> B[中階使用者]
    B --> C[進階使用者]
    C --> D[專家級]
    
    A -->|技能| A1[基本 Inline 補全<br/>Ask Mode 對話]
    B -->|技能| B1[Prompt 優化<br/>Agent / Plan Mode<br/>測試生成]
    C -->|技能| C1[Custom Instructions<br/>MCP / Skills / Hooks<br/>Coding Agent<br/>團隊規範制定]
    D -->|技能| D1[Custom Agents 編排<br/>Spaces 管理<br/>效益量化<br/>組織轉型]

10.4 持續改善框架

## 每週 Copilot 使用回顧

### 本週使用情況
- 使用 Copilot 完成的任務:___
- 節省的估計時間:___
- 遇到的問題:___

### 效益評估
- 哪些場景效果好?
- 哪些場景效果不佳?
- 發現的新用法?

### 改善行動
- 下週要嘗試的新用法:___
- 要分享給團隊的 Prompt:___
- 需要調整的使用習慣:___

10.5 未來展望

時間軸預期發展資深工程師應對
已實現(2026 上半年)AI Credits 計費(含共池與四級預算控管)、Copilot Max、Auto Model Selection、GPT-5.x/Claude 4.x(含 fast mode)/Gemini 3.x/Goldeneye 系列、Custom Agents 多層部署、Copilot CLI、Agent Skills 社群生態、Coding Agent、Agent Mode、MCP、Spaces、Hooks、Windows Terminal Chat、Code Review 雙重計費掌握 AI Credits 用量管理與成本控制策略;建立 Custom Agents + Skills 資產庫;善用 Auto Model Selection 與輕量模型節省成本
近期(2026 下半年)Copilot Memory 全面穩定、Org/Enterprise 層級 Skills 部署、Agent Plugins 生態成熟、更多 MCP Servers、Claude Opus fast mode 擴展至更多方案建立團隊層級 Custom Instructions + Skills;評估 Copilot Max 升級效益;監控推廣期結束後的 Credits 用量變化
中期(2027-2028)多 Agent 協作框架、自主測試與部署、Agent 市集普及、Copilot 深入 PR/Issue 工作流程學習 Custom Agent 編排與治理;培養 AI 系統設計能力
長期(2029+)端到端自主開發流程、AI 驅動架構決策輔助、自主 DevOps 代理聚焦架構設計、業務創新、AI 輸出的治理與稽核

💡 關鍵趨勢:2026 年的最大變化是 計費模式轉型(AI Credits + 共池 + 四級預算)與 代理能力跨平台整合(CLI、Cloud、IDE 共用 Custom Agents + Skills)。資深工程師的核心競爭力將從「寫程式碼」轉向「定義 AI 規範、治理代理行為、審查 AI 產出」。善用 Auto Model Selection 與輕量模型降低成本、善用 Agent Skills 封裝團隊最佳實務,是當前最值得投資的能力。


附錄 檢查清單(Checklist)

A. 日常使用檢查清單

## 每次使用 Copilot 前
□ 確認不會洩露機敏資訊
□ 清楚知道要達成什麼目標
□ 準備好足夠的上下文

## 接受 Copilot 建議前
□ 我理解這段程式碼在做什麼
□ 我檢查過邊界條件
□ 我確認過沒有安全風險
□ 程式碼風格與專案一致
□ 例外處理適當

## 提交程式碼前
□ 通過自我 Code Review
□ 已撰寫對應測試
□ 通過靜態掃描
□ PR 描述清楚說明變更

B. Code Review 檢查清單(Copilot 輔助程式碼)

## 功能正確性
□ 程式碼是否符合需求規格
□ 邊界條件是否處理完整
□ 錯誤處理是否適當

## 安全性
□ 是否有 SQL Injection 風險
□ 是否有 XSS 風險
□ 輸入驗證是否完整
□ 敏感資料是否保護

## 效能
□ 是否有 N+1 Query
□ 時間/空間複雜度是否可接受
□ 是否有不必要的 I/O

## 可維護性
□ 命名是否清晰
□ 方法長度是否合理
□ 職責是否單一
□ 是否符合專案規範

## 測試
□ 是否有對應單元測試
□ 測試覆蓋率是否足夠
□ 測試案例是否有意義

C. 團隊導入檢查清單

## 導入前準備
□ 取得組織授權
□ 確認授權版本(Business/Enterprise)
□ 完成資安評估
□ 制定使用規範草案
□ 選定試點團隊

## 導入中
□ 完成團隊培訓
□ 建立 Prompt Library
□ 設定開發環境
□ 整合 CI/CD
□ 建立回報機制

## 導入後
□ 收集使用回饋
□ 量化效益指標
□ 更新使用規範
□ 定期分享會
□ 持續優化

D. Prompt 範本快速參考

## 程式碼解釋
「請解釋這段程式碼的功能,包含:主要流程、關鍵邏輯、潛在問題」

## 程式碼審查
「請以資深工程師角度審查這段程式碼,檢查:安全性、效能、可維護性」

## 測試生成
「請為這個方法生成單元測試,使用 JUnit 5,涵蓋:正常流程、邊界條件、異常情境」

## 重構建議
「請分析這段程式碼的 Code Smell,並提供重構建議,遵循 SOLID 原則」

## 文件生成
「請為這個類別生成 JavaDoc,包含:類別說明、方法說明、參數說明、範例」

E. Copilot 自訂化功能速查表

功能設定方式平台支援說明
Custom Instructions.github/copilot-instructions.mdVS Code, JetBrains, GitHub.com全局 Copilot 行為指引
Custom Agents.github/agents/*.agent.mdVS Code, JetBrains (Preview), CLI專屬化 Agent 定義
Agent Skills.github/skills/*/SKILL.mdVS Code可重用的 Agent 技能
Agent Hooks.github/hooks/*.jsonVS Code, CLI生命週期自動化
Prompt Files.github/prompts/*.prompt.mdVS Code可重用的 Prompt 範本
MCP Servers.vscode/mcp.jsonVS Code擴展 Agent 能力
Handoffs.agent.md frontmatterVS CodeAgent 間工作流程交接
Copilot MemoryGitHub Settings → CopilotGitHub.com, VS Code, CLI個人化記憶
Organization Agents.github-private repoGitHub.com, VS Code組織級共享 Agent

參考資源

官方資源

VS Code 文件

延伸閱讀


文件維護
本文件由開發標準團隊維護,如有問題或建議,請聯繫 chihhung.cheng@gmail.com
最後更新:2026 年 5 月 28 日(v5.0 — 依據 GitHub 官方文件全面校正;新增 Copilot Integrations(Teams/Slack/Jira/Linear/Azure Boards)、Agents Window、Remote Agent Sessions、Copilot CLI 內建代理、Custom Agent Handoffs、Copilot Memory 深入指南、自訂化速查表、Agent-Scoped Hooks 等章節)