参加你附近的 ,了解 VS Code 中的 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 自动识别,所以您不需要做任何特殊操作来让它生效。

Screenshot showing the Explorer view in VS Code, highlighting the  file. The file is still empty.

将这些指令添加到文件中

# Copilot Instructions

This project is a web application that allows users to create and manage tasks. The application is built using React and Node.js, and it uses MongoDB as the database.

## Coding Standards

- 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 中进行尾递归”或类似的问题。只需输入 尾递归 并按下 Enter 键。请注意,Copilot 理解了您项目的上下文,并为您提供了一个相关的答案。

Screenshot that shows the Copilot response for "tail recursion" in the Chat view.

请注意,Copilot 给了您一个更详细的答案,格式也符合您的预期(2个空格缩进,camelCase命名法等),尽管您使用了短得多的提示

这就是使用自定义指令的力量!但您还可以做更多...

自定义一切!

GitHub Copilot 为 VS Code 增添了许多强大的功能,包括生成提交信息、审查所选代码,甚至生成测试!

这些都很有用,但您很可能有自己处理这些事情的方式。好消息是,您可以通过覆盖工作区中的一些设置来个性化它们。

试试这个:打开命令面板(⇧⌘P (Windows、Linux 为 Ctrl+Shift+P))并输入“workspace settings”。您应该会看到一个菜单选项显示为 首选项: 打开工作区设置 (JSON)。选择该选项,并将以下设置添加到您的工作区

{
  "github.copilot.chat.commitMessageGeneration.instructions": [
    {
      "text": "Be extremely detailed with the file changes and the reason for the change. Use lots of emojis."
    }
  ]
}

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

有趣的部分来了:打开源代码管理视图,并选择提交信息输入字段中的闪烁图标。这会指示 Copilot 为您生成一条提交信息。请注意,它生成的提交信息非常详细,并使用了大量的表情符号!

Screenshot that shows the Source Control view, showing a colorful commit message for the latest commit.

注释掉您 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 在 docs 目录中查找两个文件:javascript-styles.mddatabase-styles.md。您可以添加任意数量的文件,Copilot 将按照您指定的顺序查找它们。

Screenshot that shows the Explorer view, highlighting the two files in the  folder and showing the custom instructions in the  file that reference these docs files.

您可以在这里添加任何您喜欢的文件,包括您当前正在进行的冲刺(sprint)的规范。我们甚至看到有人将 Gherkin 规范添加为自定义指令!

快来试试吧!

改变模型的语气

模型往往过于礼貌。它们经常道歉,并且当您告诉它们某事是错误的时候,它们几乎从不为自己和自己所做的决定辩护。当您试图完成工作时,这可能会很烦人。您可以通过一些关于您希望它如何回应的指令来改变模型过于乐于助人的语气。

- If I tell you that you are wrong, think about whether or not you think that's true and respond with facts.
- Avoid apologizing or making conciliatory statements.
- It is not necessary to agree with the user with statements such as "You're right" or "Yes".
- Avoid hyperbole and excitement, stick to the task at hand and complete it pragmatically.

重要的是,总是要给模型肯定的指令,而不是否定的,因为它们需要知道该做什么,而不是该做什么。与其说“不要做”,不如说“避免”。

尽情试验,享受乐趣!一位程序员报告说,他们喜欢通过生成俳句形式的测试来为他们的测试套件增添活力。这似乎有点极端,但如果您正在做一个业余项目,何乐而不为呢?您可以添加如下指令

- Generate tests in haiku format.
- Use 5-7-5 syllable structure.
- Use nature themes and imagery.

还有一件事...

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
  })
}

exports.createUser = function(sequelize){
  init(sequelize);
  return User;
}

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

介绍提示文件

提示文件允许您为您自己和您的团队编写可重用的提示。这有助于强制执行一致性,同时减少可能变得乏味的提示过程。

例如,假设您想创建一个可重用的提示,该提示将根据数据库模式创建一个接口。您可以创建一个包含数据库模式的提示文件。Copilot 非常乐意为您生成一个 SQL 脚本来完成这件事。

提示文件位于 .github/prompts 目录中,它们只是格式为 *.prompt.md 的 Markdown 文件。

您可能有一个 .github/prompts/database_users.prompt.md 文件,其中包含了对您数据库的描述。例如

# User Authentication

Our application will have `users` with the following information:

- The standard user information, including: `name`, `email` (unique).
- A link for a "magic" login, which will be a `GUID` as well as the expiration date for the link.
- Social login account IDs for Microsoft, GitHub, and Google.
- The timestamp of the last login.
- The timestamp for when the user was created.

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

Generate a TypeScript interface for the table specified by the user. Refer to the [user schema](database_users.prompt.md).

要在聊天中使用这些提示文件,请使用附加按钮(回形针)或使用 。从菜单中选择提示,然后选择您想要使用的提示文件。请注意,当我使用 generate-interface.prompt.md 文件时,它会自动引入 database_users.prompt.md 文件。

Animated gif showing how to use prompt files in chat.

结论

VS Code 是一个可定制的助手,当配置得当时,可以成为团队工作流程中不可或缺的一部分。有了自定义指令,控制权就掌握在开发者手中。

编码愉快!