讓聊天成為您工作區的專家
當聊天能夠深入理解您的整個程式碼庫,而不僅僅是單個檔案時,其幫助將大大提高。工作區上下文是使 AI 能夠搜尋您的專案、理解元件之間的連線方式以及提供基於實際程式碼的答案的底層機制。這使您能夠提出諸如“身份驗證在哪裡處理?”或“如何新增新的 API 端點?”之類的廣泛問題,並獲得基於您特定程式碼庫的準確答案。
本文解釋了工作區上下文的工作原理、如何管理工作區索引以獲得最佳結果,以及如何在提示中使用 @workspace 和 #codebase 來利用它。
工作區上下文背後的智慧會根據您專案的規模和設定自動調整,確保無論您是在處理小型個人專案還是大型企業程式碼庫,都能獲得準確的結果。
工作區上下文的工作原理
VS Code 使用智慧搜尋策略來查詢與您的問題最相關的程式碼。它不是使用單一方法,而是根據您的專案規模和可用資源自動選擇最佳方法。VS Code 可能會並行執行多種策略,然後選擇最快產生最佳結果的策略。
用於上下文的內容來源是什麼?
工作區上下文搜尋的來源與開發人員在 VS Code 中導航程式碼庫時使用的來源相同
- 工作區中所有 可索引檔案(工作區索引),除了被
.gitignore檔案忽略的檔案 - 具有巢狀資料夾和檔名目錄結構
- 程式碼符號和定義(類、函式、變數)
- 當前選定的文字或活動編輯器中可見的文字
工作區索引可以由 GitHub 遠端維護,也可以儲存在您的本地計算機上。有關更多詳細資訊,請參閱 工作區索引 部分。
如果您打開了一個檔案,或者在一個被忽略的檔案中選中了文字,.gitignore 將會被繞過。
搜尋策略
對於小型專案,整個工作區可以直接包含在聊天上下文中。對於大型專案,VS Code 使用不同的策略來查詢最相關的資訊並將其包含在您的提示的聊天上下文中。
以下步驟概述了 VS Code 如何構建工作區上下文
-
確定回答您的問題需要工作區的哪些資訊,還包括對話歷史記錄、工作區結構和當前編輯器選擇。
-
使用各種方法從 工作區索引 中收集相關的程式碼片段
- GitHub 的程式碼搜尋
- 本地語義搜尋,用於查詢與您問題的含義匹配的程式碼,而不僅僅是精確的關鍵字
- 基於文字的檔名和內容搜尋
- VS Code 的語言 IntelliSense,用於新增函式簽名、引數等詳細資訊。
-
如果生成的上下文過大,無法放入上下文視窗,則只保留最相關的部分。
工作區索引
VS Code 中的聊天使用索引來快速準確地搜尋您的程式碼庫以查詢相關的程式碼片段。此索引可以由 GitHub 維護,也可以儲存在您的本地計算機上。
遠端索引是從 GitHub 或 Azure DevOps 上儲存庫的已提交狀態構建的。這意味著您本地工作區中的任何未提交更改都不包含在遠端索引中。
當您有本地未提交的更改時,VS Code 會使用一種混合方法,結合遠端索引和本地檔案跟蹤。VS Code 會檢測自索引提交以來哪些檔案已被修改,還會從編輯器中讀取當前檔案內容以獲取即時內容。
您可以在 VS Code 狀態列中的 Copilot 狀態儀表板中檢視正在使用的索引型別及其索引狀態。

