在 VS Code 中自定义 AI 响应
Visual Studio Code 中的聊天功能可以在您提供正确上下文的情况下,给出符合您的编码习惯和项目要求的响应并生成代码。您无需在每个聊天提示中重复添加这些信息,而是可以将这些上下文存储在文件中,并自动将其包含在每个聊天请求中。本文介绍了如何在 VS Code 中使用自定义指令和提示文件来定制 AI 响应。
在 Visual Studio Code 中自定义 AI 响应主要有三种方式
-
自定义指令:为代码生成、代码审查或生成提交消息等任务定义通用准则或规则。自定义指令描述了 AI 应该如何操作的条件(即任务的完成方式)。了解如何定义自定义指令。VS Code 还可以帮助您为您的工作区生成一个自定义指令文件,使其符合您的编码习惯和项目要求。
示例场景
- 指定编码规范、首选技术或项目要求,使生成的代码符合您的标准。
- 设置代码审查规则,例如检查安全漏洞或性能问题。
- 提供生成提交消息或拉取请求标题和描述的指令。
-
提示文件:为代码生成或代码审查等常见任务定义可重用提示。提示文件是独立的提示,您可以直接在聊天中运行它们。它们描述了要执行的任务(即要做什么)。您可以选择性地包含有关如何执行任务的特定于任务的准则,或者在提示文件中引用自定义指令。了解如何创建提示文件。
示例场景
- 为常见编码任务创建可重用提示,例如搭建新组件、API 路由或生成测试。
- 定义用于执行代码审查的提示,例如检查代码质量、安全漏洞或性能问题。
- 为复杂流程或项目特定模式创建分步指南。
- 定义用于生成实施计划、架构设计或迁移策略的提示。
-
自定义聊天模式:定义聊天如何操作、可以使用哪些工具以及如何与代码库交互。每个聊天提示都在聊天模式的范围内运行,无需为每个请求配置工具和指令。
示例场景
- 创建一个用于规划的聊天模式,其中 AI 对代码库具有只读访问权限,并且只能生成实施计划。
- 定义一个研究聊天模式,其中 AI 可以访问外部资源以探索新技术或收集信息。
- 创建一个前端开发人员聊天模式,其中 AI 只能生成和修改与前端开发相关的代码。
自定义指令
自定义指令使您能够描述通用准则或规则,以获得符合您特定编码习惯和技术栈的响应。自定义指令无需在每次聊天查询中手动包含此上下文,而是会自动将此信息纳入每个聊天请求中。
代码补全不考虑自定义指令。
自定义指令的类型
VS Code 支持多种定义自定义指令的方式
自定义指令类型 | 描述 |
---|---|
.github/copilot-instructions.md 文件 |
|
.instructions.md 文件 |
|
VS Code 设置 |
|
您可以使用这些方法的组合来定义自定义指令,所有指令都将包含在聊天请求中。指令不适用特定的顺序或优先级,因此请确保避免文件中存在冲突的指令。
自定义指令示例
以下示例演示了如何使用自定义指令
示例:通用编码指南
---
applyTo: "**"
---
# Project general coding standards
## Naming Conventions
- Use PascalCase for component names, interfaces, and type aliases
- Use camelCase for variables, functions, and methods
- Prefix private class members with underscore (_)
- Use ALL_CAPS for constants
## Error Handling
- Use try/catch blocks for async operations
- Implement proper error boundaries in React components
- Always log errors with contextual information
示例:TypeScript 和 React 编码指南
请注意,这些指令如何引用通用编码指南文件。您可以将指令拆分为多个文件,以保持其组织性并专注于特定主题。
---
applyTo: "**/*.ts,**/*.tsx"
---
# Project coding standards for TypeScript and React
Apply the [general coding guidelines](./general-coding.instructions.md) to all code.
## TypeScript Guidelines
- Use TypeScript for all new code
- Follow functional programming principles where possible
- Use interfaces for data structures and type definitions
- Prefer immutable data (const, readonly)
- Use optional chaining (?.) and nullish coalescing (??) operators
## React Guidelines
- Use functional components with hooks
- Follow the React hooks rules (no conditional hooks)
- Use React.FC type for components with children
- Keep components small and focused
- Use CSS modules for component styling
使用 .github/copilot-instructions.md
文件
您可以将自定义指令存储在工作区或存储库的 .github/copilot-instructions.md
文件中,并使用 Markdown 描述您的编码习惯、首选技术和项目要求。这些指令仅适用于文件所在的工作区。
VS Code 会自动将 .github/copilot-instructions.md
文件中的指令包含在每个聊天请求中,并将其应用于代码生成。
要使用 .github/copilot-instructions.md
文件
-
将 github.copilot.chat.codeGeneration.useInstructionFiles 设置为
true
,以指示 VS Code 在每个聊天请求中自动使用copilot-instructions.md
文件。 -
在工作区根目录创建
.github/copilot-instructions.md
文件。如果需要,请先创建.github
目录。 -
使用自然语言和 Markdown 格式描述您的指令。
指令之间的空白被忽略,因此指令可以写成一个单独的段落,每条指令在新的一行上,或者用空行分隔以提高可读性。
Visual Studio 和 GitHub.com 中的 GitHub Copilot 也会检测 .github/copilot-instructions.md
文件。如果您有一个在 VS Code 和 Visual Studio 中都使用的工作区,您可以使用相同的文件来为两个编辑器定义自定义指令。
使用 .instructions.md
文件
您还可以创建一个或多个 .instructions.md
文件来存储特定任务的自定义指令。例如,您可以为不同的编程语言、框架或项目类型创建指令文件。
VS Code 可以自动将指令文件添加到所有聊天请求中,或者您可以指定哪些文件应该自动应用指令。此外,您还可以手动将指令文件附加到聊天提示中。
VS Code 支持两种指令文件范围
- 工作区指令文件:仅在工作区内可用,并存储在工作区的
.github/instructions
文件夹中。 - 用户指令文件:可在多个工作区中使用,并存储在当前VS Code 配置文件中。
指令文件结构
指令文件是一个以 .instructions.md
为文件后缀的 Markdown 文件。指令文件包含两个部分
-
(可选)带有元数据(Front Matter 语法)的头部
-
description
:指令文件的简要描述。当您在聊天视图中悬停指令文件时,会显示此描述。 -
applyTo
:为自动应用指令的文件指定一个 glob 模式。若要始终包含自定义指令,请使用**
模式。例如,以下指令文件始终适用
--- applyTo: "**" --- Add a comment at the end of the file: 'Contains AI-generated edits.'
-
-
包含指令内容的正文
使用 Markdown 格式以自然语言指定自定义指令。您可以使用标题、列表和代码块来组织指令。
您可以使用 Markdown 链接引用其他指令文件。请使用相对路径引用这些文件,并确保路径根据指令文件的位置是正确的。
创建指令文件
您可以在工作区或用户配置文件中创建指令文件。工作区指令文件仅在工作区内可用,而用户指令文件可在多个工作区中使用。
创建指令文件
-
在聊天视图中选择配置聊天按钮,选择指令,然后选择新建指令文件。
或者,从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))使用聊天:新建指令文件命令。
-
选择指令文件的创建位置。
-
工作区:默认情况下,工作区指令文件存储在工作区的
.github/instructions
文件夹中。使用 chat.instructionsFilesLocations 设置为工作区添加更多指令文件夹。
-
-
输入指令文件的名称。
-
使用 Markdown 格式编写自定义指令。
在头部指定
applyTo
元数据属性,以配置何时自动应用指令。例如,您可以指定applyTo: "**/*.ts,**/*.tsx"
,以仅将指令应用于 TypeScript 文件。要引用其他工作区文件,请在指令文件中使用 Markdown 链接 (
[index](../index.ts)
) 或 #引用它们 (#index.ts
)。
要修改现有指令文件,请在聊天视图中选择配置聊天按钮,选择指令,然后从列表中选择一个指令文件。或者,从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))使用聊天:配置指令命令,并从快速选择中选择指令文件。
在聊天中使用指令文件
如果您在指令文件中指定了 applyTo
元数据属性,VS Code 会自动将指令应用于所有与 glob 模式匹配的文件。
手动将指令文件附加到聊天提示
-
在聊天视图中,选择添加上下文 > 指令,然后从快速选择中选择指令文件。
-
从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))运行聊天:附加指令命令,并从快速选择中选择指令文件。
在设置中指定自定义指令
您可以在用户或工作区设置中为特定场景配置自定义指令。
* codeGeneration
和 testGeneration
设置已从 VS Code 1.102 开始弃用。我们建议您改用指令文件(.github/copilot-instructions.md
或 *.instructions.md
)。
您可以在设置值中将自定义指令定义为文本(text
属性),或在工作区中引用外部文件(file
属性)。
以下代码片段展示了如何在 settings.json
文件中定义一组指令。
"github.copilot.chat.pullRequestDescriptionGeneration.instructions": [
{ "text": "Always include a list of key changes." },
"github.copilot.chat.reviewSelection.instructions": [
{ "file": "guidance/backend-review-guidelines.md" },
{ "file": "guidance/frontend-review-guidelines.md" }
]
为您的工作区生成指令文件
VS Code 可以分析您的工作区,并生成一个匹配的 .github/copilot-instructions.md
文件,其中包含符合您的编码习惯和项目要求的自定义指令。
为您的工作区生成指令文件
-
在聊天视图中选择配置聊天按钮,然后选择指令
-
从快速选择中选择生成指令。
-
审查生成的指令文件并进行任何必要的编辑。
定义自定义指令的提示
-
保持指令简短且自包含。每条指令都应是一个简单、独立的语句。如果您需要提供多条信息,请使用多条指令。
-
不要在指令中引用外部资源,例如特定的编码标准。
-
将指令拆分为多个文件。此方法有助于按主题或任务类型组织指令。
-
通过将指令存储在指令文件中,可以轻松地与团队或跨项目共享自定义指令。您还可以对文件进行版本控制,以跟踪随时间的变化。
-
使用指令文件头部中的
applyTo
属性,以自动将指令应用于特定文件或文件夹。 -
在提示文件中引用自定义指令,以保持提示清晰和集中,并避免为不同任务重复指令。
提示文件(实验性)
提示文件是用于代码生成或代码审查等常见任务的可重用提示。您在 Markdown 文件中定义提示内容。提示文件是独立的提示,您可以直接在聊天中运行。此外,您还可以选择性地包含有关如何执行任务的指南。
提示文件可以利用指令文件来重用通用准则,并在提示中包含特定于任务的指令。例如,一个安全审查提示文件可以引用描述通用安全实践的自定义指令,同时还包含关于如何报告审查结果的具体指令。
VS Code 支持两种提示文件范围
- 工作区提示文件:仅在工作区内可用,并存储在工作区的
.github/prompts
文件夹中。 - 用户提示文件:可在多个工作区中使用,并存储在当前VS Code 配置文件中。
提示文件示例
以下示例演示了如何使用提示文件
示例:生成 React 表单组件
---
mode: 'agent'
model: GPT-4o
tools: ['githubRepo', 'codebase']
description: 'Generate a new React form component'
---
Your goal is to generate a new React form component based on the templates in #githubRepo contoso/react-templates.
Ask for the form name and fields if not provided.
Requirements for the form:
* Use form design system components: [design-system/Form.md](../docs/design-system/Form.md)
* Use `react-hook-form` for form state management:
* Always define TypeScript types for your form data
* Prefer *uncontrolled* components using register
* Use `defaultValues` to prevent unnecessary rerenders
* Use `yup` for validation:
* Create reusable validation schemas in separate files
* Use TypeScript types to ensure type safety
* Customize UX-friendly validation rules
示例:对 REST API 执行安全审查
---
mode: 'ask'
model: Claude Sonnet 4
description: 'Perform a REST API security review'
---
Perform a REST API security review and provide a TODO list of security issues to address.
* Ensure all endpoints are protected by authentication and authorization
* Validate all user inputs and sanitize data
* Implement rate limiting and throttling
* Implement logging and monitoring for security events
Return the TODO list in a Markdown format, grouped by priority and issue type.
提示文件结构
提示文件是一个以 .prompt.md
为文件后缀的 Markdown 文件。它包含以下两个主要部分
-
(可选)带有元数据(Front Matter 语法)的头部
mode
:运行提示时使用的聊天模式:ask
(提问)、edit
(编辑)或agent
(代理,默认)。model
:运行提示时要使用的 AI 模型。如果未指定,则使用模型选择器中当前选定的模型。tools
:工具(集)名称数组,用于指示在代理模式下可以使用哪些工具(集)。选择配置工具以从工作区中可用工具列表中选择工具。如果在运行提示时给定工具(集)不可用,则会忽略它。description
:提示的简短描述。
-
包含提示内容的正文
提示文件模拟了在聊天中编写提示的格式。这允许混合自然语言指令、附加上下文,甚至将其他提示文件链接为依赖项。您可以使用 Markdown 格式来组织提示内容,包括标题、列表和代码块。
您可以使用 Markdown 链接引用其他工作区文件、提示文件或指令文件。请使用相对路径引用这些文件,并确保路径根据提示文件的位置是正确的。
在提示文件中,您可以使用 ${variableName}
语法引用变量。您可以引用以下变量
- 工作区变量 -
${workspaceFolder}
、${workspaceFolderBasename}
- 选定内容变量 -
${selection}
、${selectedText}
- 文件上下文变量 -
${file}
、${fileBasename}
、${fileDirname}
、${fileBasenameNoExtension}
- 输入变量 -
${input:variableName}
、${input:variableName:placeholder}
(从聊天输入字段向提示传递值)
创建提示文件
您可以在工作区或用户配置文件中创建提示文件。工作区提示文件仅在工作区内可用,而用户提示文件可在多个工作区中使用。
创建提示文件
-
在聊天视图中选择配置聊天按钮,选择提示文件,然后选择新建提示文件。
或者,从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))使用聊天:新建提示文件命令。
-
选择提示文件的创建位置。
-
工作区:默认情况下,工作区提示文件存储在工作区的
.github/prompts
文件夹中。使用 chat.promptFilesLocations 设置为工作区添加更多提示文件夹。
-
-
输入提示文件的名称。
或者,您也可以直接在工作区的提示文件夹中创建一个
.prompt.md
文件。 -
使用 Markdown 格式编写聊天提示。
在提示文件中,将其他工作区文件作为 Markdown 链接 (
[index](../index.ts)
) 或作为#index.ts
引用进行引用。您还可以引用其他
.prompt.md
文件来创建提示层次结构。您也可以以相同方式引用指令文件。
要修改现有提示文件,请在聊天视图中选择配置聊天按钮,选择提示文件,然后从列表中选择一个提示文件。或者,从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))使用聊天:配置提示文件命令,并从快速选择中选择提示文件。
在聊天中使用提示文件
您有多种选项可以运行提示文件
-
从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))运行聊天:运行提示命令,并从快速选择中选择一个提示文件。
-
在聊天视图中,在聊天输入字段中键入
/
,后跟提示文件名。此选项使您能够在聊天输入字段中传递附加信息。例如,
/create-react-form
或/create-react-form: formName=MyForm
。 -
在编辑器中打开提示文件,然后按下编辑器标题区域中的播放按钮。您可以选择在当前聊天会话中运行提示,或打开新的聊天会话。
此选项对于快速测试和迭代提示文件非常有用。
跨设备同步用户提示文件
VS Code 可以使用设置同步在多个设备之间同步您的用户提示文件。
要同步您的用户提示文件,请为提示和指令文件启用设置同步
-
确保已启用设置同步。
-
从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P))运行设置同步:配置。
-
从要同步的设置列表中选择提示和指令。
在 VS Code 中集中管理指令和提示文件
使用 chat.promptFiles 设置在 VS Code 中启用或禁用指令和提示文件。
要在组织内通过设备管理集中启用或禁用此设置,请查阅企业文档中的集中管理 VS Code 设置。
设置
自定义指令设置
-
chat.promptFiles (实验性):启用可重用提示和指令文件。
-
github.copilot.chat.codeGeneration.useInstructionFiles:控制是否将
.github/copilot-instructions.md
中的代码指令添加到 Copilot 请求中。 -
chat.instructionsFilesLocations (实验性):一个字典,包含指令文件所在的文件夹及其是否启用的布尔值。相对路径将从工作区的根文件夹解析。支持文件路径的 glob 模式。默认情况下,指令文件位于工作区的
.github/instructions
文件夹中。"chat.instructionsFilesLocations": { "src/frontend/instructions": true, "src/backend/instructions": false }
-
github.copilot.chat.codeGeneration.instructions (实验性):将添加到生成代码的 Copilot 请求中的一组指令。
-
github.copilot.chat.testGeneration.instructions (实验性):将添加到生成测试的 Copilot 请求中的一组指令。
-
github.copilot.chat.reviewSelection.instructions (预览版):将添加到 Copilot 请求中用于审查当前编辑器选择的一组指令。
-
github.copilot.chat.commitMessageGeneration.instructions (实验性):将添加到生成提交消息的 Copilot 请求中的一组指令。
-
github.copilot.chat.pullRequestDescriptionGeneration.instructions (实验性):将添加到生成拉取请求标题和描述的 Copilot 请求中的一组指令。
提示文件设置
-
chat.promptFiles (实验性):启用对可重用提示文件和指令文件的支持。
-
chat.promptFilesLocations (实验性):一个字典,包含提示文件所在的文件夹及其是否启用的布尔值。相对路径将从工作区的根文件夹解析。支持文件路径的 glob 模式。默认情况下,提示文件位于工作区的
.github/prompts
文件夹中。"chat.promptFilesLocations": { ".github/prompts": false, "setup/**/prompts": true }