
你學到的一切都在這裡結合。從想法到合併 PR,只需一個會話。
在本章中,你將把所學的一切整合成完整的工作流程。你將透過多 Agent 協作來開發功能,設置 pre-commit hook 在提交前攔截安全問題,將 Copilot 整合進 CI/CD 流程,並從功能構想到合併 PR,全部在單一終端機會話中完成。這正是 GitHub Copilot CLI 成為真正倍增器的時刻。
💡 注意:本章展示如何整合你學到的所有內容。你不需要 Agent、Skill 或 MCP 也能高效工作(雖然它們非常有幫助)。 核心工作流程——描述、規劃、實作、測試、審查、發佈——只需用第 00-03 章的內建功能即可完成。
完成本章後,你將能夠:
⏱️ 預估時間:約 75 分鐘(閱讀 15 分鐘 + 實作 60 分鐘)

一個交響樂團有許多樂器組別:
單獨來看,每個組別都有限。但如果指揮得當,合奏就能創造出壯麗的樂章。
這正是本章要教你的!
就像指揮家帶領樂團,你要協調 Agent、Skill 和 MCP,打造統一的工作流程
我們先從一個情境開始,示範如何在一個會話中修改程式碼、產生測試、審查並建立 PR。
你不必再在編輯器、終端機、測試工具和 GitHub UI 之間來回切換,每次切換都會失去情境。你可以在單一終端機會話中整合所有工具。我們會在下方的整合模式章節詳細拆解這個模式。
# 以互動模式啟動 Copilot
copilot
> 我需要在書籍應用程式中新增一個 "list unread" 指令,只顯示
> read 為 False 的書。需要修改哪些檔案?
# Copilot 產生高階規劃...
# 切換到 PYTHON-REVIEWER AGENT
> /agent
# 選擇 "python-reviewer"
> @samples/book-app-project/books.py 設計一個 get_unread_books 方法。
> 最佳實作方式為何?
# Python-reviewer agent 產生:
# - 方法簽名與回傳型別
# - 使用 list comprehension 的過濾實作
# - 處理空集合等邊界情境
# 切換到 PYTEST-HELPER AGENT
> /agent
# 選擇 "pytest-helper"
> @samples/book-app-project/tests/test_books.py 設計
> 過濾未讀書籍的測試案例。
# Pytest-helper agent 產生:
# - 空集合測試案例
# - 已讀/未讀混合測試案例
# - 全部已讀測試案例
# 實作
> 在 books.py 的 BookCollection 新增 get_unread_books 方法
> 在 book_app.py 新增 "list unread" 指令選項
> 更新 show_help 函式中的說明文字
# 測試
> 產生新功能的完整測試
# 產生多個類似以下的測試:
# - 標準情境(3 個測試)— 正確過濾、排除已讀、包含未讀
# - 邊界情境(4 個測試)— 空集合、全部已讀、全部未讀、單一本書
# - 參數化(5 個案例)— 以 @pytest.mark.parametrize 測試不同已讀/未讀比例
# - 整合測試(4 個)— 與 mark_as_read、remove_book、add_book 及資料完整性互動
# 審查變更
> /review
# 若審查通過,使用 /pr 操作目前分支的 pull request
> /pr [view|create|fix|auto]
# 或自然詢問 Copilot 直接從終端機草擬 PR
> 建立標題為 "Feature: Add list unread books command" 的 pull request
傳統做法:在編輯器、終端機、測試工具、文件與 GitHub UI 之間切換。每次切換都會造成情境流失與摩擦。
關鍵洞見:你像建築師一樣指揮專家。他們處理細節,你掌握全局。
💡 進階應用:對於這種多步驟大型規劃,可以嘗試
/fleet,讓 Copilot 平行執行獨立子任務。詳情請參閱官方文件。

若你已完成第 04-06 章,這些工作流程將展示 Agent、Skill 與 MCP 如何倍增你的效能。
這是將所有元素結合的心智模型:

