上下文就是你所需要的一切:通过自定义指令获得更好的 AI 结果
2025 年 3 月 26 日,作者:Rob Conery, @robconery.com, Burke Holland, @burkeholland
本月初,我们宣布了 Visual Studio Code 中的自定义指令正式可用。通过自定义指令,您可以为 Copilot 提供有关团队工作流程、特定风格偏好、模型可能不了解的库等方面的具体上下文。
在本文中,我们将深入探讨什么是自定义指令,您今天如何使用它们来显著改善 GitHub Copilot 的结果,以及一个名为“提示文件(prompt files)”的全新预览功能,您可以立即尝试。
更小的提示,通过简单的 Markdown 文件获得更好的结果
使用 GitHub Copilot 可以为您的开发过程注入强大动力,但在如何有效地进行提示方面存在学习曲线。您可能需要尝试几次才能得到想要的正确答案,这通常意味着需要重新组织问题或提示词。即便如此,Copilot 依然会加速您的工作流程!
但您知道吗?您可以“调优” GitHub Copilot 以更好地满足您的需求。通过使用一个简单的 Markdown 文件,您可以为 Copilot 提供特定的指令,帮助它更好地理解您的项目。在本文中,我们将带您了解如何创建和使用自定义指令,这是 VS Code 中一项新发布的功能。
试试看:在您的项目中创建一个名为 .github/copilot-instructions.md 的文件。该文件将包含帮助 Copilot 更好地理解您项目的指令。Copilot 会自动识别此文件,因此您无需进行任何特殊设置即可使其生效。

将这些指令添加到文件中
# 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 更好地理解您项目的指令。您可以自定义这些指令以符合您的项目需求。
现在,打开 Chat 视图并输入一个极其简洁的命令,例如 tail recursion。您不必询问“如何在 JavaScript 中实现尾递归”或类似的内容。只需输入 tail recursion 并按下 Enter 键。请注意,Copilot 能够理解您项目的上下文并为您提供相关的答案。

请注意,即使您使用了更小的提示,Copilot 也给出了更详细的答案,而且格式正是您所期望的(2 个空格、camelCase 等)。
这就是使用自定义指令的力量!但您还可以做更多的事情……
自定义所有一切!
GitHub Copilot 为 VS Code 增加了许多很棒的功能,包括生成提交信息、审查选定代码,甚至生成测试!
这些都很有用,但很可能您有自己处理这些事情的方式。好消息是,您可以通过覆盖工作区中的一些设置来对它们进行个性化设置。
试试看:打开命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))并输入“workspace settings”。您应该会看到一个名为 Preferences: Open 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 存储库的测试目录中工作,可以直接通过源代码管理视图创建一个。只需选择 Initialize Repository 按钮并按照说明操作即可。
有趣的部分开始了:打开源代码管理视图,选择提交信息输入框中的闪烁图标。这会指示 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 在 docs 目录中查找两个文件:javascript-styles.md 和 database-styles.md。您可以根据需要添加任意数量的文件,Copilot 会按照您指定的顺序查找它们。

您可以在这里添加任何您喜欢的文件,包括当前冲刺(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 文件一起为您生成项目中的模型。您可以在编辑模式或询问模式下执行此操作。只需使用提示 generate the data access for the project,砰!魔法发生了!
引入提示文件(prompt files)
提示文件允许您为您自己和团队编写可重用的提示词。这有助于在确保一致性的同时减少重复的提示工作,因为那可能会变得非常单调乏味。
例如,假设您想创建一个可重用的提示词,根据数据库模式创建接口。您可以创建一个包含数据库模式的提示文件。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).
要在聊天中使用这些提示文件,请使用附件按钮(回形针图标)或使用 。从菜单中选择 Prompts,然后选择您要使用的提示文件。请注意,当我使用 generate-interface.prompt.md 文件时,它会自动引入 database_users.prompt.md 文件。

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