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

你可以使用 Visual Studio 中的 GitHub Copilot Chat 获取编码信息和支持,例如语法、编程概念、特定于上下文的代码帮助、测试用例、调试等,而无需离开 IDE。 Copilot Chat 集成到 Visual Studio 中,这意味着它可以通过从 IDE 中收集有用的线索来了解你正在处理的内容。

除了您的提示之外,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

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

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

可以在聊天窗口中使用斜杠命令,或者在你考虑修改的代码中使用内联代码辅助直接内联询问。 帮助对在编辑器中打开的代码文件的命令进行修改或添加的命令在内联代码助手和聊天窗口中都有效,而用于更常规编码问题的命令仅在聊天窗格中有效。

命令 使用情况 聊天窗口 内联聊天
/doc 为指定代码或所选代码添加注释。
示例:
- /doc DeleteBasketAsync method in BasketService.cs
- 选择所需的代码并输入 /doc
/explain 获取代码解释。

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

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

引用:将 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(如果管理员启用了搜索)。 若要详细了解在使用 @github 时 Copilot 可用于回答问题的 GitHub 特定技能集合,请参阅将 GitHub 技能用于 Copilot

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

用法示例

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

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

查看 Copilot Chat 使用的源

Copilot Chat 会在每个结果后显示它使用的上下文,以便你可以了解在回答你的问题时考虑了哪些内容。 当你向 Copilot Chat 提问并在聊天窗口中得到答复时,答复下方会显示“参考”下拉列表。 “参考”下拉列表中的条目会显示 Copilot Chat 生成该答复时引用的上下文。 此信息可以帮助你修改问题以获得更好、更相关的答案。

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

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

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

新建聊天会话

可以通过在聊天窗口中选择“创建新话题”来启动新话题。

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

切换聊天会话

可以在多个正在进行的线程之间进行选择,以便为问题提供正确的历史上下文。

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

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

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

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

最佳做法

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

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

使聊天对话保持打开状态,并继续循环访问并提示 Copilot 改进建议的解决方案。 Copilot 既有生成代码的上下文,也有您当前的对话历史记录。 当你不断提出其他问题时,Copilot 会根据你的要求进一步优化响应。 有关进行有效提示以改善 Copilot 结果的策略,请参阅 Github Copilot 的提示工程

后续步骤