Copilot 如何理解您的工作區

Copilot 代理程式會搜尋您的整個程式碼庫,以理解各元件之間的連結方式,並根據您的實際程式碼提供答案。您可以提出廣泛的問題,例如「驗證在哪裡處理?」或「為清單端點新增測試?」,並根據您的程式碼庫取得準確的答案和修改。

本文解釋了 Copilot 如何理解您的程式碼庫,包括它用於搜尋程式碼的不同工具以及為實現快速搜尋而建立的索引。這些通用方法適用於所有程式碼庫,從僅有五個檔案到擁有五十萬個檔案的程式碼庫皆然。

搜尋與讀取工具

當您傳送提示時,Copilot 會分析所需的資訊,並自動選擇適當的搜尋工具組合,以回答您的問題或開始生成程式碼編輯。為此,Copilot 會執行多個工具,審查結果,並自動執行後續搜尋,直到對問題有充分的理解。

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

  1. 使用 語意搜尋 在專案中尋找與支付相關的程式碼。
  2. 使用 grep 在程式碼庫中尋找現有的錯誤處理模式。
  3. 使用 用法 來追蹤支付函式如何被呼叫。
  4. 使用 檔案搜尋 來定位相關的組態和測試檔案。
  5. 讀取相關檔案並進行協調的變更。

這種迭代方法意味著代理程式以開發人員相同的方式收集上下文:透過從多個角度探索程式碼庫,直到它有完整的了解。

代理程式可以存取以下內建搜尋工具。您也可以在提示中明確地引用這些工具,方法是輸入 # 後接著工具名稱。

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

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

代理程式可存取的內容

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

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

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

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

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

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

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

語意索引來源

  • GitHub 儲存庫:GitHub 會自動索引您工作區中的 GitHub 儲存庫。登入您的 GitHub 帳戶即可使用它們。此索引每個儲存庫只需建置一次,這意味著它通常立即可用。GitHub 會在需要時建置並更新此索引。這對於中小型專案來說速度很快,但如果您的儲存庫包含數十萬個檔案,可能需要一些時間。遠端索引適用於託管在 GitHub.com 或 GitHub Enterprise Cloud 上的儲存庫。它不支援 GitHub Enterprise Server。

  • Azure DevOps 儲存庫:索引會自動建置和維護。請在 VS Code 中登入您的 Microsoft 帳戶,讓 Copilot 開始使用索引。請檢查 Copilot 狀態列項目以了解目前的索引狀態。

  • 其他程式碼:Copilot 還可以透過稱為「外部擷取 (External Ingest)」的功能,為不在 GitHub 或 Azure DevOps 儲存庫中的程式碼建立語意索引。這需要付費的 Copilot 訂閱。對外部擷取的支援正逐步向所有使用者推出。

語意索引中包含的內容

VS Code 會索引屬於您目前專案的相關文字檔案。這不限於特定的檔案類型或程式語言。VS Code 會自動跳過一些通常不相關的常見檔案類型,例如 .tmp.out 檔案。

工作區索引也排除被 files.exclude Open in VS Code Open in VS Code Insiders 設定或 .gitignore 檔案從 VS Code 中排除的檔案。

二進位檔案,例如影像或 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.