Copilot 如何理解您的工作區
Copilot 代理程式會搜尋您的整個程式碼庫,以理解元件之間的關聯,並根據您實際的程式碼提供具備基礎的答案。您可以使用廣泛的提示詞,例如「驗證功能在哪裡處理?」或「為清單端點新增測試」,並根據您的程式碼庫獲得準確的答案與編輯建議。
本文說明 Copilot 如何理解您的程式碼庫,包括它用來搜尋程式碼的不同工具,以及為實現快速搜尋而建立的索引。這些通用的方法適用於所有程式碼庫,無論是只有五個檔案的專案,還是包含 50 萬個檔案的專案。
搜尋與讀取工具
當您發送提示詞時,Copilot 會分析它需要哪些資訊,並自動選擇合適的搜尋工具組合,以回答您的問題或開始產生程式碼編輯。Copilot 會為此執行多種工具、審閱結果,並自動執行後續搜尋,直到它對問題有充分的理解。
例如,當被要求「將錯誤處理新增至付款服務」時,代理程式可能會:
- 使用語意搜尋 (semantic search) 在專案中尋找與付款相關的程式碼。
- 使用 grep 在程式碼庫中尋找現有的錯誤處理模式。
- 使用 usages (使用方式) 來追蹤付款函式的呼叫方式。
- 使用 檔案搜尋 (file search) 定位相關的設定檔與測試檔。
- 讀取相關檔案並進行協調的變更。
這種迭代方法意味著代理程式會以開發人員相同的方式收集上下文:透過多角度探索程式碼庫,直到獲得完整的樣貌。
代理程式可以使用下列內建搜尋工具。您也可以透過輸入 # 後接工具名稱,在提示詞中明確參考這些工具。
| 工具 | 說明 |
|---|---|
語意搜尋 (#codebase) |
尋找符合您問題意涵的程式碼,而不僅僅是精確的關鍵字。需要 工作區索引。 |
| 文字搜尋 | 搜尋檔案內容中的文字匹配,例如特定的關鍵字。 |
| Grep | 在檔案中搜尋精確的文字或正規表示式模式。無需索引即可運作。 |
| 檔案搜尋 | 按名稱或 Glob 模式尋找檔案。 |
| Usages (使用方式) | 結合「尋找所有參考」、「尋找實作」與「前往定義」,以追蹤符號在不同檔案間的使用方式。 |
| 列出目錄 | 列出目錄內容以探索專案結構。 |
| 讀取檔案 | 讀取特定檔案的內容以詳細檢查其程式碼。 |
這些工具適用於任何大小的工作區。對於小型專案,整個工作區可以直接讀取到代理程式的上下文中。對於較大型的專案,代理程式會根據您的專案規模與可用資源,選擇最有效率的搜尋策略。
搜尋工作區之外的 GitHub 儲存庫
除了搜尋目前的工作區外,代理程式還可以搜尋其他 GitHub 儲存庫中的程式碼。當代理程式需要了解未在本地開啟的程式碼庫時,這非常有用,例如查詢上游程式庫中的 API 或比較不同儲存庫之間的實作。
| 工具 | 說明 |
|---|---|
語意搜尋 GitHub 儲存庫 (#githubRepo) |
對 GitHub 儲存庫進行語意搜尋,以獲取相關的原始程式碼片段。請使用 owner/repo 指定儲存庫。 |
GitHub 文字搜尋 (#githubTextSearch) |
對 GitHub 儲存庫或組織進行文字搜尋,以尋找包含特定關鍵字或程式碼模式的檔案。 |
若需要更進階的 GitHub 工作流程(例如搜尋與管理 Issue 或 Pull Request),請使用 GitHub MCP 伺服器。
代理程式可存取的內容
代理程式會搜尋開發人員在導覽程式碼庫時會使用的相同來源:
- 工作區中所有 可索引的檔案,除了被
.gitignore檔案忽略的檔案外 - 包含巢狀資料夾與檔案名稱的目錄結構
- 程式碼符號與定義(類別、函式、變數)
- 目前選取的文字或活動編輯器中可見的文字
- 對話記錄與先前的工具結果
如果您開啟了某個檔案或在被忽略的檔案中選取了文字,則會繞過 .gitignore 的限制。
語意搜尋 (Semantic search)
語意搜尋工具 (#codebase) 是按意義而非精確關鍵字來尋找程式碼。
語意搜尋需要建立並維護索引,以便即使在非常大的程式碼庫上也能快速執行。Copilot 會自動為您維護此索引。在幕後,索引的部分內容可能儲存在您的機器上,部分可能來自遠端來源,但您不需要管理這些區別。
您可以在 VS Code 狀態列的 Copilot 狀態儀表板中檢視索引狀態。

語意索引來源
Copilot 會自動為任何工作區建立並維護語意索引。索引來源決定了索引首次可用的速度:
-
GitHub 儲存庫:GitHub 會索引您工作區中的 GitHub 儲存庫。請使用您的 GitHub 帳號登入以使用它們。此索引每個儲存庫只需建立一次,這意味著它通常可立即使用。GitHub 會在需要時建立並更新此索引。這對於中小型專案很快,但如果您的儲存庫包含數十萬個檔案,可能需要一些時間。遠端索引適用於託管在 GitHub.com 或 GitHub Enterprise Cloud 上的儲存庫。GitHub Enterprise Server 不支援此功能。
-
Azure DevOps 儲存庫:索引會自動建立並維護。請在 VS Code 中使用您的 Microsoft 帳號登入,以便 Copilot 開始使用該索引。請檢查 Copilot 狀態列項目以查看目前的索引狀態。
-
其他工作區:對於任何其他工作區(包括非 GitHub 或 Azure DevOps 儲存庫的本地資料夾),Copilot 會為您建立語意索引。初始建立可能需要幾分鐘,之後索引會在背景保持更新。此功能目前已對個人帳戶啟用,但對於組織與企業使用者預設為關閉。請參閱 GitHub 文件,以取得有關如何使用原則啟用此功能的更多詳細資訊。
若要按需為目前工作區建立或重建索引,請從命令面板執行 Build Codebase semantic index 指令。
語意索引包含哪些內容
VS Code 會索引您目前專案中相關的文字檔案。這不限於特定的檔案類型或程式語言。VS Code 會自動跳過一些通常不相關的常見檔案類型,例如 .tmp 或 .out 檔案。
工作區索引也會排除那些被 VS Code files.exclude 設定所排除的檔案,或被 .gitignore 檔案排除的檔案。
二進位檔案(例如圖片或 PDF)不會被索引。
獲得更好結果的技巧
您陳述提示詞的方式會影響代理程式使用的工具以及結果的品質。
- 具體一點:避免使用諸如「這做了什麼?」之類含糊的詞彙,因為「這」可能指最後一個答案、目前檔案或整個專案。
- 使用程式碼術語:使用您程式碼中出現的函式名稱、類別名稱與概念,以便代理程式找到精確的匹配項。
- 手動新增上下文:選取程式碼、參考檔案,或 使用 #-提及上下文項目,例如除錯上下文、終端機輸出等。
- 界定您的請求範圍:回應可以參考多個來源,例如「尋找沒有 catch 區塊的例外」。但不要期待它能進行完整的程式碼庫分析,例如「這個函式被呼叫了幾次?」
- 使用外部工具處理非程式碼問題:對於諸如「誰為這個檔案做出了貢獻?」之類的資訊,請設定相關的 工具或 MCP 伺服器。
私人儲存庫
若要對私人儲存庫使用語意搜尋,Copilot 可能需要額外的權限。如果尚未授予這些權限,VS Code 會在啟動時詢問。一旦授予,工作階段將會安全地儲存以供日後使用。

在 GitHub Copilot 信任中心 深入了解安全性、隱私權與透明度。
常見問題
我需要在提示詞中使用 #codebase 嗎?
不需要。代理程式會在合理的情況下自動使用語意搜尋。您不需要將 #codebase 新增至您的提示詞中。
#codebase 工具始終是語意化的,並提供一致的結果。如果您想針對特定提示詞強制進行語意搜尋,仍然可以將 #codebase 新增為 上下文項目。
如果我的工作區沒有進行語意索引會發生什麼事?
大多數工作區都會自動建立索引,但如果索引尚未可用(例如,當新的本地工作區仍在建立初始索引時),代理程式仍會透過使用文字搜尋、grep、檔案搜尋與語言智慧有效地搜尋您的程式碼。工作區索引啟用了語意搜尋,它按意義而非關鍵字來尋找程式碼。沒有它,代理程式會依賴其他搜尋工具,對於大多數提示詞仍能提供準確的結果。我們發現這些其他工具仍然能提供很棒的結果。