现已发布!阅读 10 月份的新功能和修复。

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

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

  • 在代码库中查找现有代码
    • "@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 date validation to #selection" - 计划如何将现有日期验证应用于选定代码
    • "@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?" - 根据文档、脚本和配置列出构建项目的步骤

@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

使用 @workspace 的提示

您提出问题的措辞会极大地影响 @workspace 提供的引用的质量以及响应的准确性。为了优化结果,请考虑以下提示

  • 在您的问题中要具体和详细,避免使用含糊或模棱两可的术语,例如“这是什么”(其中“这”可以解释为最后一个答案、当前文件或整个项目等)。
  • 在您的提示中加入可能出现在代码或其文档中的术语和概念。
  • 查看响应中的使用引用,确保文件相关。如有必要,迭代您的问题。
  • 通过选择代码或提及聊天变量(例如 #editor#selection#file)来明确包含相关上下文。
  • 响应可以从多个引用中得出,例如“查找没有 catch 块的异常”或“提供如何调用 handleError 的示例”。但是,不要期望对整个代码库进行全面的代码分析,例如“此函数被调用了多少次?”或“纠正此项目中的所有错误”。
  • 避免假设代码之外的信息(暂时),例如“谁贡献了此文件?”或“总结此文件夹的审阅意见”。