Copilot 如何理解您的工作區

Copilot 代理程式會搜尋您的整個程式碼庫,以理解元件之間的關聯,並根據您實際的程式碼提供具備基礎的答案。您可以使用廣泛的提示詞,例如「驗證功能在哪裡處理?」或「為清單端點新增測試」,並根據您的程式碼庫獲得準確的答案與編輯建議。

本文說明 Copilot 如何理解您的程式碼庫,包括它用來搜尋程式碼的不同工具,以及為實現快速搜尋而建立的索引。這些通用的方法適用於所有程式碼庫,無論是只有五個檔案的專案,還是包含 50 萬個檔案的專案。

搜尋與讀取工具

當您發送提示詞時,Copilot 會分析它需要哪些資訊,並自動選擇合適的搜尋工具組合,以回答您的問題或開始產生程式碼編輯。Copilot 會為此執行多種工具、審閱結果,並自動執行後續搜尋,直到它對問題有充分的理解。

例如,當被要求「將錯誤處理新增至付款服務」時,代理程式可能會:

  1. 使用語意搜尋 (semantic search) 在專案中尋找與付款相關的程式碼。
  2. 使用 grep 在程式碼庫中尋找現有的錯誤處理模式。
  3. 使用 usages (使用方式) 來追蹤付款函式的呼叫方式。
  4. 使用 檔案搜尋 (file search) 定位相關的設定檔與測試檔。
  5. 讀取相關檔案並進行協調的變更。

這種迭代方法意味著代理程式會以開發人員相同的方式收集上下文:透過多角度探索程式碼庫,直到獲得完整的樣貌。

代理程式可以使用下列內建搜尋工具。您也可以透過輸入 # 後接工具名稱,在提示詞中明確參考這些工具。

工具 說明
語意搜尋 (#codebase) 尋找符合您問題意涵的程式碼,而不僅僅是精確的關鍵字。需要 工作區索引
文字搜尋 搜尋檔案內容中的文字匹配,例如特定的關鍵字。
Grep 在檔案中搜尋精確的文字或正規表示式模式。無需索引即可運作。
檔案搜尋 按名稱或 Glob 模式尋找檔案。
Usages (使用方式) 結合「尋找所有參考」、「尋找實作」與「前往定義」,以追蹤符號在不同檔案間的使用方式。
列出目錄 列出目錄內容以探索專案結構。
讀取檔案 讀取特定檔案的內容以詳細檢查其程式碼。

這些工具適用於任何大小的工作區。對於小型專案,整個工作區可以直接讀取到代理程式的上下文中。對於較大型的專案,代理程式會根據您的專案規模與可用資源,選擇最有效率的搜尋策略。

搜尋工作區之外的 GitHub 儲存庫

除了搜尋目前的工作區外,代理程式還可以搜尋其他 GitHub 儲存庫中的程式碼。當代理程式需要了解未在本地開啟的程式碼庫時,這非常有用,例如查詢上游程式庫中的 API 或比較不同儲存庫之間的實作。

工具 說明
語意搜尋 GitHub 儲存庫 (#githubRepo) 對 GitHub 儲存庫進行語意搜尋,以獲取相關的原始程式碼片段。請使用 owner/repo 指定儲存庫。
GitHub 文字搜尋 (#githubTextSearch) 對 GitHub 儲存庫或組織進行文字搜尋,以尋找包含特定關鍵字或程式碼模式的檔案。

若需要更進階的 GitHub 工作流程(例如搜尋與管理 Issue 或 Pull Request),請使用 GitHub MCP 伺服器

代理程式可存取的內容

代理程式會搜尋開發人員在導覽程式碼庫時會使用的相同來源:

  • 工作區中所有 可索引的檔案,除了被 .gitignore 檔案忽略的檔案外
  • 包含巢狀資料夾與檔案名稱的目錄結構
  • 程式碼符號與定義(類別、函式、變數)
  • 目前選取的文字或活動編輯器中可見的文字
  • 對話記錄與先前的工具結果
重要

如果您開啟了某個檔案或在被忽略的檔案中選取了文字,則會繞過 .gitignore 的限制。

語意搜尋工具 (#codebase) 是按意義而非精確關鍵字來尋找程式碼。

語意搜尋需要建立並維護索引,以便即使在非常大的程式碼庫上也能快速執行。Copilot 會自動為您維護此索引。在幕後,索引的部分內容可能儲存在您的機器上,部分可能來自遠端來源,但您不需要管理這些區別。

您可以在 VS Code 狀態列的 Copilot 狀態儀表板中檢視索引狀態。

Screenshot showing the workspace index status in the Copilot status menu.

語意索引來源

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 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定所排除的檔案,或被 .gitignore 檔案排除的檔案。

二進位檔案(例如圖片或 PDF)不會被索引。

獲得更好結果的技巧

您陳述提示詞的方式會影響代理程式使用的工具以及結果的品質。

  • 具體一點:避免使用諸如「這做了什麼?」之類含糊的詞彙,因為「這」可能指最後一個答案、目前檔案或整個專案。
  • 使用程式碼術語:使用您程式碼中出現的函式名稱、類別名稱與概念,以便代理程式找到精確的匹配項。
  • 手動新增上下文:選取程式碼、參考檔案,或 使用 #-提及上下文項目,例如除錯上下文、終端機輸出等。
  • 界定您的請求範圍:回應可以參考多個來源,例如「尋找沒有 catch 區塊的例外」。但不要期待它能進行完整的程式碼庫分析,例如「這個函式被呼叫了幾次?」
  • 使用外部工具處理非程式碼問題:對於諸如「誰為這個檔案做出了貢獻?」之類的資訊,請設定相關的 工具或 MCP 伺服器

私人儲存庫

若要對私人儲存庫使用語意搜尋,Copilot 可能需要額外的權限。如果尚未授予這些權限,VS Code 會在啟動時詢問。一旦授予,工作階段將會安全地儲存以供日後使用。

Modal window asking for additional authentication for a private repository.

GitHub Copilot 信任中心 深入了解安全性、隱私權與透明度。

常見問題

我需要在提示詞中使用 #codebase 嗎?

不需要。代理程式會在合理的情況下自動使用語意搜尋。您不需要將 #codebase 新增至您的提示詞中。

#codebase 工具始終是語意化的,並提供一致的結果。如果您想針對特定提示詞強制進行語意搜尋,仍然可以將 #codebase 新增為 上下文項目

如果我的工作區沒有進行語意索引會發生什麼事?

大多數工作區都會自動建立索引,但如果索引尚未可用(例如,當新的本地工作區仍在建立初始索引時),代理程式仍會透過使用文字搜尋、grep、檔案搜尋與語言智慧有效地搜尋您的程式碼。工作區索引啟用了語意搜尋,它按意義而非關鍵字來尋找程式碼。沒有它,代理程式會依賴其他搜尋工具,對於大多數提示詞仍能提供準確的結果。我們發現這些其他工具仍然能提供很棒的結果。

© . This site is unofficial and not affiliated with Microsoft.