遠端索引
VS Code 可以使用遠端程式碼搜尋索引,使 AI 能夠快速搜尋您的程式碼庫,即使對於大型程式碼庫也是如此。遠端程式碼搜尋目前適用於使用 GitHub 或 Azure DevOps 儲存庫的工作區。
GitHub 遠端索引
VS Code 會自動為工作區中的任何 GitHub 支援的儲存庫構建和使用遠端程式碼搜尋索引。在 VS Code 中登入您的 GitHub 帳戶,聊天將自動開始使用任何可用的遠端程式碼搜尋索引。
儲存庫在聊天中首次使用 @workspace 或 #codebase 時會自動索引。您還可以透過在命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中執行構建遠端工作區索引命令來強制索引。
每個儲存庫只需構建一次索引。之後,索引會自動保持最新。對於小型和中型專案,構建索引速度很快,但如果您的儲存庫包含數十萬個檔案,則可能需要一些時間。如果 GitHub 擁有相對最新的程式碼版本,遠端索引效果也最好,因此請確保定期將您的程式碼推送到 GitHub。
目前,遠端索引適用於託管在 GitHub.com 或 GitHub Enterprise Cloud 上的 GitHub 儲存庫。不支援使用 GitHub Enterprise Server 的儲存庫。
Azure DevOps 遠端索引
VS Code 還可以為 Azure DevOps 儲存庫使用遠端索引。這些索引會自動構建和維護。在 VS Code 中登入您的 Microsoft 帳戶,聊天將開始使用遠端索引。檢視 Copilot 狀態列項以瞭解當前的索引狀態,並在您的帳戶沒有訪問 Azure DevOps 儲存庫的正確許可權時獲取登入連結。
本地索引
如果您無法使用 遠端索引(例如,因為您沒有使用 GitHub 或 Azure DevOps 儲存庫),VS Code 可以使用儲存在您本地計算機上的高階語義索引來提供快速、高質量的搜尋結果。目前,本地索引限制為 2500 個可索引檔案。
構建本地索引
-
專案包含少於 750 個可索引檔案:VS Code 會自動構建高階本地索引。
-
專案包含 750 到 2500 個可索引檔案:在命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中執行構建本地工作區索引命令 - 這應該只執行一次。
-
專案包含超過 2500 個可索引檔案:使用 基本索引。
構建初始本地索引或更新索引(例如切換 git 分支時更改了很多檔案)可能需要一些時間。您可以在狀態列中的 Copilot 狀態儀表板中監控當前的本地索引狀態。
基本索引
如果您的專案沒有 遠端索引,並且包含超過 2500 個 可索引檔案,VS Code 將回退到使用基本索引來搜尋您的程式碼庫。此索引使用更簡單的演算法來搜尋您的程式碼庫,並且針對大型程式碼庫在本地執行進行了最佳化。
基本索引對於許多型別的聊天提示應該效果很好。但是,如果您發現聊天在回答有關程式碼庫的問題時遇到困難,請考慮升級到 遠端索引。
工作區索引包含哪些內容
VS Code 會索引您當前專案中相關的文字檔案。這不限於特定檔案型別或程式語言,但是 VS Code 會自動跳過一些通常與工作區問題無關的常見檔案型別,例如 .tmp 或 .out 檔案。
工作區索引還會排除任何被 files.exclude 設定排除在 VS Code 之外的檔案,或者屬於 .gitignore 檔案的一部分的檔案。
VS Code 目前也不會索引二進位制檔案,例如圖片或 PDF。
在聊天中使用工作區上下文
當您在聊天中提出與工作區相關的問題時,確定工作區上下文的行為取決於您使用的是哪個代理
-
代理/計劃
在使用代理時,代理會根據您的提示自動執行代理式程式碼庫搜尋。這意味著在執行初始搜尋以確定工作區上下文後,根據結果,代理可能會決定執行其他更具針對性的搜尋以收集回答您問題所需的資訊。
您無需在提示中顯式引用
#codebase工具,但如果您想確保工作區上下文用於您的問題,可以這樣做。如果您的提示含糊不清,可能被解釋為不需要工作區上下文,則此功能很有用。 -
提問/編輯
在“提問”或“編輯”中,VS Code 會對您的提示進行意圖檢測,以確定它是否需要工作區上下文。如果需要工作區上下文,VS Code 會執行程式碼庫搜尋並將相關的程式碼片段新增到聊天上下文中。與使用代理不同,不會執行後續搜尋。
您無需在提示中顯式引用
#codebase工具,但如果您想確保工作區上下文用於您的問題,可以這樣做。如果您的提示含糊不清,可能被解釋為不需要工作區上下文,則此功能很有用。
使用工作區上下文的技巧
您提問的方式會顯著影響上下文的質量和響應的準確性。為了最佳化結果,請考慮以下技巧
- 在問題中要具體和詳細,避免使用模糊不清的術語,例如“這是做什麼的”,因為“這”可能被解釋為最後一次回答、當前檔案或整個專案。
- 在提示中包含可能出現在您的程式碼或其文件中的術語和概念。
- 透過選擇程式碼、引用檔案或#-提及上下文項(如除錯上下文、終端輸出等)來顯式包含相關上下文。
- 響應可以從多個引用中提取,例如“查詢沒有 catch 塊的異常”或“提供 handleError 被呼叫的示例”。但是,不要期望對程式碼庫進行全面的程式碼分析,例如“這個函式呼叫了多少次?”或“修復這個專案中的所有錯誤”。
- 當詢問程式碼以外的資訊時,例如“誰貢獻了這份檔案?”或“總結這個資料夾的評審評論”,請確保在使用代理時配置相關的工具或 MCP 伺服器。
私有儲存庫
為了使私有儲存庫的更多工作區搜尋功能生效,我們需要額外的許可權。如果我們檢測到我們還沒有這些許可權,我們會在啟動時請求它們。獲得授權後,我們將安全地儲存會話以備將來使用。

在 GitHub Copilot Trust Center 中瞭解有關安全、隱私和透明度的更多資訊。
常見問題
@workspace 和 #codebase 有什麼區別?
從概念上講,@workspace 和 #codebase 都使您能夠詢問有關整個程式碼庫的問題。但是,在如何使用它們方面存在一些差異
-
@workspace是一個聊天參與者@workspace參與者是主題專家,專門負責回答有關您程式碼庫的問題。語言模型將整個聊天提示轉交給參與者,參與者利用其對程式碼庫的知識來提供答案。在使用聊天參與者時,語言模型無法執行任何額外的處理或呼叫其他工具。一個聊天提示只能包含一個聊天參與者。 -
#codebase是一個聊天工具#codebase工具專門用於搜尋您的程式碼庫以獲取相關資訊。它是語言模型在回答您的聊天提示時可以呼叫的一種工具。語言模型可以決定多次呼叫#codebase工具,並與其他工具交錯使用,以收集回答您問題所需的資訊。一個聊天提示可以包含多個工具。
建議在您的聊天提示中使用 #codebase,因為它提供了更大的靈活性。