
如果 AI 能看到你的整個程式碼庫,而不是一次只看一個檔案,會怎樣?
本章將解鎖 GitHub Copilot CLI 的真正威力:上下文(Context)。你將學習使用 @ 語法來參照檔案和目錄,讓 Copilot CLI 深入理解你的程式碼庫。你將發現如何跨工作階段維護對話、幾天後從中斷處繼續工作,並親眼看到跨檔案分析如何找出單一檔案審查完全看不到的 bug。
完成本章後,你將能夠:
@ 語法參照檔案、目錄和圖片--resume 和 --continue 繼續先前的工作階段⏱️ 預估時間:約 50 分鐘(閱讀 20 分鐘 + 實作 30 分鐘)

就像你的同事一樣,Copilot CLI 不會讀心術。提供更多資訊能幫助人類和 Copilot 提供更有針對性的協助!
想像向同事說明一個 bug:
沒有上下文:「書籍應用程式壞了。」
有上下文:「看看
books.py,特別是find_book_by_title函式。它沒有做大小寫不敏感的比對。」
要向 Copilot CLI 提供上下文,請使用 @ 語法將 Copilot CLI 指向特定檔案。

本節涵蓋有效使用上下文所需的一切。請先掌握這些基礎。
@ 符號用於在提示中參照檔案和目錄,這是你告訴 Copilot CLI「看看這個檔案」的方式。
💡 備註:本課程所有範例都使用此儲存庫內附的
samples/資料夾,讓你可以直接嘗試每個指令。
你可以用電腦上的任何檔案嘗試:
copilot
# 指向你有的任何檔案
> Explain what @package.json does
> Summarize @README.md
> What's in @.gitignore and why?
💡 手邊沒有專案? 快速建立一個測試檔案:
echo "def greet(name): return 'Hello ' + name" > test.py copilot > What does @test.py do?
| 模式 | 功能 | 使用範例 |
|---|---|---|
@file.py |
參照單一檔案 | Review @samples/book-app-project/books.py |
@folder/ |
參照目錄中的所有檔案 | Review @samples/book-app-project/ |
@file1.py @file2.py |
參照多個檔案 | Compare @samples/book-app-project/book_app.py @samples/book-app-project/books.py |
copilot
> Explain what @samples/book-app-project/utils.py does
copilot
> Compare @samples/book-app-project/book_app.py and @samples/book-app-project/books.py for consistency
copilot
> Review all files in @samples/book-app-project/ for error handling
這正是上下文成為超能力的地方。單一檔案分析很有用,跨檔案分析則是革命性的。

copilot
> @samples/book-app-project/book_app.py @samples/book-app-project/books.py
>
> How do these files work together? What's the data flow?
💡 進階選項:若想進行以安全性為重點的跨檔案分析,可以試試 Python 安全性範例:
> @samples/buggy-code/python/user_service.py @samples/buggy-code/python/payment_processor.py > Find security vulnerabilities that span BOTH files
Copilot CLI 發現的內容:
Cross-Module Analysis
=====================
1. DATA FLOW PATTERN
book_app.py creates BookCollection instance and calls methods
books.py defines BookCollection class and manages data persistence
Flow: book_app.py (UI) → books.py (business logic) → data.json (storage)
2. DUPLICATE DISPLAY FUNCTIONS
book_app.py:9-21 show_books() function
utils.py:28-36 print_books() function
Impact: Two nearly identical functions doing the same thing. If you update
one (like changing the format), you must remember to update the other.
3. INCONSISTENT ERROR HANDLING
book_app.py handles ValueError from year conversion
books.py silently returns None/False on errors
Pattern: No unified approach to error handling across modules
為何重要:單一檔案審查會錯過全局。只有跨檔案分析才能揭示:

