尝试以扩展 VS Code 中的代理模式!

在 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 文件
  • 在 Markdown 中描述代码生成指令。
  • 所有指令都合并在一个文件中,存储在工作区内。
  • 指令会自动包含在每个聊天请求中。
  • 在所有支持 Copilot 的编辑器和 IDE 中均受支持。
  • 使用此文件定义适用于所有代码生成任务的通用编码实践、首选技术和项目需求。
.instructions.md 文件
  • 在 Markdown 中描述代码生成指令。
  • 创建一个或多个指令文件,存储在工作区或你的用户配置文件中。
  • 使用 glob 模式为所有请求或特定文件自动包含指令。
  • 在 VS Code 中受支持。
  • 如果你想拥有针对特定任务的代码生成指令,并更好地控制何时将指令包含在聊天提示中,请使用这些文件。
VS Code 设置
  • 在 VS Code 用户或工作区设置中指定指令。
  • 在设置值中或一个或多个文件中定义指令。
  • 在 VS Code 中受支持。
  • 支持代码生成、测试生成、提交消息、代码审查以及 PR 标题和描述的指令。
  • 使用此选项为代码生成以外的任务定义指令。

你可以组合使用这些方法来定义自定义指令,所有指令都会被包含在聊天请求中。指令之间没有特定的顺序或优先级,因此请确保避免在文件中出现相互冲突的指令。

自定义指令示例

以下示例演示了如何使用自定义指令

示例:通用编码指南
---
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 文件

  1. github.copilot.chat.codeGeneration.useInstructionFiles 设置为 true,以指示 VS Code 为每个聊天请求自动使用 copilot-instructions.md 文件。

  2. 在工作区的根目录下创建一个 .github/copilot-instructions.md 文件。如果需要,请先创建一个 .github 目录。

  3. 使用自然语言和 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 链接引用其他指令文件。使用相对路径来引用这些文件,并确保路径根据指令文件的位置是正确的。

创建指令文件

你可以在工作区或用户配置文件中创建指令文件。工作区指令文件仅在工作区内可用,而用户指令文件可在多个工作区中使用。

创建指令文件:

  1. 在聊天视图中选择配置聊天按钮,选择指令,然后选择新建指令文件

    Screenshot showing the Chat view, and Configure Chat menu, highlighting the Configure Chat button.

    或者,从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P)使用聊天:新建指令文件命令。

  2. 选择指令文件应创建的位置。

    • 工作区:默认情况下,工作区指令文件存储在工作区的 .github/instructions 文件夹中。使用 chat.instructionsFilesLocations 设置为你的工作区添加更多指令文件夹。

    • 用户配置文件:用户指令文件存储在当前配置文件文件夹中。你可以使用设置同步在多个设备间同步你的用户指令文件。

  3. 为你的指令文件输入一个名称。

  4. 使用 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)运行聊天:附加指令命令,并从快速选择中选择指令文件。

在设置中指定自定义指令

你可以在用户或工作区设置中为特殊场景配置自定义指令。

指令类型 设置名称
代码审查 github.copilot.chat.reviewSelection.instructions
提交消息生成 github.copilot.chat.commitMessageGeneration.instructions
拉取请求标题和描述生成 github.copilot.chat.pullRequestDescriptionGeneration.instructions
代码生成(已弃用)* github.copilot.chat.codeGeneration.instructions
测试生成(已弃用)* github.copilot.chat.testGeneration.instructions

* codeGenerationtestGeneration 设置自 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 文件,其中包含符合你编码实践和项目需求的自定义指令。

为你的工作区生成指令文件:

  1. 在聊天视图中选择配置聊天按钮,然后选择指令

  2. 从快速选择中选择生成指令

  3. 审查生成的指令文件并进行任何必要的编辑。

定义自定义指令的技巧

  • 保持你的指令简短且自成一体。每个指令都应该是一个单一、简单的陈述。如果你需要提供多条信息,请使用多个指令。

  • 不要在指令中引用外部资源,例如特定的编码标准。

  • 将指令分成多个文件。这种方法对于按主题或任务类型组织指令很有用。

  • 通过将指令存储在指令文件中,可以轻松地与你的团队或跨项目共享自定义指令。你还可以对文件进行版本控制以跟踪随时间的变化。

  • 在指令文件头中使用 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:运行提示时使用的聊天模式:askeditagent(默认)。
    • model:运行提示时使用的 AI 模型。如果未指定,则使用模型选择器中当前选择的模型。
    • tools:工具(集)名称的数组,用于指示在代理模式下可以使用哪些工具(集)。选择配置工具从工作区中的可用工具列表中选择工具。如果在运行提示时给定的工具(集)不可用,它将被忽略。
    • description:提示的简短描述。
  • 包含提示内容的主体

    提示文件模仿在聊天中编写提示的格式。这允许混合自然语言指令、附加上下文,甚至链接到其他提示文件作为依赖项。你可以使用 Markdown 格式来组织提示内容,包括标题、列表和代码块。

你可以使用 Markdown 链接引用其他工作区文件、提示文件或指令文件。使用相对路径来引用这些文件,并确保路径根据提示文件的位置是正确的。

在提示文件中,你可以使用 ${variableName} 语法引用变量。你可以引用以下变量:

  • 工作区变量 - ${workspaceFolder}, ${workspaceFolderBasename}
  • 选择变量 - ${selection}, ${selectedText}
  • 文件上下文变量 - ${file}, ${fileBasename}, ${fileDirname}, ${fileBasenameNoExtension}
  • 输入变量 - ${input:variableName}, ${input:variableName:placeholder}(从聊天输入字段向提示传递值)

创建提示文件

你可以在工作区或用户配置文件中创建提示文件。工作区提示文件仅在工作区内可用,而用户提示文件可在多个工作区中使用。

创建提示文件:

  1. 在聊天视图中选择配置聊天按钮,选择提示文件,然后选择新建提示文件

    Screenshot showing the Chat view, and Configure Chat menu, highlighting the Configure Chat button.

    或者,从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P)使用聊天:新建提示文件命令。

  2. 选择提示文件应创建的位置。

    • 工作区:默认情况下,工作区提示文件存储在工作区的 .github/prompts 文件夹中。使用 chat.promptFilesLocations 设置为你的工作区添加更多提示文件夹。

    • 用户配置文件:用户提示文件存储在当前配置文件文件夹中。你可以使用设置同步在多个设备间同步你的用户提示文件。

  3. 为你的提示文件输入一个名称。

    或者,你可以直接在工作区的提示文件夹中创建一个 .prompt.md 文件。

  4. 使用 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 可以使用设置同步在多个设备间同步你的用户提示文件。

要同步你的用户提示文件,请为提示和指令文件启用设置同步

  1. 确保你已启用设置同步

  2. 从命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P)运行设置同步:配置

  3. 从要同步的设置列表中选择提示和指令

在 VS Code 中集中管理指令和提示文件

使用 chat.promptFiles 设置在 VS Code 中启用或禁用指令和提示文件。

要在你的组织内通过设备管理集中启用或禁用此设置,请查看企业文档中的集中管理 VS Code 设置

设置

自定义指令设置
提示文件设置
  • chat.promptFiles (实验性):启用对可重用提示文件和指令文件的支持。

  • chat.promptFilesLocations (实验性):一个字典,其中包含提示文件所在的文件夹以及一个布尔值,指示它们是否已启用。相对路径从工作区的根文件夹解析。支持文件路径的 glob 模式。默认情况下,提示文件位于工作区的 .github/prompts 文件夹中。

    "chat.promptFilesLocations": {
        ".github/prompts": false,
        "setup/**/prompts": true
    }