真實世界的錯誤修正,整合所有工具:
copilot
# 階段 1:從 GitHub 了解錯誤(MCP 提供)
> 取得 issue #1 的詳細資訊
# 得知:「find_by_author 無法處理部分名稱」
# 階段 2:研究最佳實踐(結合網路與 GitHub 深度研究)
> /research Python 不區分大小寫字串比對的最佳實踐
# 階段 3:尋找相關程式碼
> @samples/book-app-project/books.py 顯示 find_by_author 方法
# 階段 4:取得專家分析
> /agent
# 選擇 "python-reviewer"
> 分析此方法在部分名稱比對上的問題
# Agent 指出:方法使用完全相等而非子字串比對
# 階段 5:依 Agent 指引修正
> 使用小寫比較與 'in' 運算子實作修正
# 階段 6:產生測試
> /agent
# 選擇 "pytest-helper"
> 產生 find_by_author 支援部分比對的 pytest 測試
> 包含測試案例:部分名稱、大小寫變化、無符合
# 階段 7:提交與 PR
> 產生此修正的 commit 訊息
> 建立連結到 issue #1 的 pull request
💡 本節為選用。 pre-commit hook 對團隊很有幫助,但不是生產力的必要條件。如果你剛開始,可以跳過。
⚠️ 效能提醒:此 hook 會對每個已暫存檔案執行
copilot -p,每個檔案需數秒。若提交大量檔案,建議僅針對關鍵檔案,或改用/review手動審查。
git hook 是 Git 在特定時機自動執行的腳本,例如在 commit 前。你可以用它自動檢查程式碼。以下是如何在每次提交時自動執行 Copilot 審查:
# 建立 pre-commit hook
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/bash
# 取得已暫存的 Python 檔案
STAGED=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.py$')
if [ -n "$STAGED" ]; then
echo "Running Copilot review on staged files..."
for file in $STAGED; do
echo "Reviewing $file..."
# 使用 timeout 防止卡住(每檔案 60 秒)
# --allow-all 允許自動讀寫檔案,讓 hook 可無人值守執行。
# 僅建議自動化腳本使用。互動會話建議讓 Copilot 詢問權限。
REVIEW=$(timeout 60 copilot --allow-all -p "Quick security review of @$file - critical issues only" 2>/dev/null)
# 檢查是否 timeout
if [ $? -eq 124 ]; then
echo "Warning: Review timed out for $file (skipping)"
continue
fi
if echo "$REVIEW" | grep -qi "CRITICAL"; then
echo "Critical issues found in $file:"
echo "$REVIEW"
exit 1
fi
done
echo "Review passed"
fi
EOF
chmod +x .git/hooks/pre-commit
⚠️ macOS 使用者:macOS 預設沒有
timeout指令。請用brew install coreutils安裝,或將timeout 60改為不加 timeout 的簡單呼叫。
📚 官方文件:使用 hook 及 hook 設定參考 提供完整 hooks API。
💡 內建替代方案:Copilot CLI 也有內建 hooks 系統(
copilot hooks),可在 pre-commit 等事件自動執行。上面的 git hook 給你完全控制權,內建系統則較易設定。詳見上述文件,選擇適合你的方式。
現在每次 commit 都會自動進行安全審查:
git add samples/book-app-project/books.py
git commit -m "Update book collection methods"
# 輸出:
# Running Copilot review on staged files...
# Reviewing samples/book-app-project/books.py...
# Critical issues found in samples/book-app-project/books.py:
# - Line 15: File path injection vulnerability in load_from_file
#
# Fix the issue and try again.
加入新專案時,結合情境、Agent 與 MCP 快速熟悉:
# 以互動模式啟動 Copilot
copilot
# 階段 1:用情境掌握全貌
> @samples/book-app-project/ 說明此程式碼庫的高階架構
# 階段 2:了解特定流程
> @samples/book-app-project/book_app.py 說明當使用者執行 "python book_app.py add" 時發生什麼事
# 階段 3:用 Agent 專家分析
> /agent
# 選擇 "python-reviewer"
> @samples/book-app-project/books.py 有無設計問題、
> 缺少錯誤處理或建議改進?
# 階段 4:尋找可著手的項目(MCP 提供 GitHub 存取)
> 列出標記為 "good first issue" 的未結案 issue
# 階段 5:開始貢獻
> 選最簡單的 open issue,列出修正計畫
這個流程將 @ 情境、Agent 與 MCP 結合成單一上手會話,正是本章前面介紹的整合模式。
讓你的工作流程更有效率的模式與習慣。
永遠在請求分析前先蒐集情境:
# 好的做法
> 取得 issue #42 的詳細資訊
> /agent
# 選擇 python-reviewer
> 分析這個 issue
# 效果較差
> /agent
# 選擇 python-reviewer
> 修正登入錯誤
# Agent 沒有 issue 情境
每種工具都有適合的用途:
# Agent:你明確啟用的專家角色
> /agent
# 選擇 python-reviewer
> 審查這段認證程式碼的安全性
# Skill:當提示詞符合 skill 描述時自動啟用的模組化能力(需先建立,詳見第 05 章)
> 產生這段程式碼的完整測試
# 若你有設定測試 skill,會自動啟用
# 自訂指令(.github/copilot-instructions.md):全時啟用
# 的指引,無需切換或觸發,每次會話都適用
💡 重點:Agent 與 Skill 都能分析與產生程式碼。真正差別在於啟用方式——Agent 需明確呼叫(
/agent),Skill 則自動(提示詞比對),自訂指令則全時生效。
用 /rename 標記會話(方便日後查詢),用 /exit 結束會話:
# 好的做法:一個功能一個會話
> /rename list-unread-feature
# 開發 list unread
> /exit
copilot
> /rename export-csv-feature
# 開發 CSV 匯出
> /exit
# 效果較差:所有事都塞在一個長會話
不要只把工作流程寫在 wiki,直接編碼在 repo 讓 Copilot 可用:
.github/copilot-instructions.md):全時啟用的指引,包含程式規範、架構規則、建置/測試/部署步驟。每次會話自動遵循。.github/prompts/):可重用、可參數化的提示詞,團隊共享——如程式碼審查、元件產生、PR 描述等範本。.github/agents/):編碼專業角色(如安全審查、文件撰寫),團隊成員皆可用 /agent 啟用。.github/skills/):包裝逐步工作流程指令,相關時自動啟用。💡 好處:新成員自動獲得你的工作流程——它們內建於 repo,而非藏在腦袋裡。
這些模式非必須,但對專業團隊很有價值。
# 產生完整的 PR 描述
BRANCH=$(git branch --show-current)
COMMITS=$(git log main..$BRANCH --oneline)
copilot -p "Generate a PR description for:
Branch: $BRANCH
Commits:
$COMMITS
Include: Summary, Changes Made, Testing Done, Screenshots Needed"
若團隊已有 CI/CD 流程,可用 GitHub Actions 自動在每個 pull request 執行 Copilot 審查,包含自動發表審查意見與過濾重大問題。
📖 進一步了解:完整 GitHub Actions 工作流程、設定選項與疑難排解,請見 CI/CD 整合。

