在 Copilot 对话助手 中管理聊天上下文

GitHub Copilot 对话助手 中,通过结合隐式上下文、引用、聊天历史记录和上下文窗口工具来管理聊天上下文,从而获得更好的回答。

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

先决条件

若要开始在 Visual Studio 中使用 GitHub Copilot 对话助手,需要:

隐式上下文

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

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

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

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

Copilot 对话助手 中隐式上下文的屏幕截图。

参考:Copilot 结果范围

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

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

Copilot 对话助手 中引用的屏幕截图。

引用文件

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

Copilot 对话助手 中文件引用的屏幕截图。

引用方法、类或函数

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

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

Visual Studio 中 GitHub Copilot 对话助手 中方法引用的屏幕截图。

引用整个解决方案

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

在 Copilot 对话助手 中引用解决方案上下文的屏幕截图。

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

在 Copilot 对话助手 中使用 GitHub 技能的屏幕截图。

从 Git 历史记录中引用提交记录

查看提交并希望Copilot帮助了解更改、识别潜在问题或起草类似的编辑时,可以将提交上下文直接附加到 GitHub Copilot 对话助手。

不要将提交 ID 复制粘贴到聊天中,而应使用 Add to Chat 将 IDE 中所选提交的上下文附加到聊天中。

你可以在以下任一界面的提交中使用 添加到聊天

  • Git 历史记录Git>View Branch History
  • File History(右键单击 解决方案资源管理器 中的文件,然后Git>View History
  • 注释(Blame)(在编辑器中右键单击,然后选择 Git>注释(Blame)

您可以多选提交,将多个提交一次性附加到聊天中。

显示 Git 历史记录中所选提交的“添加到聊天”命令的屏幕截图。

附加提交上下文后,请尝试以下提示:

  • 解释此更改。
  • 这是否引入了任何问题?
  • 为另一个文件进行类似的修改。

显示 Copilot 对话助手 及其附加提交(用作提示词上下文)的屏幕截图。

引用你的更改

使用 Visual Studio 2022 版本 17.14 及更高版本,可以在 Copilot 对话助手中使用 Git 引用。

使用 #changes 引用 Git 更改 窗口中未提交的更改。 如果你希望 Copilot 对话助手 汇总你已完成的工作、说明待处理编辑的影响,或在提交前建议后续步骤,那么此参考信息会很有用。

例如,可以提出如下问题:

  • 汇总 #changes
  • 到目前为止,我在 #changes 中做了些什么?
  • 建议为 #changes 编写单元测试。

打开 Tools>Options 对话框, expand GitHub>Copilot>Source Control Integration,选择可用 Git 预览功能, 然后选择 OK

Copilot 对话助手 使用 #changes 引用未提交更改的屏幕截图。

引用某次提交

使用 #commit: 在 Copilot 对话助手 中引用特定提交。 当你开始键入 #commit: 时,Copilot 会显示最近提交的列表,你可以从中进行选择。 如果你想引用较早的提交,请紧接在 #commit: 后输入提交 ID。

您可以将提交引用用于以下任务,例如:

  • 解释 #commit:
  • 编写单元测试以覆盖 #commit: 中的更改。
  • #commit:中查找潜在问题。

如果想要查看过去的更改、检查提交背后的意向或要求Copilot帮助你跟进早期工作,则此参考非常有用。

显示在输入 #commit:. 后最近提交建议的 Copilot 对话助手 屏幕截图。

引用图像

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

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

在 Copilot 对话助手 中添加图像的示例方案的屏幕截图。

参考输出窗口

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

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

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

Copilot 对话助手 中作为上下文的输出窗口的屏幕截图。

参考链接

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

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

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

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

用法示例

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

示例 Copilot 用于提出问题的上下文
#MyFile.cs 的用途是什么:66-72? 文件的确切部分
#BasketService.cs 中的测试在哪里? BasketService.cs
/解释一下 #BasketService.cs 中的 #AddItemToBasket BasketService.cs中的 AddItemToBasket 方法
其中是否有删除购物篮的方法 @workspace 在 IDE 中打开当前解决方案
我有一个名为 #TestCalculator 的测试方法。 如何确保它被正确执行? TestCalculator 方法
你能解释类 #BasketService 和 #OrderService 之间的差异吗? BasketService 类和 OrderService 类
在我的 @workspace 中,#AddItemToBasket 在哪里? 在 IDE 中打开当前解决方案
在提交之前汇总 #changes Git 更改窗口中未提交的更改
在 #commit:abc1234 中查找潜在问题 指定的提交
在 App.tsx 中更新 UI,使其类似于此图像 已上传的图像

查看 Copilot 对话助手 所用的来源

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

Copilot 对话助手 中“已用引用”下拉列表的屏幕截图。

整理:通过线程管理聊天历史记录上下文

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

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

新建聊天线程

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

Copilot 对话助手 中“创建新线程”图标的屏幕截图。

切换聊天会话

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

Copilot 对话助手 中正在运行的线程之间进行切换的屏幕截图。

组织:使用聊天历史记录面板管理聊天历史记录

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

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

新建聊天线程

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

Copilot 对话助手 中“创建新线程”图标的屏幕截图。

切换聊天会话

使用聊天历史记录面板在不同聊天会话之间切换,并为你的问题提供恰当的历史上下文。

每个聊天历史记录条目显示:

  • 聊天标题
  • 最近一条消息的预览
  • 上次更新会话的时间

选择面板中的会话以直接跳转到该对话。

聊天历史记录面板的屏幕截图,其中显示了会话标题、消息预览和上次更新时间。

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

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

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

监视和优化上下文窗口使用情况

与Copilot聊天时,它使用包含对话历史记录、附加文件和其他上下文输入的上下文窗口。 随着上下文窗口被占满,Copilot 可能会丢失当前对话中较早部分的细节。

使用上下文窗口指示器实时跟踪使用情况:

  1. 打开Copilot 对话助手窗口。
  2. 在聊天提示框的右上角,找到环形指示器。
  3. 选择指示器以查看使用的上下文的确切百分比。
  4. 查看构成上下文用量的明细(例如,对话消息和工作区文件)。

汇总和压缩对话历史记录

压缩可减少当前线程旧部分使用的上下文量,因此可以继续在同一对话中工作。

当可用上下文不足时,选择 总结对话,即可压缩此前的对话内容,在保留当前对话的同时腾出空间。

通过以下任一方式进行压实:

  • 在上下文窗口指示器中选择总结对话,以自动压缩较早的消息。
  • 在聊天中输入 /compact 即可随时手动压缩对话。

压缩后,Copilot 保留先前对话轮次的摘要,而不是完整对话记录。 这有助于释放上下文窗口空间,同时保留线程的整体方向。

在以下情况下使用压缩:

  • 上下文使用率很高,你希望避免丢失重要的最近上下文。
  • 对话已经很长了,但你仍然想在同一个聊天中继续聊下去。
  • 在提出一组新的后续问题之前,你想先提高专注力。

最佳做法

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

  • 针对新任务,请使用新线程开启新的对话。
  • 如果您想保留同一对话,请在上下文使用量较高时使用 Summarize conversation
  • 删除不再相关或未提供所需结果的请求。

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

后续步骤