通过在 Visual Studio 中设置 GitHub Copilot Chat 的上下文来获取更好的答案

可以要求 GitHub Copilot Chat 提供代码建议、解释代码、生成单元测试和建议代码修复。 除了提示之外,Copilot 还使用其他上下文(如当前文件和聊天历史记录中的代码)来生成响应。

本文介绍如何通过向 Copilot Chat 提供更多信息来获取更好的答案:

  • 使用 斜杠命令 快速指定常见任务,例如 /explain 获取代码说明。
  • 使用 引导聊天体验自定义说明 来优化上下文。
  • 将图像附加到 提示,以提供其他上下文,并更好地说明你的想法。
  • 使用 引用将聊天范围限定为特定文件。
  • 查看 Copilot 用于生成答案的
  • 对每个 Copilot 聊天使用不同的 线程 ,以便可以在每个聊天中维护不同的上下文。

详细了解 Visual Studio 中的 AI 辅助开发 ,以及如何 在 Visual Studio 中使用 Copilot Chat

先决条件

若要开始在 Visual Studio 中使用 GitHub Copilot Chat,需要:

GitHub 将提供对 GitHub Copilot Chat 的支持,您可以通过 https://support.github.com联系到他们。

提示指南

Visual Studio 17.12 及更高版本中的引导性聊天体验有助于优化提示,以阐明上下文以获取更好的答案。 当上下文不清楚时,GitHub Copilot Chat 现在会指导你澄清问题。

GitHub Copilot Chat 引导聊天体验的屏幕截图。

启用自定义说明

使用自定义说明功能,可以自动将预先指定的上下文详细信息添加到聊天问题。 Copilot Chat 在生成响应时,会使用那些根据您的具体上下文定制的指令,比如团队的工作方式、使用的工具或项目的具体信息。

若要配置自定义说明,请:

  1. 在存储库的根目录中创建/添加自定义说明文件.github/copilot-instructions.md
  2. 通过工具>选项>启用 Visual Studio 中的功能GitHub>Copilot> 选择(预览版)启用从 .github/copilot-instructions.md 文件加载的自定义说明,并将其添加到 requests 中。

自定义说明在聊天视图或内联聊天中不可见。 但是,当 Copilot 使用时,.github/copilot-instructions.md 该文件将列在响应的“引用”列表中。

使用提示文件

现在可以在存储库中创建可重用的提示文件,以运行或共享常用提示。

若要创建提示文件,请执行以下作:

  1. 请像平常一样在提示框中编写提示,使用 # 引用解决方案中的特定信息,例如方法、类和文件。 甚至可以引用其他提示文件以获取共享说明。
  2. 将提示复制到 markdown 文件中,并将其与 .prompt.md 扩展名 .github/prompts 一起保存在存储库根目录中的文件夹中。

若要使用提示文件,请执行以下操作:

  1. 在聊天输入框中键入 #prompt: 以引用您 .github/prompts 文件夹中的任何提示文件,或单击聊天输入框中的 ➕ 图标,将其添加为上下文。
  2. 添加任何额外详细信息,或者只需按原样输入提示。

在 GitHub Copilot Chat 中使用提示文件的屏幕截图。

在 Copilot Chat 中使用斜杠命令执行常见任务

Copilot Chat 中的斜杠命令可帮助你快速设置常见开发任务的意向。 通过使用特定的斜杠命令来形成问题,你可以获得更好的答案,而无需写出较长的问题。

可以在 聊天窗口中使用斜杠命令,或者借助 内联代码帮助,直接将命令嵌入到你想要修改的代码中。 帮助修改或添加到编辑器中打开的代码文件的命令将同时在内联代码助手和聊天窗口中工作,而用于更常规编码问题的命令只能在聊天窗格中工作。

命令 用法 聊天窗口 内联聊天
/文档 为指定的或选定的代码添加注释。
例子:
- /doc DeleteBasketAsync method in BasketService.cs
- 选择所需的代码并输入 /doc
是的 是的
/解释 获取代码说明。

