讓聊天成為您工作區中的專家
要在聊天中詢問有關整個程式碼庫的問題,您可以在聊天提示中引用 @workspace
或 #codebase
。根據問題,聊天會智慧地檢索相關檔案和符號,然後在其回答中以連結和程式碼示例的形式引用它們。
@workspace
和 #codebase
之間有什麼區別?
從概念上講,@workspace
和 #codebase
都允許您詢問有關整個程式碼庫的問題。但是,它們的使用方式有一些區別。
-
@workspace
- 聊天參與者,專門回答有關程式碼庫的問題。
- 控制使用者提示並使用程式碼庫提供答案。
- 無法呼叫其他工具。
- 只能在詢問模式下使用。
- 示例:
"@workspace how can I validate a date?"
-
#codebase
- 根據使用者提示執行程式碼庫搜尋並將相關程式碼作為上下文新增到聊天提示的工具。
- LLM 仍處於控制狀態,可以將其與其他工具結合用於編輯場景。
- 可在所有聊天模式下使用(詢問、編輯和代理)。
- 示例:
"add a tooltip to this button, consistent with other button #codebase"
,"add unit tests and run them #codebase"
建議在聊天提示中使用 #codebase
,因為它提供了更大的靈活性。
啟用 github.copilot.chat.codesearch.enabled,以使 #codebase
在查詢相關程式碼片段時更有效。此設定預設啟用。
提示示例
- 在程式碼庫中查詢現有程式碼
"@workspace where is database connecting string configured?"
- 解釋資料庫連線的配置位置和方式"@workspace how can I validate a date?"
- 在程式碼庫中查詢現有日期驗證助手"@workspace where are tests defined?"
- 提供測試套件、案例以及相關引用和配置的位置
- 為複雜的程式碼編輯制定計劃
"@workspace how can I add a rich tooltip to a button?"
- 提供使用現有工具提示元件與按鈕元素的計劃"@workspace add a new API route for the forgot password form"
- 概述新路由的新增位置以及如何將其連線到現有程式碼
- 解釋程式碼庫中的高階概念
"@workspace how is authentication implemented?"
- 身份驗證流程概述和相關程式碼的引用"@workspace which API routes depend on this service?"
- 列出使用所選程式碼中服務的路由"How do I build this #codebase?"
- 根據文件、指令碼和配置列出構建專案的步驟
使用哪些來源作為上下文?
為了回答您的問題,工作區上下文會搜尋開發人員在 VS Code 中導航程式碼庫時會使用的相同來源
- 工作區中所有可索引檔案,除了被
.gitignore
檔案忽略的檔案 - 帶有巢狀資料夾和檔名的目錄結構
- 一個遠端程式碼搜尋索引。這允許 Copilot 快速搜尋程式碼中相關的程式碼片段,而無需構建本地索引。
- 工作區中的符號和定義
- 活動編輯器中當前選定的文字或可見文字
如果您打開了檔案或在被忽略的檔案中選擇了文字,則 .gitignore
將被繞過。
@workspace
如何找到最相關的上下文
您的完整 VS Code 工作區可能太大,無法完全傳遞給 GitHub Copilot 以響應您的聊天提示。相反,@workspace
會從不同的上下文來源中提取最相關的資訊,以作為 Copilot 回答的基礎。
首先,@workspace
確定回答您問題所需的資訊,其中還包括對話歷史、工作區結構和當前選定的程式碼。
接下來,它使用不同的方法收集上下文,例如透過本地搜尋或使用 GitHub 的程式碼搜尋查詢相關程式碼片段,以及使用 VS Code 的語言 IntelliSense 新增函式簽名、引數等詳細資訊。
最後,GitHub Copilot 使用此上下文來回答您的問題。如果上下文太大,則只使用上下文中最重要的部分。響應會用檔案、檔案範圍和符號的引用進行標記。這使您能夠直接從聊天響應連結到程式碼庫中的相應資訊。提供給 Copilot 的程式碼片段在響應中列為引用。
管理工作區索引
Copilot 使用索引來快速準確地搜尋程式碼庫中的相關程式碼片段。此索引可以由 GitHub 維護,也可以本地儲存在您的計算機上。
您可以在狀態列的 Copilot 狀態儀表板中檢視索引型別和其狀態。
遠端索引
Copilot 可以使用遠端程式碼搜尋索引,使 AI 即使對於大型程式碼庫也能快速搜尋您的程式碼庫。遠端程式碼搜尋目前適用於使用 GitHub 或 Azure DevOps 儲存庫的工作區。
GitHub 遠端索引
Copilot 會自動為工作區中任何由 GitHub 支援的儲存庫構建和使用遠端程式碼搜尋索引。您只需在 VS Code 中使用 GitHub 帳戶登入,Copilot 就會自動開始使用任何可用的遠端程式碼搜尋索引。
狀態列中的 Copilot 條目顯示當前索引狀態。儲存庫會在第一次使用 @workspace
或 #codebase
時自動索引。您還可以透過在命令面板 (kb(workbench.action.showCommands))
) 中執行 Build Remote Workspace Index 命令來強制索引。
每個儲存庫只需構建一次索引。之後,索引會自動保持最新。對於中小型專案,構建索引速度很快,但如果您的儲存庫包含數十萬個檔案,則可能需要一些時間。
目前,遠端索引適用於託管在 GitHub.com 或 GitHub Enterprise Cloud 上的儲存庫。它不支援使用 GitHub Enterprise Server 的儲存庫。如果 GitHub 具有相對最新的程式碼版本,則遠端索引效果也最好,因此請務必定期將程式碼推送到 GitHub。
Azure DevOps 遠端索引
Copilot 還可以使用 Azure DevOps 儲存庫的遠端索引。這些索引會自動構建和維護。您只需使用您的 Microsoft 帳戶登入即可。檢查 Copilot 狀態列專案以獲取當前索引狀態或登入連結(如果您的帳戶沒有訪問 Azure DevOps 儲存庫的正確許可權)。
本地索引
如果您無法使用遠端索引,Copilot 可以使用儲存在本地計算機上的高階語義索引來提供快速、高質量的搜尋結果。目前,本地索引限於 2500 個可索引檔案。
構建本地索引
-
專案有少於 750 個可索引檔案:Copilot 會自動構建高階本地索引。
-
專案有 750 到 2500 個可索引檔案:在命令面板 (
kb(workbench.action.showCommands))
) 中執行 Build local workspace index 命令。此命令只需執行一次。 -
專案有超過 2500 個可索引檔案:請參閱下面的基本索引部分。
構建初始本地索引或更新索引(如果許多檔案已更改,例如切換 git 分支時)可能需要一些時間。您可以在狀態列的 Copilot 狀態儀表板中監控當前本地索引狀態。
基本索引
如果您的專案沒有遠端索引,並且有超過 2500 個可索引檔案,Copilot 會回退到使用基本索引來搜尋您的程式碼庫。此索引使用更簡單的演算法來搜尋您的程式碼庫,並已針對大型程式碼庫的本地工作進行了最佳化。
基本索引對於許多問題應該都能正常工作。但是,如果您發現 Copilot 在回答有關程式碼庫的問題時遇到困難,請嘗試升級到遠端索引。
工作區索引中包含哪些內容
Copilot 會索引作為您當前專案一部分的相關文字檔案。這不限於特定的檔案型別或程式語言,但是 Copilot 會自動跳過一些通常與 @workspace
問題無關的常見檔案型別,例如 .tmp
或 .out
檔案。Copilot 還會排除任何使用 files.exclude 設定從 VS Code 中排除的檔案,或作為 .gitignore
檔案一部分的檔案。
Copilot 目前也不索引二進位制檔案,例如影像或 PDF。
使用工作區上下文的技巧
您提問的方式會顯著影響上下文的質量和響應的準確性。為了最佳化結果,請考慮以下提示:
- 在您的問題中要具體和詳細,避免使用模糊或模稜兩可的術語,例如“這有什麼作用”(其中“這”可以解釋為上一個答案、當前檔案或整個專案等)。
- 在提示中加入可能出現在您的程式碼或其文件中的術語和概念。
- 檢視響應中的已用引用,以確保檔案相關。如有必要,迭代您的問題。
- 透過選擇程式碼或提及聊天變數(例如
#editor
、#selection
或#<file name>
)來顯式包含相關上下文。 - 響應可以引用多個來源,例如“查詢沒有 catch 塊的異常”或“提供 handleError 的呼叫示例”。但是,不要期望對您的程式碼庫進行全面的程式碼分析,例如“此函式被呼叫了多少次?”或“糾正此專案中的所有錯誤”。
- 避免假設程式碼之外的資訊(目前),例如“誰貢獻了此檔案?”或“總結此資料夾的評審評論”。
相關資源
- 瞭解更多關於向聊天提示新增上下文的資訊
- 從快速入門開始
- 瞭解更多關於VS Code 中的聊天的資訊