本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

上下文就是你需要的一切:通过自定义指令获得更好的AI结果

2025年3月26日 由Rob Conery撰写, @robconery.com, Burke Holland, @burkeholland

本月早些时候,我们宣布了Visual Studio Code中自定义指令的普遍可用性。自定义指令是您向 Copilot 提供有关您团队的工作流程、您的特定样式偏好、模型可能不知道的库等特定上下文的一种方式。

在本文中,我们将深入探讨自定义指令是什么,如何在今天使用它们来显著改善您在 GitHub Copilot 上的结果,甚至还有一个名为“提示文件”的全新预览功能,您可以今天就尝试一下。

更小的提示,通过一个简单的Markdown文件获得更好的结果

与 GitHub Copilot 合作可以极大地提升你的开发流程,但在有效提示方面有一个学习曲线。可能需要几次尝试才能得到你想要的正确答案,这通常意味着重新措辞你的问题或提示。即便如此,Copilot 仍然会加速你的工作流程!

但是你知道吗,你可以通过调整 GitHub Copilot 来更好地满足你的需求?通过使用一个简单的 Markdown 文件,你可以向 Copilot 提供具体的指示,这将帮助它更好地理解你的项目。在这篇文章中,我们将引导你完成创建和使用自定义指示的过程,这是 VS Code 中新发布的一项功能。

尝试这样做:在你的项目中创建一个名为的文件.github/copilot-instructions.md这个文件将包含帮助 Copilot 更好地理解你的项目说明。它会被 Copilot 自动识别,所以你不需要做任何特别的事情来使其生效。

截图显示 VS Code 中的资源管理器视图,突出显示文件。文件仍然为空。

将这些说明添加到文件中:

# 共享飞行员说明

这个项目是一个网页应用程序,允许用户创建和管理任务。该应用程序使用React和Node.js构建,并使用MongoDB作为数据库。

## 编码标准

- Use camelCase for variable and function names.
- Use PascalCase for component names.
- Use single quotes for strings.
- Use 2 spaces for indentation.
- Use arrow functions for callbacks.
- Use async/await for asynchronous code.
- Use const for constants and let for variables that will be reassigned.
- Use destructuring for objects and arrays.
- Use template literals for strings that contain variables.
- Use the latest JavaScript features (ES6+) where possible.

标题不是严格必要的,但它有助于明确文件的目的。其余内容是一组帮助 Copilot 更好地理解您的项目的说明。您可以根据项目的需求自定义这些说明。

现在,打开聊天视图并用一个非常简短的命令提示它,例如尾递归你不必询问“如何在JavaScript中实现尾递归”或类似问题。只需输入尾递归 并按 回车。请注意,Copilot 理解您项目的上下文,并为您提供相关答案。

显示在聊天视图中 Copilot 对 “尾递归” 的响应的截图。

请注意, Copilot 给了你一个更详细的答案,符合你期望的格式(2个空格,驼峰命名法等),尽管你使用了一个更小的提示

这是使用自定义指令的力量!但你可以做的还有很多……

定制所有东西!

GitHub Copilot 为 VS Code 增加了许多出色的功能,包括生成提交信息、审查选定的代码,甚至生成测试的能力!

这些都很有用,但很可能你已经有自己的一套方法来完成这些事情。好消息是,你可以通过覆盖工作区中的几个设置来自定义它们。

试试这个:打开命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 并输入短语 "workspace settings"。你应该会看到一个菜单选项,上面写着 偏好设置:打开工作区设置 (JSON)。选择该选项,并在你的工作区中添加以下设置:

{
  "github.copilot.chat.commitMessageGeneration.instructions": [
    {
      "text": "对文件更改和更改原因进行非常详细的描述,并使用大量的表情符号。"
    }
  ]
}

保存settings.json保存并关闭文件。活动栏中的源控制图标现在应该显示您已更改文件。如果您在一个没有Git仓库的测试目录中工作,可以通过源控制视图直接创建一个。选择初始化仓库按钮并按照说明进行操作。

乐趣从这里开始:打开源代码控制视图,并在提交信息输入字段中选择闪亮图标。这会指示 Copilot 为您生成提交信息。请注意,它生成的提交信息非常详细,并且使用了许多表情符号!

截图显示了源代码控制视图,显示了最新提交的彩色提交信息。

注释掉你的指令settings.json保存并再次生成提交信息。你应该看到一个不使用任何表情符号的更简短的提交信息。

撰写良好、详细的提交信息是一种需要时间学习的技能。但是有了 Copilot,你可以节省大量时间,并且能够产生更好的信息。

全身心投入自定义指令

你可能将编码标准放在不同的文件中,格式也不同于Markdown。也许你有一个用于JavaScript的,一个用于Python的,还有一个用于Go的。你可能还有关于如何与数据库工作的标准——你使用的数据类型、命名约定、连接字符串处理等。

