🚀 在 VS Code 中

讓 Copilot Chat 成為您工作區的專家

在 Copilot Chat 中參考 @workspace 可讓您詢問關於整個程式碼庫的問題。根據問題,Copilot 會智慧地檢索相關檔案和符號,然後在答案中以連結和程式碼範例的方式參考。以 @workspace 參考為基礎,Copilot Chat 成為以下任務的領域專家,例如

  • 在您的程式碼庫中尋找現有程式碼
    • "@workspace 資料庫連線字串在哪裡設定?" - 解釋資料庫連線的設定位置和方式
    • "@workspace 我該如何驗證日期?" - 在程式碼庫中尋找現有的日期驗證輔助程式
    • "@workspace 測試定義在哪裡?" - 提供測試套件、案例和相關參考與組態的位置
  • 為複雜的程式碼編輯制定計畫
    • "@workspace 我該如何在按鈕上新增豐富的工具提示?" - 提供將現有工具提示元件與按鈕元素一起使用的計畫
    • "@workspace 將日期驗證新增至 #selection" - 計畫如何將現有的日期驗證應用於選取的程式碼
    • "@workspace 為忘記密碼表單新增新的 API 路由" - 概述在哪裡新增路由以及如何將其連接到現有程式碼
  • 解釋程式碼庫中更高層次的概念
    • "@workspace 身份驗證是如何實作的?" - 身份驗證流程的概觀以及相關程式碼的參考
    • "@workspace 哪些 API 路由依賴此服務?" - 列出在選取程式碼中使用該服務的路由
    • "我該如何建置此 #codebase?" - 根據文件、腳本和組態列出建置專案的步驟

@workspace 使用哪些來源作為上下文?

為了回答您的問題,@workspace 會搜尋開發人員在 VS Code 中導覽程式碼庫時會使用的相同來源

  • 工作區中所有可編製索引的檔案,但 .gitignore 檔案忽略的檔案除外
  • 具有巢狀資料夾和檔案名稱的目錄結構
  • GitHub 的程式碼搜尋索引,如果工作區是 GitHub 儲存庫且由程式碼搜尋編製索引
  • 工作區中的符號和定義
  • 目前選取的文字或活動編輯器中可見的文字
注意

如果您開啟檔案或在忽略的檔案中選取文字,則會繞過 .gitignore

@workspace 如何找到最相關的上下文

您的完整 VS Code 工作區可能太大,無法完全傳遞給 GitHub Copilot 以回應您的聊天提示。相反地,@workspace 會從不同的上下文來源中提取最相關的資訊,以作為 Copilot 回答的基礎。

首先,@workspace 會判斷回答您的問題需要哪些資訊,包括對話記錄、工作區結構和目前選取的程式碼。

接下來,它會使用不同的方法收集上下文,例如透過在本機搜尋或使用 GitHub 的程式碼搜尋 尋找相關的程式碼片段,並使用 VS Code 的語言 IntelliSense 新增函數簽名、參數等詳細資訊。

最後,GitHub Copilot 會使用此上下文來回答您的問題。如果上下文太大,則只會使用上下文中最相關的部分。回應會標記檔案、檔案範圍和符號的參考。這讓您可以直接從聊天回應連結到程式碼庫中的對應資訊。提供給 Copilot 的程式碼片段會列為回應中的參考。

@workspace 斜線命令的上下文

@workspace 提供數個*斜線命令*,作為常用任務的簡寫,節省您的時間和輸入工作。每個命令都定義了自己的最佳化上下文,通常不需要額外的提示或聊天變數。以下是可用的斜線命令及其上下文

