自定义聊天响应并设置上下文

可以要求 GitHub Copilot Chat 提供代码建议、解释代码、生成单元测试和建议代码修复。 Visual Studio 中的聊天可以为你提供响应,并生成与编码做法和项目要求匹配的代码,前提是你提供了正确的上下文。 无需在每个聊天提示中重复添加此信息,而是将此上下文存储在文件中,并自动将其包含在每个聊天请求中。

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

详细了解 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 在生成响应时,会使用那些根据您的具体上下文定制的指令,比如团队的工作方式、使用的工具或项目的具体信息。

Copilot 在“引用”列表中使用的自定义指令文件的屏幕截图。

使用 .github/copilot-instructions.md 文件

若要使用 .github/copilot-instructions.md 文件,请执行以下步骤:

  1. 在存储库的根目录中创建/添加自定义说明文件.github/copilot-instructions.md
  1. “工具>选项 ”窗格中启用 Visual Studio 中的功能。 展开 “所有设置”>GitHub>Copilot>Copilot Chat 部分,然后选择 启用从 .github/copilot-instructions.md 文件加载的自定义说明并添加到请求 的复选框。
  1. “工具>选项 ”对话框启用 Visual Studio 中的功能。 展开 GitHub>Copilot 部分,在 Copilot Chat 组中选中复选框,启用从 .github/copilot-instructions.md 文件加载自定义说明并将其添加到请求中。

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

使用 .instructions.md 文件

可以创建应用于特定文件类型或任务的多个 *.instructions.md 文件,而不是使用适用于所有聊天请求的单个说明文件。 例如,可以为不同的编程语言、框架或项目类型创建说明文件。

若要使用 .github/instructions/*.instructions.md 文件,请执行以下步骤:

  1. 如果尚无 .github/instructions 目录,则创建该目录。

  2. 添加一个或多个 .github/instructions/*.instructions.md 文件。

  3. 在指令文件的 frontmatter 部分添加 applyTo 属性。 使用 glob 语法指定说明适用的文件或文件夹。

  4. 在 Visual Studio 中启用该功能。

    “工具>选项”窗格中,展开“ 所有设置>GitHub>Copilot>Copilot 聊天”部分,然后勾选“ 启用从 .github/copilot-instructions.md 文件中加载的自定义指令,并添加到请求中”复选框。

    “工具>选项 ”对话框中,展开 “GitHub>Copilot ”部分。 在 Copilot 聊天 组中,选择“启用从 .github/copilot-instructions.md 文件加载自定义说明,并将其添加到请求”复选框。

指令文件格式

目标指令文件使用 .instructions.md 扩展并具有以下结构:

  • 标头 (可选):YAML frontmatter
    • description:在聊天视图中悬停时显示的说明
    • applyTo:Glob 模式,用于匹配要应用指令的文件或文件夹
  • 正文:Markdown 格式的说明

Example

下面是一个 C# 自定义指令示例:

## C# Instructions
---
applyTo: `**/*.cs`
---

- Write clear and concise comments for each function.
- Use PascalCase for component names, method names, and public members.
- Use camelCase for private fields and local variables.
- Add a newline before the opening curly brace of any code block  
  (such as after `if`, `for`, `while`, `foreach`, `using`, `try`, etc.).
- Ensure that the final `return` statement of a method is on its own line.

将这些说明复制到 .github/instructions/*.instructions.md 文件中,以便使用并自动应用于 Copilot 行为。

有关自定义说明的更多示例,请参阅 GitHub 上的说明示例列表。

说明文件如何工作

开始使用 Copilot 时,它会自动检测与当前上下文相关的指令文件,并将其附加为引用。 这可以确保 Copilot 的建议始终与项目的规则保持一致,无论你在代码库中在哪里工作。

Copilot 使用的说明文件列在响应的“引用”列表中。

使用提示文件

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

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

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

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

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

在 GitHub 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,当用户键入斜杠命令时,该命令会以自然语言展开提示以显示命令的上下文。

使用 Copilot 操作

可以在上下文菜单中使用 Copilot 操作,快速访问常见开发任务的预配置提示和斜杠命令。

上下文菜单中 Copilot 操作的截图。

每个操作的行为取决于您在打开上下文菜单时是否选择了代码。

Action 选择了代码 未选择代码
说明 说明所选代码 说明光标位置附近的代码
优化选择 针对性能、可维护性、可靠性和体系结构优化所选代码 不適用
生成注释 为所选代码生成注释 为光标位置附近的代码生成注释
生成测试 为所选代码生成测试 为光标位置附近的代码生成测试
添加到聊天 将所选代码作为引用添加到聊天 将整个文件作为参考添加到聊天

当您选择 “优化选择” 以外的任何动作时,聊天窗口会自动打开,并使用适当的限定范围的上下文向 Copilot 发送 斜杠命令。 然后,可以在聊天窗口中查看 Copilot 的响应并与之交互。

使用“优化选择”选项获取更好的代码

选择代码的特定部分,然后选择“ 优化选择 ”,让 Copilot 只分析和改进该部分,而不是整个文件。

Copilot 检查所选代码及其周围的上下文,以提供有意义的上下文感知建议。 优化可保留现有代码样式、结构和功能,使基本代码保持有序且一致。 与其他使用聊天面板的操作不同,“优化选择” 将建议呈现为可以直接查看、接受或拒绝的内联差异。

Copilot 在这些方面提供优化建议:

  • 性能: 更快的算法,减少内存使用率,异步模式
  • 可维护性: 简化的逻辑,更清晰的结构,更好的命名
  • 可靠性: 错误处理,资源清理,线程安全性
  • 建筑: 依赖项注入,更好的接口,模块化设计

后续步骤