上下文就是你所需要的一切:通过自定义指令获得更好的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自动识别,因此您无需做任何特殊操作即可使其工作。

将这些指令添加到文件中
# 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理解您的项目上下文并为您提供相关答案。

请注意,尽管您使用了更小的提示,Copilot还是提供了更详细的答案,并且格式符合您的预期(2个空格,驼峰命名等)。
这就是使用自定义指令的力量!但您能做的远不止这些...
自定义所有内容!
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为您生成提交消息。请注意,它生成了一条非常详细并使用了大量表情符号的提交消息!

注释掉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将按照您指定的顺序查找它们。

您可以在这里添加任何您喜欢的文件,包括当前冲刺的规范。我们甚至看到有人将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文件。

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