命令 上下文
/explain
  • 從活動編輯器中的文字選取範圍開始 (#selection)。為了最佳化 Copilot 聊天回應,請務必展開文字選取範圍,以包含任何相關資訊,以協助 Copilot 提供有用的回應。
  • 查閱參考符號 (例如函數和類別) 的實作,從而產生更準確且有用的解釋。
/tests
  • 活動編輯器中目前的文字選取範圍。如果未選取任何文字,則使用目前活動檔案的內容。
  • 相關的現有測試檔案,以了解現有測試和最佳實務。
/fix
  • 活動編輯器中目前的文字選取範圍。如果未選取任何文字,則使用編輯器中目前可見的文字。
  • 錯誤和參考符號,以了解需要修正的內容和方式。
/new
  • 僅聊天提示用作上下文。
/newNotebook
  • 僅聊天提示用作上下文。

您可以使用聊天變數 (例如 #editor#selection#file) 在聊天提示中明確展開上下文。例如,若要根據另一個檔案的模式修正目前檔案中的錯誤,請使用此聊天提示:@workspace /fix linting error in the style of #file:form.ts

管理工作區索引

Copilot 使用索引來快速且準確地搜尋您的程式碼庫以尋找相關的程式碼片段。此索引可以由 GitHub 維護,也可以儲存在您本機電腦上。本節涵蓋 Copilot 可以使用的不同索引類型 ( 遠端本機基本),並說明何時使用每個索引以及如何在其間切換。

若要查看 Copilot 目前使用的索引類型,請選取狀態列中的 {} 圖示來檢查語言狀態 UI。Copilot 工作區索引項目會同時顯示索引類型以及關於此索引的任何相關資訊,例如正在重新編製索引的檔案數。

Viewing the status of the Copilot index in the language status UI

遠端索引

對於 GitHub 儲存庫,Copilot 可以使用 GitHub 程式碼搜尋 來建置程式碼庫的遠端索引。這讓 Copilot 可以非常快速地搜尋您的整個程式碼庫,即使程式碼庫非常龐大也沒問題。

若要使用遠端索引

  • 在 VS Code 中使用您的 GitHub 帳戶登入。

  • 開啟具有 GitHub git 遠端的專案。請確定您也已將程式碼推送至 GitHub。

    如果 GitHub 具有相對最新的程式碼版本,則遠端索引的效果最佳,因此請務必定期將程式碼推送至 GitHub。

  • 執行 建置遠端工作區索引 命令,或選取工作區索引狀態 UI 中的 [建置索引] 按鈕,以建置遠端索引。

    建置遠端索引可能需要一些時間,對於大型程式碼庫尤其如此。您可以在工作區索引狀態 UI 中監控遠端索引的狀態。

    一旦建置了遠端索引,GitHub 會在您每次推送程式碼變更時自動使其保持最新狀態。每個儲存庫您只需要執行一次 建置遠端工作區索引 命令。

本機索引

在您無法使用 遠端索引 的情況下,Copilot 可以改為使用儲存在您本機電腦上的進階語意索引。此索引也可以提供快速、高品質的搜尋結果。但是,目前索引檔案數量限制為 2500 個。與遠端索引不同,本機索引必須每個使用者在每部電腦上建置一次。使用遠端索引,給定儲存庫的所有使用者都可以使用相同的索引。

如果您的專案具有少於 750 個可編製索引的檔案,Copilot 會自動建置進階本機索引。對於檔案數量介於 750 到 2500 個的專案,您可以執行 建置本機工作區索引 命令以開始編製索引。此命令只需要執行一次。

建置初始本機索引或在許多檔案已變更 (例如,在切換 git 分支時) 時更新索引可能需要一些時間。您可以在工作區索引狀態 UI 中監控目前的本機索引狀態。

基本索引

如果您的專案沒有 遠端索引,而且也具有超過 2500 個可編製索引的檔案,Copilot 會退回使用基本索引來搜尋您的程式碼庫。此索引使用更簡單的演算法來搜尋您的程式碼庫,並已針對在較大型程式碼庫中在本機運作進行最佳化。

基本索引對於許多問題應該可以正常運作。但是,如果您發現 Copilot 很難回答關於您的程式碼庫的問題,請嘗試升級到 遠端索引

工作區索引中包含哪些內容

Copilot 會將屬於您目前專案一部分的相關文字檔編製索引。這不限於特定的檔案類型或程式設計語言,但是 Copilot 會自動略過一些通常與 @workspace 問題無關的常見檔案類型,例如 .tmp.out 檔案。Copilot 也會排除使用 files.exclude 設定從 VS Code 中排除的任何檔案,或屬於 .gitignore 檔案一部分的任何檔案。

Copilot 目前也不會為二進位檔案 (例如影像或 PDF) 編製索引。

使用 @workspace 的秘訣

您提出問題的方式會顯著影響 @workspace 提供的參考品質和回應的準確性。為了最佳化結果,請考慮以下秘訣

  • 在您的問題中具體且詳細,避免使用模糊或不明確的詞語,例如「這是做什麼用的」(其中「這」可以解釋為最後一個答案、目前檔案或整個專案等等)。
  • 在您的提示中加入可能出現在您的程式碼或其文件中的詞語和概念。
  • 檢閱回應中的*已使用參考*,以確保檔案相關。如有必要,請反覆修改您的問題。
  • 透過選取程式碼或提及聊天變數 (例如 #editor#selection#file) 明確包含相關上下文。
  • 回應可以從多個參考中提取,例如「尋找沒有 catch 區塊的例外狀況」或「提供如何呼叫 handleError 的範例」。但是,不要期望對您的程式碼庫進行全面的程式碼分析,例如「此函數被調用了多少次?」或「修正此專案中的所有錯誤」。
  • 避免假設超出程式碼範圍的資訊 (目前),例如「誰貢獻了這個檔案?」或「總結此資料夾的審閱意見」。