使用引用管理聊天上下文

使用引用将问题范围限定为 GitHub Copilot Chat ,以及其隐式上下文知识,以获得更好的答案。

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

  • 了解 后台的隐式上下文 Copilot 利用
  • 使用引用将聊天范围限定为特定文件
  • 将图像附加到 提示,以提供其他上下文并更好地说明你的想法
  • 查看 Copilot 用于生成答案的
  • 对每个 Copilot 聊天使用不同的 线程 来维护聊天历史记录和每个聊天中的不同上下文

先决条件

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

隐式上下文

Visual Studio 根据当前活动自动为聊天提示提供上下文。

以下信息隐式包含在聊天上下文中:

  • 活动编辑器中当前选定的文本。
  • 编辑器中处于活动状态的当前文件。

根据提示,Copilot 读取活动文件的内容。 若要在聊天上下文中显式包含另一个文件的内容,请使用聊天视图中的按钮选择建议的文件 +添加附件

Copilot Chat 中隐式上下文的屏幕截图。

参考:范围 Copilot 结果

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

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

Copilot Chat 中引用的屏幕截图。

引用文件

若要在 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 技能的屏幕截图。

引用图像

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

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

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

参考输出窗口

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

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

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

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

参考链接

在提示框中粘贴 URL,当 Copilot 的训练数据未涵盖主题或想要引用特定资源时,Copilot 将从 Web 拉取信息以填写空白。

例如,你可以要求 Copilot 根据 GitHub 上的最佳做法帮你编写 readme.md 文件。

在聊天中引用的作为上下文的 URL 的屏幕截图。

请注意,Copilot 只能引用你提供的公共 URL 中的静态 HTML 内容,并且无法访问该页面上的其他链接、身份验证后面的页面或动态页面中的内容。

用法示例

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

示例 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 中打开当前解决方案
在 App.tsx 中更新 UI,使其类似于此图像 已上传的图像

查看 Copilot Chat 所用的来源

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

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

组织:使用线程管理聊天历史记录上下文

在聊天会话中循环访问和发送多个聊天提示时,Copilot 使用聊天提示和响应的历史记录作为当前聊天提示的上下文。 这意味着可以提出后续问题或澄清以前的问题,而无需重复上下文。 例如,可以询问“这与...”有何不同,“现在添加测试用例”、“更详细地解释”等。

若要开始使用新的聊天会话并放弃当前上下文,请启动聊天视图中 的新线程 。 如果要移动到其他主题并避免以前的上下文和历史记录,这非常有用。 使用线程使对话专注于手头的任务,并保持上下文清晰,以便答案基于相关的历史记录。

新建聊天线程

在聊天窗口中选择“ 创建新线程 ”或 “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 的提示工程

后续步骤