# 比较Copilot自定义功能

选择正确的方法，提供 Copilot 指导、专业知识和工具访问权限。

## Introduction

可以自定义 Copilot 以遵循约定、执行可重复工作流或连接到代码库以外的系统。

本文介绍以下两者之间的差异：

* **自定义指令**

  这些指示Copilot一般的**行为准则**。 例如，为了确保它编写的代码遵循编码标准。
  [了解详细信息](#custom-instructions)。

* **代理技能**

  这些说明 Copilot**如何处理特定类型的任务**。 例如，在起草发行说明时，要遵循团队的过程。
  [了解详细信息](#agent-skills)。

* **工具**

  这些 **提供能力**。 例如，用于查找和修改文件，或者用于与部分 GitHub文件进行交互。
  [了解详细信息](#tools)。

* **MCP 服务器**

  这些**添加了工具集**，允许 Copilot 与外部服务交互。
  [了解详细信息](#mcp-servers)。

* **钩子**

  通过这些，可以在**代理工作流中的特定点运行自己的逻辑**。 例如，可以在代理使用工具之前运行脚本。
  [了解详细信息](#hooks)。

* **子代理**

  它们独立于主代理 **执行委托工作**。 他们有自己的对话上下文，因此他们的中间工作不会填充主代理的上下文窗口。
  [了解详细信息](#subagents)。

* **自定义代理**

  这些**定义专门的角色**，其中包含特定任务的说明和工具。 例如，自定义代理可以充当 React 审阅者、文档编写器或测试生成器。
  [了解详细信息](#custom-agents)。

* **扩展**

  这些 **是在代码中实现的附加功能**。 例如，Copilot CLI 扩展可以添加一个用于跟踪会话活动的工具。
  [了解详细信息](#extensions)。

* **插件**

  这些 **包** 可以提供预配置的自定义，例如技能、挂钩、自定义代理和 MCP 服务器。
  [了解详细信息](#plugins)。

不同表面之间的支持和配置有所不同。 有关支持比较，请参阅 [Copilot自定义备忘单](/zh/copilot/reference/customization-cheat-sheet#ide-and-surface-support)。

## 自定义说明

Copilot CLI、Copilot cloud agent、Copilot code review、Copilot Chat 和 GitHub.com 在 GitHub Copilot app 上以及受支持的 IDE 中均支持自定义说明。 可用的说明类型取决于使用它们的位置。

### 什么是自定义说明？

自定义说明是 Copilot 在定义范围内使用的持久性指南。 例如，存储库说明可以描述项目的编码约定和测试命令，而个人说明可以描述通信首选项。

说明指导模型，但不保证它将遵循每个规则。

### 自定义指令可以解决哪些问题？

自定义说明可帮助你：

* 与编码约定和首选项保持 Copilot 一致。
* 一致地应用团队或组织标准。
* 避免在每个提示中包含重复提醒。

### 何时应使用自定义说明？

使用自定义说明以实现以下目的：

* 样式和质量规则。 例如：“优先选择小型拉取请求（Pull Request）、编写测试，并避免未经讨论就更改公共 API。”
* 存储库约定。 例如：“使用 `pnpm`、将更改日志条目保留在 `CHANGELOG.md` 中，并在提交之前运行 `pnpm test`。”
* 通信偏好设置。 例如：“简要解释权衡，然后提供建议的选择。

### 何时不应使用自定义说明？

在以下情况下，尽量将其保持在最低限度：

* 你只想对某一类任务采用这种行为。 请改用技能。
* 说明非常详细，以至于让人无法专注于当前任务。 使用技能或自定义代理获取专门指导。

### 详细了解自定义说明

* [GitHub Copilot的自定义说明](/zh/copilot/concepts/prompting-and-context/custom-instructions)
* [支持不同类型的自定义说明](/zh/copilot/reference/custom-instructions-support)

## 代理技能

代理技能在 、、、 以及 、 和  中的代理模式下受支持。

### 什么是技能？

技能是包含特定类型任务说明的 `SKILL.md` 文件的文件夹。 其名称和说明有助于 Copilot 确定何时加载这些说明。

技能还可以包括支持资源，例如代理可以运行的模板和脚本。

### 技能可以解决什么问题？

技能可帮助你：

* 标准化 Copilot 在特定上下文中执行任务的方式，例如代码评审。
* 在相关时提供说明，而无需将它们添加到每个交互中。
* 避免使用与当前任务无关的说明填充上下文窗口。

### 何时应使用技能？

如果需要，请使用技能：

* 可重复的工作流。 例如，检查前端代码更改时是否更新面向用户的文档。
* 一致的输出格式。 例如，使用团队模板起草发行说明。
* 一个有时需要但并非总是需要的工作流。 例如，在迁移过程中遵循详细的重构过程。

### 何时不应使用技能？

在以下情况下选择其他自定义项：

* 该指导意见应广泛适用于你的工作。 请改用自定义说明。
* 你需要访问外部系统。 使用 MCP 服务器提供工具，技能随后可以说明这些工具的用法。
* 你需要一位具有特定工具集的可重用专家。 考虑使用自定义智能体。

### 详细了解代理技能

请参阅“[代理技能](/zh/copilot/concepts/customizations/agent-skills)”。

## Tools

代理可在GitHub Copilot app、Copilot CLI、Copilot cloud agent和受支持的 IDE 中使用这些工具。 可用的工具和权限控件取决于界面。

### 什么是工具？

工具是一种能力，Copilot 使用它来完成某些操作，例如搜索文件、查看文件内容、编辑或运行命令。 某些工具内置，其他工具可以通过 MCP 服务器或扩展进行添加。

### 工具可以解决什么问题？

工具允许客服人员：

* 通过读取和搜索来收集背景信息。
* 通过编辑文件进行更改。
* 执行命令并验证结果。

### 何时使用工具？

你通常不会直接调用工具。
Copilot 选择用于执行请求的工具，但须遵守你正在使用的界面的权限和控件。

当你执行以下操作时，你将看到所使用的工具：

* 让代理搜索存储库、更新文件或运行测试。
* 请求需要通过 MCP 服务器访问外部服务的任务。
* 为代理提供适合委派给子代理处理的任务。

在添加集成之前，请检查代理的现有工具是否已满足你的需求。

## MCP 服务器

MCP 服务器在 Copilot CLI、Copilot code review、Copilot cloud agent、Visual Studio、Visual Studio Code、JetBrains IDE系列、GitHub Copilot app、Xcode 和 Eclipse 中支持。 配置和身份验证选项取决于界面。

### 什么是 MCP 服务器？

MCP 服务器是一项允许 AI 应用程序（例如 Copilot）连接到外部数据源和工具的服务。

例如，可以添加 MCP 服务器，该服务器提供用于与联机日历或支持票证系统交互的工具。

### MCP 服务器可以解决什么问题？

当内置工具不足时，MCP 服务器会有所帮助。 他们可以：

* 将 Copilot 连接到外部系统。
* 添加用于处理 API、数据库或其他服务的专用工具。
* 提供对存储库外部信息的访问权限。

### 何时应使用 MCP 服务器？

如果需要，请使用 MCP 服务器：

* 来自外部系统的信息。 例如：“本月为产品 X 创建了多少个支持工单？”
* 另一个服务中的操作。 例如：“向支持工单添加一条评论，概述此次修复。”

### 何时不应使用 MCP 服务器？

当内置工具已满足需求时，请避免添加 MCP 服务器。

### 了解有关 MCP 服务器的详细信息

请参阅“[模型上下文协议 （MCP）](/zh/copilot/concepts/customizations/mcp)”。

## 钩子

、、 和  支持钩子。 支持的事件和控件取决于表面。

### 什么是挂钩？

挂钩会在代理工作流的特定节点运行您定义的 shell 命令。 例如，挂钩可以在使用工具之前或会话结束时运行。

与技能和自定义说明不同，它们通过提示引导模型，而钩子则在定义的事件处执行代码。

### 挂钩可以解决什么问题？

当你需要对代理操作进行更多控制时，挂钩会有所帮助，例如：

* 在允许其运行之前检查工具请求。
* 日志记录工具使用或会话活动。
* 在受支持的事件上运行自定义验证。

### 何时应使用钩子？

如果需要，请使用挂钩：

* 工具检查项 例如，在建议的命令运行前，先根据允许列表检查该命令。
* 会话自动化。 例如，记录代理会话开始或结束的时间。
* 自定义验证。 例如，检查工具请求是否会更改受保护的路径。

对你的界面使用事件和配置参考，而不是假设钩子在任何地方都保持不变。

### 何时不应使用挂钩？

在以下情况下选择其他自定义项：

* 只需工作流说明即可。 使用一个技能。
* 您需要持久的偏好设置和标准。 使用自定义指令。
* 你需要访问外部工具。 使用 MCP 服务器。

### 了解有关挂钩的详细信息

* [GitHub Copilot 的 Hook](/zh/copilot/concepts/customizations/hooks)
* [GitHub Copilot 挂钩参考](/zh/copilot/reference/hooks-reference)

## 子代理

子代理在 Copilot CLI、Visual Studio Code、JetBrains IDE系列、GitHub Copilot app、Xcode 和 Eclipse 中受支持。

### 什么是子代理？

子代理是主代理将特定工作委托给的代理。 它在自己的聊天上下文中工作，并将其结果报告回主代理。

子代理可以使用内置代理或自定义代理配置文件。 无需为每个委托任务定义自定义代理。

### 子代理可以解决什么问题？

子代理可帮助代理执行以下操作：

* 通过在单独的上下文中处理子任务来保持主对话的焦点。
* 在支持的情况下并行运行独立任务。
* 使用自定义代理配置文件委托专业工作。

### 何时使用子代理？

子代理适用于：

* 代码库探索。 例如，查找 API 中的所有终结点。
* 命令执行。 例如，运行测试套件并汇总失败。
* 查看更改。 例如，在主代理处理任务的另一部分时，查看暂存的更改。
* 专业工作。 例如，将评审委托给自定义文档编写代理。

为主会话选择自定义代理，与将工作委派给它作为子代理不同。

### 详细了解子代理

* [使用代理委托和并行处理工作](/zh/copilot/concepts/agent-capabilities/choosing-and-delegating-agent-work/delegating-and-parallelizing-work-with-agents)
* [在IDE中使用subagents](/zh/copilot/how-tos/copilot-in-your-ide/use-copilot-agents/use-subagents)

## 自定义代理

自定义代理在 Copilot CLI、Visual Studio Code、Copilot cloud agent、Visual Studio、JetBrains IDE系列、GitHub Copilot app、Eclipse 和 Xcode 中受支持。 支持的配置文件属性取决于界面。

### 什么是自定义代理？

自定义代理定义专家角色，其中包含特定工作的说明和可用工具。 你可以将其视为 Copilot 可以采用的一种角色，例如 React 审阅者或文档编写者。

使用 YAML frontmatter 在 Markdown 文件中定义自定义代理。 其配置文件描述其用途，向其提供指令，并可以限制其可用工具。 在受支持的环境中，它还可以配置 MCP 服务器。

### 自定义代理可以解决哪些问题？

定制代理可在需要时提供帮助：

* 专业指导一致地应用于特定任务。
* 适用于不同类型的工作的不同工具集。
* 可以为会话选择的可重用角色，也可以用于委派工作。

单独的上下文是将代理作为子代理运行的好处，而不是使用自定义代理的要求。

### 何时应使用自定义代理？

如果需要，请使用自定义代理：

* 专业审阅者或助手。 例如，一个检查你们团队组件模式的 React 审阅工具。
* 受限工具集。 例如，审阅者可以使用读取和搜索文件的工具，但不能编辑文件。
* 统一的方法。 例如，遵循你的写作和评审标准的文档代理。

### 何时不应使用自定义代理？

在以下情况下选择更简单的选项：

* 只需任务特定的说明和资源。 技能可能已经足够了。
* 不需要专业化，默认代理将很好地执行任务。

### 详细了解自定义代理

* [自定义代理](/zh/copilot/concepts/customizations/custom-agents)
* [自定义代理配置](/zh/copilot/reference/custom-agents-configuration)

## Extensions

扩展在 Copilot CLI 和 GitHub Copilot app 中受支持。 下面的示例介绍适用于Copilot CLI的扩展。

### 什么是扩展？

扩展提供了在代码中实现的功能。 在 Copilot CLI 中，扩展是一个 JavaScript 模块，它与交互式会话一起运行，可以添加工具、斜杠命令和会话感知行为。

这些扩展不同于 IDE 扩展和已停用的基于 GitHub App 的 Copilot Extensions 集成。

### 扩展可以解决哪些问题？

扩展使你可以构建仅靠说明或配置无法实现的能力。 例如，Copilot CLI 扩展程序可以在工具调用之间保持状态，并通过自定义工具使其可用。

### 何时应使用扩展？

如果需要，请使用扩展程序：

* 你自己的会话感知工具。 例如，跨一个 Copilot CLI 会话跟踪工具调用计时，并向代理公开总计。
* 由代码支持的斜杠命令。 例如，添加一个命令，用于汇总 Copilot CLI 会话期间收集的信息。

### 何时不应使用扩展？

在以下情况下选择其他自定义项：

* 说明和资源已足够。 施放一个技能。
* 现有的 MCP 服务器提供所需的外部工具。
* 你只需在预定义事件发生时运行一个命令。 使用挂钩。

### 详细了解扩展

请参阅“[GitHub Copilot扩展](/zh/copilot/concepts/customizations/extensions)”。

## Plugins

插件在 Copilot CLI、Copilot cloud agent、Visual Studio Code 和 GitHub Copilot app 中受支持。 插件支持的组件取决于表面。

### 什么是插件？

插件是一个可安装包，可提供一系列功能。 例如，它可以包括技能、自定义代理、钩子和 MCP 服务器配置。

插件可打包自定义内容，但并不替代它们各自的用途。

### 插件可以解决什么问题？

插件可帮助你：

* 添加相关功能，而无需单独配置每个部分。
* 将一组自定义项分发给团队或公众。
* 无需手动复制文件即可安装和更新自定义项。

### 何时应使用插件？

在以下情况下使用插件：

* 你想要适用于整个团队的捆绑包。 例如，共享事件响应技能、评审代理和内部服务的 MCP 服务器配置。
* 你想要一起安装和维护相关功能。

### 何时不应使用插件？

在以下情况下，从单个自定义开始：

* 在本地进行试验，不需要分发。
* 只需一个小工作流。 单个技能可能更简单。

### 了解有关插件的详细信息

请参阅“[用于 GitHub Copilot 的插件](/zh/copilot/concepts/customizations/plugins)”。

## 综合考虑：选择合适的方案

从能够解决您的问题的最小自定义项开始。 这些功能可以协同工作：技能可以描述使用 MCP 工具的工作流，插件可以分发这两者。

| 要求                             | 从...开始     |
| ------------------------------ | ---------- |
| 我希望Copilot遵循我们的仓库约定。           | 自定义说明      |
| 我需要特定类型的任务的可重复工作流。             | 代理技能       |
| 我希望代理搜索存储库、更改文件或运行测试。          | 其现有工具      |
| 我需要外部服务提供的工具。                  | 一个 MCP 服务器 |
| 我希望围绕工具使用和会话事件建立检查机制或实现自动化。    | 钩子         |
| 我希望将重点子任务与主对话分开处理。             | 子代理        |
| 我想要一个具有特定方法和工具集的可复用专家。         | 自定义代理      |
| 我需要在 Copilot CLI 中构建自己的会话感知工具。 | 扩展         |
| 我想同时安装或共享相关的自定义项。              | 插件         |

## 后续步骤

有关配置位置和表面支持，请参阅 [Copilot自定义备忘单](/zh/copilot/reference/customization-cheat-sheet)。