剛接觸新專案?用 Copilot CLI 快速了解它。
copilot
> @samples/book-app-project/
>
> In one paragraph, what does this app do and what are its biggest quality issues?
你會得到的內容:
This is a CLI book collection manager that lets users add, list, remove, and
search books stored in a JSON file. The biggest quality issues are:
1. Duplicate display logic - show_books() and print_books() do the same thing
2. Inconsistent error handling - some errors raise exceptions, others return False
3. No input validation - year can be 0, empty strings accepted for title/author
4. Missing tests - no test coverage for critical functions like find_book_by_title
Priority fix: Consolidate duplicate display functions and add input validation.
結果:原本需要一個小時閱讀程式碼的事,壓縮成 10 秒。你確切知道該把注意力放在哪裡。
copilot
> @samples/book-app-project/books.py Review this file for potential bugs
# Copilot CLI 現在擁有完整的檔案內容,可以給出具體回饋:
# "Line 49: Case-sensitive comparison may miss books..."
# "Line 29: JSON decode errors are caught but data corruption isn't logged..."
> What about @samples/book-app-project/book_app.py?
# 現在審查 book_app.py,但仍然知道 books.py 的上下文
copilot
> @samples/book-app-project/books.py What does this module do?
# Copilot CLI 讀取 books.py 並理解 BookCollection 類別
> @samples/book-app-project/ Give me an overview of the code structure
# Copilot CLI 掃描目錄並進行摘要
> How does the app save and load books?
# Copilot CLI 可以追蹤它已看過的程式碼
copilot
> @samples/book-app-project/book_app.py @samples/book-app-project/utils.py
> I see duplicate display functions: show_books() and print_books(). Help me consolidate these.
# Copilot CLI 看到兩個檔案,可以建議如何合併重複的程式碼
工作階段會在你工作時自動儲存,你可以繼續先前的工作階段從中斷處接著做。
每次對話都會自動儲存,只需正常離開:
copilot
> @samples/book-app-project/ Let's improve error handling across all modules
[... 進行一些工作 ...]
> /exit
# 從上次中斷的地方繼續
copilot --continue
# 從清單中互動式選擇工作階段
copilot --resume
# 或依 ID 繼續特定工作階段
copilot --resume abc123
為工作階段取有意義的名稱,以便日後找到:
copilot
> /rename book-app-review
# 工作階段已重新命名,方便識別
隨著你新增檔案和對話,Copilot CLI 的上下文視窗會逐漸填滿。以下兩個指令可以幫助你掌控狀況:
copilot
> /context
Context usage: 45,000 / 128,000 tokens (35%)
> /clear
# 清除上下文並重新開始。切換話題時使用
💡 何時使用
/clear:若你一直在審查books.py,想要切換去討論utils.py,請先執行/clear。否則舊話題的過時上下文可能會干擾新話題的回應。