實際操作完整工作流程。
完成示範後,試試這些變化:
/plan 規劃自動化挑戰:設置「程式碼審查自動化」工作流程中的 pre-commit hook。提交一個有意的檔案路徑漏洞。它會被攔下嗎?
自我檢查:當你能向同事解釋 Agent、Skill 與 MCP 如何協作、何時該用哪一種時,就代表你已完成本課程。
實作範例已帶你完成「列出未讀書籍」功能。現在請用完整工作流程練習另一個功能:依年份區間搜尋書籍:
@samples/book-app-project/books.py/plan Add a "search by year" command that lets users find books published between two years 規劃BookCollection 中實作 find_by_year_range(start_year, end_year) 方法book_app.py 新增 handle_search_year() 函式,提示使用者輸入起訖年份@samples/book-app-project/books.py @samples/book-app-project/tests/test_books.py Generate tests for find_by_year_range() including edge cases like invalid years, reversed range, and no results./review 審查@samples/book-app-project/README.md Add documentation for the new "search by year" command.邊做邊記錄你的工作流程。
成功標準:你已用 Copilot CLI 完成從想法到 commit 的完整功能,包括規劃、實作、測試、文件與審查。
💡 加分:若你已完成第 04 章的 Agent 設定,請嘗試建立並使用自訂 Agent。例如,實作審查用的 error-handler agent,或更新 README 用的 doc-writer agent。
📋 快速參考:完整指令與捷徑請見 GitHub Copilot CLI 指令參考。
恭喜你!你已學會:
| 章節 | 學習內容 |
|---|---|
| 00 | Copilot CLI 安裝與快速上手 |
| 01 | 三種互動模式 |
| 02 | 用 @ 語法管理情境 |
| 03 | 開發工作流程 |
| 04 | 專業化 Agent |
| 05 | 可擴充 Skill |
| 06 | 透過 MCP 連接外部資料 |
| 07 | 統一的生產工作流程 |
你現在已能將 GitHub Copilot CLI 作為開發流程中的真正倍增器。
你的學習不會在這裡結束:
做得好!現在去打造一些令人驚豔的東西吧。
| ← 回到第 06 章 | 回到課程首頁 → |