例子:
- /explain the AddItemToBasket method in BasketService.cs
- 选择所需的代码并输入 /explain
是的 是的
/修复 为所选代码中的问题建议修补程序。
例子:
- /fix the SetQuantities method in BasketService.cs
- 选择所需的代码并输入 /fix
是的 是的
/生成 生成代码以回答指定的问题。
示例:/generate code to add two numbers in Calculator.cs
是的 是的
/帮助 获取有关使用 Copilot Chat 的帮助。
示例:/help
是的 是的
/优化 分析和改进所选代码的运行时间。
例子:
- /optimize the AddItemToBasket method in BasketService.cs
- 选择所需的代码并输入 /optimize
是的 是的
/测试 为所选代码创建单元测试。
示例:选择所需的代码并输入 /tests using XUnit Framework
是的 是的

内联聊天视图和聊天窗口中斜杠命令的屏幕截图。

借助 Visual Studio 2022 版本 17.13,当用户键入斜杠命令时,该命令会以自然语言展开提示以显示命令将使用的上下文。

将图像附加到聊天提示

借助 Visual Studio 17.14 预览版 1 及更高版本中 Copilot Chat 的视觉集成,可以将 图像附加到 聊天提示,为 Copilot 提供其他上下文,以便改进响应。 将图像与 范围 和其他上下文功能(如斜杠命令)结合使用以生成定制的响应。

在下面的示例中,Copilot 解释附加的图像以生成计划并建议代码,从头开始创建丰富多彩的打砖块游戏。

在 Copilot Chat 中添加图像的示例方案的屏幕截图。

参考:将 Copilot 结果范围限定为特定文件或整个解决方案

可以使用自然语言询问编码相关问题,GitHub Copilot Chat 将在 Visual Studio 中打开的代码库上下文中回答这些问题。 借助参考,可以更具体地了解在回答问题时希望 Copilot 考虑的信息。

通过在代码库中选择特定上下文,可以轻松形成更好的问题,而无需写出或粘贴长段信息。 指定上下文还可使 Copilot 为你提供更相关的答案。

引用文件

若要在 GitHub Copilot Chat 中轻松引用文件,只需在文件名开头添加一个 # 符号。 例如,如果你有一个名为 BasketService.cs的文件,请将其在聊天中引用为 #BasketService.cs

Copilot Chat 中引用的屏幕截图。

引用方法、类或函数

使用 Visual Studio 2022 版本 17.11,现在可以在 GitHub Copilot Chat 中引用特定的方法、类或函数。

若要在 GitHub Copilot Chat 中轻松引用方法、类或函数,只需在方法、类或函数名称的开头添加一个 # 符号。 例如,如果你有名为 BasketAddItem 的方法,请将其在聊天中引用为 #BasketAddItem

Visual Studio 中 GitHub Copilot Chat 中方法引用的屏幕截图。

引用整个解决方案

使用 @workspace 引用 IDE 中处于活动状态的解决方案以获取上下文。 在将 @workspace 用于上下文时,Copilot Chat 利用有关当前打开和正在 IDE 中处理的文件、项目和配置的信息。 这使 Copilot Chat 能够提供更多相关且上下文感知的建议和答案。

在 Copilot Chat 中引用解决方案上下文的屏幕截图。

使用 Visual Studio 2022 版本 17.11,GitHub Copilot Enterprise 订阅者现在可以在聊天中使用 @github,以包含整个存储库中的上下文和搜索 Web(如果管理员启用了搜索)。 若要详细了解 Copilot 在使用 @github时可以使用的特定于 GitHub 的技能集合来回答你的问题,请参阅 使用适用于 Copilot 的 GitHub 技能

在 Copilot Chat 中使用 GitHub 技能的屏幕截图。

参考输出窗口