工作階段在離開時自動儲存。幾天後繼續,完整上下文依然保留:檔案、問題和進度都被記住了。
想像這個跨越多天的工作流程:
# 週一:開始書籍應用程式審查
copilot
> /rename book-app-review
> @samples/book-app-project/books.py
> Review and number all code quality issues
Quality Issues Found:
1. Duplicate display functions (book_app.py & utils.py) - MEDIUM
2. No input validation for empty strings - MEDIUM
3. Year can be 0 or negative - LOW
4. No type hints on all functions - LOW
5. Missing error logging - LOW
> Fix issue #1 (duplicate functions)
# 進行修正工作...
> /exit
# 週三:從完全相同的地方繼續
copilot --continue
> What issues remain unfixed from our book app review?
Remaining issues from our book-app-review session:
2. No input validation for empty strings - MEDIUM
3. Year can be 0 or negative - LOW
4. No type hints on all functions - LOW
5. Missing error logging - LOW
Issue #1 (duplicate functions) was fixed on Monday.
> Let's tackle issue #2 next
強大之處:幾天後,Copilot CLI 仍然記得:
無需重新說明,無需重新讀取檔案,直接繼續工作。
🎉 你現在已掌握基礎知識! @ 語法、工作階段管理(--continue/--resume//rename)和上下文指令(/context//clear)已足以讓你高效工作。以下內容為選讀,準備好再回來探索。

以下主題建立在上述基礎之上。選擇你感興趣的,或直接跳到實作練習。
| 我想了解… | 跳至 |
|---|---|
| 萬用字元模式與進階工作階段指令 | 更多 @ 模式與工作階段指令 |
| 在多個提示中建立上下文 | 上下文感知對話 |
Token 上限與 /compact |
理解上下文視窗 |
| 如何選擇要參照的檔案 | 選擇要參照的內容 |
| 分析截圖與設計稿 | 使用圖片 |
*上下文視窗就像一張桌子:能放置的東西有限。檔案、對話歷史和系統提示都會佔用空間。*
#### 達到上限時會發生什麼
```bash
copilot
> /context
Context usage: 45,000 / 128,000 tokens (35%)
# 隨著你新增更多檔案和對話,這個數字會增長
> @large-codebase/
Context usage: 120,000 / 128,000 tokens (94%)
# 警告:即將達到上下文上限
> @another-large-file.py
Context limit reached. Older context will be summarized.
```
#### `/compact` 指令
當上下文快滿但又不想失去對話記錄時,`/compact` 可以摘要你的歷史記錄以釋放 token:
```bash
copilot
> /compact
# 摘要對話歷史,釋放上下文空間
# 你的重要發現和決策會被保留
```
#### 上下文效率技巧
| 情境 | 操作 | 原因 |
|------|------|------|
| 開始新話題 | `/clear` | 移除不相關的上下文 |
| 對話很長 | `/compact` | 摘要歷史,釋放 token |
| 需要特定檔案 | `@file.py` 而非 `@folder/` | 只載入需要的內容 |
| 達到上限 | 開始新工作階段 | 全新的 128K 上下文 |
| 多個話題 | 每個話題用 `/rename` | 方便繼續正確的工作階段 |
#### 大型程式碼庫的最佳實踐
1. **精確指定**:用 `@samples/book-app-project/books.py` 而非 `@samples/book-app-project/`
2. **話題間清除**:切換重點時使用 `/clear`
3. **使用 `/compact`**:摘要對話以釋放上下文
4. **使用多個工作階段**:每個功能或話題一個工作階段

是時候應用你的上下文與工作階段管理技能了。
本課程包含你可以直接審查的範例檔案。啟動 Copilot 並執行以下提示:
copilot
> @samples/book-app-project/ Give me a code quality review of this project
# Copilot CLI 會找出以下問題:
# - 重複的顯示函式
# - 缺少輸入驗證
# - 不一致的錯誤處理
💡 想用自己的檔案試試? 建立一個小型 Python 專案(
mkdir -p my-project/src),新增一些 .py 檔案,然後用@my-project/src/來審查它們。如果需要,你可以請 Copilot 為你建立範例程式碼!
copilot
> /rename book-app-review
> @samples/book-app-project/books.py Let's add input validation for empty titles
[Copilot CLI 建議驗證方式]
> Implement that fix
> Now consolidate the duplicate display functions in @samples/book-app-project/
> /exit
# 稍後——從上次中斷的地方繼續
copilot --continue
> Generate tests for the changes we made
完成示範後,試試這些變化:
copilot
> @samples/book-app-project/book_app.py @samples/book-app-project/books.py
> What's the relationship between these files? Are there any code smells?
工作階段挑戰:開始一個工作階段,用 /rename my-first-session 命名,做些事情,用 /exit 離開,然後執行 copilot --continue。它記得你在做什麼嗎?
/context。你使用了多少 token?試試 /compact 後再次確認。(更多關於 /compact 的說明請見「深入探索」中的理解上下文視窗。)自我檢驗:當你能解釋為何 @folder/ 比個別開啟每個檔案更強大時,你就掌握了上下文的精髓。
實作範例專注於程式碼品質審查和輸入驗證。現在在不同任務上練習相同的上下文技能——追蹤資料如何在應用程式中流動:
copilotbooks.py 和 book_app.py:
@samples/book-app-project/books.py @samples/book-app-project/book_app.py Trace how a book goes from user input to being saved in data.json. What functions are involved at each step?@samples/book-app-project/data.json What happens if this JSON file is missing or corrupted? Which functions would fail?@samples/book-app-project/books.py @samples/book-app-project/utils.py Suggest a consistent error-handling strategy that works across both files./rename data-flow-analysis/exit 離開,然後用 copilot --continue 繼續,並就資料流提出後續問題成功標準:你能夠追蹤跨多個檔案的資料流、繼續已命名的工作階段,並取得跨檔案的改善建議。