阅读(74) 书签 (0)

@workspace 上下文

2024-11-28 18:41 更新

让 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​。


使用 @workspace 的技巧

您提出问题的方式会极大地影响 ​@workspace​ 提供的引用的质量和回复的准确性。为了优化结果,请考虑以下技巧:

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