现在,可以使用输出窗口作为聊天中的上下文来提问并获取有关输出日志的帮助。 支持的输出窗口包括“生成”、“调试”、“测试”、“源代码管理”、“包管理器”或任何其他活动输出窗口窗格。

通过以下方式之一在聊天中引用输出日志:

  • 使用 #output 直接在聊天中引用它。
  • 选择➕聊天输入中的图标并添加 Output logs 为上下文。
  • 直接询问 Copilot,例如 检查我的输出日志并帮助我修复此错误
  • 右键单击 “输出窗口 ”,然后选择“ 使用 Copilot 解释 ”以附加它。

Copilot Chat 中作为上下文的输出窗口的屏幕截图。

用法示例

以下是使用引用进行上下文控制的一些示例:

示例 Copilot 用于提出问题的上下文
#MyFile.cs 的用途是什么:66-72? 文件的确切部分
#BasketService.cs 中的测试在哪里? BasketService.cs
/explain #BasketService.cs 中的 #AddItemToBasket BasketService.cs中的 AddItemToBasket 方法
其中是否有删除购物篮的方法 @workspace 在 IDE 中打开当前解决方案
我有一个名为 #TestCalculator 的测试方法。 如何确保它被正确执行? TestCalculator 方法
你能解释类 #BasketService 和 #OrderService 之间的差异吗? BasketService 类和 OrderService 类
在我的 @workspace 中,#AddItemToBasket 在哪里? 在 IDE 中打开当前解决方案

查看 Copilot Chat 所用的来源

Copilot Chat 显示每个结果后使用的上下文,以便你可以判断回答问题时要考虑的内容。 当你向 Copilot 聊天提出问题并在聊天窗口中获取响应时,响应下方会显示“ 引用” 下拉列表。 “ 引用 ”下拉列表中的条目显示 Copilot Chat 引用的上下文以生成该响应。 此信息可以帮助你修改问题,以获得更好和更相关的答案。

Copilot Chat 中“已用引用”下拉列表的屏幕截图。

组织:将与 Copilot 的聊天隔离到线程中

如果你在编码时使用 Copilot Chat 广泛提问,则可以以保持主题的方式组织对话。 适用于 Visual Studio 的 Copilot Chat 现在提供了一种简单的方法来启动新对话(线程),使其专注于手头的任务,并保持上下文清晰,以便答案基于相关的历史记录。

新建聊天线程

在聊天窗口中选择“ 创建新线程 ”或 “Ctrl+N ”以启动新线程。

Copilot Chat 中“创建新线程”图标的屏幕截图。

切换聊天会话

可以在多个正在进行的线程之间进行选择,以便为问题提供正确的历史上下文。 可以对上一个线程使用 Ctrl+PgDown ,也可以在聊天窗口中对下一个线程使用 Ctrl+PgUpCtrl+Shift+T 展开线程下拉列表。

Copilot Chat 中正在运行的线程之间进行切换的屏幕截图。

将内联聊天提升到聊天窗口

使用 Visual Studio 2022 版本 17.11,现在可以通过将内联聊天历史记录提升到聊天窗口来保留内联聊天的历史记录。 在 聊天窗口中选择“继续”... 以维护聊天的记录和上下文,然后在聊天窗口中继续。

将内联聊天中正在进行的对话提升到聊天窗口的屏幕截图。

最佳做法

Copilot Chat 使用聊天历史记录来获取有关你的请求的上下文。 要向 Copilot 仅提供相关历史记录,请执行以下操作:

  • 利用线程为新任务启动一个新对话。
  • 删除不再相关或未提供所需结果的请求。

保持聊天窗口打开,并继续反复尝试和提示 Copilot 改进所建议的解决方案。 Copilot 具有生成的代码上下文和当前对话历史记录。 当你不断提出其他问题时,Copilot 会根据你的要求进一步优化响应。 有关有效提示以提高 Copilot 结果的策略,请参阅 GitHub Copilot 的提示工程

后续步骤