你不需要将所有这些内容合并到一个文件中。你可以将它们分开,仍然可以使用 Copilot 来帮助你处理所有这些内容!

让我们试试看!打开你的.vscode/settings.json文件(工作区设置)并添加以下设置:

{
  "github.copilot.chat.codeGeneration.instructions": [
    {
      "file": "./docs/javascript-styles.md"
    },
    {
      "file": "./docs/database-styles.md"
    }
  ]
}

这指示 Copilot 在 文档目录:javascript-styles.md数据库样式.md您可以添加任意多个文件, Copilot 将按照您指定的顺序查找它们。

截图显示了资源管理器视图,突出显示了文件夹中的两个文件,并显示了文件中引用这些文档文件的自定义指令。

您可以在此处添加任何您喜欢的文件,包括您当前冲刺的规格。我们甚至见过有人将Gherkin规格作为自定义指令添加进去!

试试看吧!

更改模型音调

模型往往过于礼貌。他们会经常道歉,很少为自己和他们做出的决定辩护。如果你告诉他们有什么不对劲的地方,他们几乎不会为自己辩护。当你试图完成工作时,这可能会很烦人。你可以通过一些指令来覆盖模型过于帮忙的语气,以符合你的期望。

- 如果我告诉你你是错的,思考一下你是否认为这是真的,并用事实来回应。
- 避免道歉或发表和解的陈述。
- 不需要用“你是对的”或“是的”这样的陈述与用户达成一致。
- 避免夸张和激动,专注于手头的任务并以务实的方式完成它。

给模特儿指示总是很重要的用肯定的方式而不是否定的方式,因为他们需要知道该做什么,而不是不该做什么要做的事。与其说“不要做”,不如说“避免”。

实验并享受乐趣!一位程序员报告说他们喜欢通过生成 Haiku 诗来使他们的测试套件更加生动。这似乎有点极端,但如果你在做一个爱好项目,为什么不呢?你可以添加像这样的说明:

- 生成五言诗格式的测试。
- 使用5-7-5的音节结构。
- 使用自然主题和意象。

还有一件事……

GitHub Copilot也可以将代码文件视为自定义指令!例如,如果您有一个SQL文件,您可以将其添加到设置中, Copilot将使用它来帮助生成您的数据访问代码。

如果你有一个特别喜欢的数据访问工具,你可以向项目中添加一个示例,然后 Copilot 会在生成数据访问代码时使用它。

试试看!以下是我们团队成员用来为PostgreSQL数据库生成Sequelize模型(Node.js ORM)的一个示例:

//Template for a Sequelize model
const { DataTypes, Model } = require('sequelize');
class User extends Model {
  //static or factory methods
  //instance methods
}
const init = function(sequelize){
  User.init({
    //schema goes here
  }, {
    hooks: {},
    tableName: "users"
    underscored: true,
    sequelize
  })
}

导出.创建用户 = 函数(sequelize){
  初始化(sequelize);
  返回 用户;
}

在你的设置中引用这个文件,GitHub Copilot 将会使用这个模板,结合你的 SQL 文件为你生成项目中的模型。你可以在编辑或询问模式下进行此操作。只需使用提示为项目生成数据访问然后bash!魔法!

介绍提示文件

提示文件允许您为个人和团队编排可重复使用的提示。这有助于在保持一致性的同时减少提示,从而避免重复。

例如,假设您想创建一个可重复使用的提示,该提示将根据数据库模式创建一个界面。您可以创建一个包含数据库模式的提示文件。 Copilot很乐意为您生成一个SQL脚本来完成此操作。

提示文件放在.github/提示目录,只是带有名称的Markdown文件,格式为*.提示.md输入:.

你可能有一个.github/prompts/数据库用户.prompt.md包含对您的数据库的描述。例如:

# 用户身份验证

我们的应用程序将有 “用户”,包含以下信息:

- 标准用户信息,包括:用户名电子邮件(唯一)。
-一个“魔法”登录链接,该链接将是一个GUID以及链接的到期日期。
-微软、GitHub和Google的社交登录账户ID。
-上次登录的时间戳。
-用户创建的时间戳。

然后你可以创建另一个提示文件,称为生成接口。提示.md包含生成界面的指令。Prompt文件可以相互引用,因此您可以将数据库模式作为简单的Markdown链接传递到这个Prompt文件中。

根据用户指定的表生成一个TypeScript接口。参考[用户模式](database_users.prompt.md)。

要将这些提示文件用于聊天,请使用附件按钮(回形针)或使用选择提示 从菜单中,然后选择您要使用的提示文件。请注意,当我使用生成接口。提示.md文件,它会自动拉取数据库用户.提示.md文件。

动画GIF展示了如何在聊天中使用提示文件。

结论

VS Code 是一个可定制的助手,当正确配置时,可以成为团队工作流程中不可或缺的一部分。通过自定义指令,控制权掌握在开发人员手中。

祝你编码愉快!