🚀 在 VS Code 中

使 Copilot 聊天成为您工作区中的专家

在 Copilot 聊天中引用 @workspace 可让您询问有关整个代码库的问题。根据问题,Copilot 会智能地检索相关文件和符号,然后在答案中将其作为链接和代码示例引用。基于 @workspace 引用,Copilot 聊天成为以下任务的领域专家,例如

  • 在您的代码库中查找现有代码
    • "@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 如何调用的示例”。但是,不要期望对您的代码库进行全面的代码分析,例如“此函数被调用了多少次?”或“纠正此项目中的所有错误”。
  • 避免假设超出代码范围的信息(目前),例如“谁贡献了此文件?”或“总结此文件夹的审阅评论”。