Copilot 最佳使用方式与深度配置指南
介绍 GitHub Copilot 的核心特性与高级配置。涵盖会话管理、多环境运行、计划智能体等功能。详解自定义指令、Agent Skills、自定义智能体、Hooks 及 MCP 协议的配置方法。通过合理设置,可构建符合项目规范的 AI 开发助手,提升编码效率。

介绍 GitHub Copilot 的核心特性与高级配置。涵盖会话管理、多环境运行、计划智能体等功能。详解自定义指令、Agent Skills、自定义智能体、Hooks 及 MCP 协议的配置方法。通过合理设置,可构建符合项目规范的 AI 开发助手,提升编码效率。

在智能体开发工具选型中,Copilot 凭借可视化界面及价格优势,适合新手及轻度开发人员。相比其他厂商的 Agent 设定,Copilot 同样支持 Skills、MCP、Plan Agent 等新特性,可实现高效的编码流程。
Copilot 支持并行运行多个智能体会话,每个会话专注于不同任务。会话视图位于聊天面板中,提供集中位置监控所有活跃会话(本地、后台或云端)。可切换会话、查看文件更改及从中断处继续。

智能体可在三种环境中灵活运行:
| 运行环境 | 适用场景 | 特点 |
|---|---|---|
| VS Code 本地 | 交互式开发、实时调试 | 即时响应,适合迭代开发 |
| 机器后台 | 长时间运行的自主任务 | 不占用编辑器,可执行批量操作 |
| 云端 | 团队协作、PR 自动化 | 通过拉取请求实现协作,支持多成员参与 |
还可使用来自 Anthropic 和 OpenAI 等提供商的第三方智能体,任务可在不同类型智能体间移交,对话历史随之转移。

使用内置的计划智能体,在编写代码前将任务分解为结构化实施计划。分析代码库,提出澄清问题,生成逐步计划后交由实施智能体执行。
| 功能 | 快捷键/触发方式 | 说明 |
|---|---|---|
| 智能补全 (Tab) | 自动触发或 Tab | 从单行补全到完整函数实现 |
| 行内对话 | Ctrl + I | 在编辑器中直接打开聊天提示,原位建议编辑 |
| 智能操作 | 右键菜单 / 快捷键 | 生成提交信息、解决合并冲突、实现 TODO 注释等 |
| 代码审查 | 右键 → 审查 | 内联显示审阅评论 |
| 语义搜索 | 搜索视图 | 找到语义上相关的结果 |
为了让 Copilot 发挥最大作用,需定义人工智能:理解项目规范、拥有合适工具并使用适合任务的模型。VS Code 提供了多种方法定制人工智能。
自定义指令允许定义通用指导方针和规则,自动影响 AI 生成代码的方式。无需在每个聊天提示中手动添加上下文,只需在 Markdown 文件中指定。
| 特性 | .github/copilot-instructions.md | AGENTS.md | .instructions.md |
|---|---|---|---|
| 核心定位 | 项目级「全局通用指令文件」 | Copilot Agent 专属「任务配置文件」 | 细粒度「文件 / 目录级指令文件」 |
| 生效范围 | 整个代码仓库 | 仅作用于 Copilot Agent 功能 | 仅作用于当前文件所在目录 / 工作区 |
| 作用目标 | 所有 Copilot 基础能力 | 仅 Copilot Agent 进阶功能 | 所有 Copilot 基础能力 |
| 优先级 | 高于全局配置,低于 .instructions.md | 独立优先级 | 最高(局部规则覆盖项目级规则) |
在聊天视图中,选择配置聊天(齿轮图标)> 聊天指令,然后选择新建指令文件。
选择创建说明文件的位置:
.github/instructions 文件夹中创建。AGENTS.md用自定义指令快速设置工作区的方法是在聊天输入框中输入 /init 斜线命令,Agent 会自动分析项目结构和编码模式,生成全面工作区说明 AGENTS.md。
*.instructions.md 文件。Copilot 可以配置 Agent Skills,用于教授专业能力和工作流程。
| 特性 | 说明 |
|---|---|
| 定制 Copilot | 为特定领域任务定制功能,无需重复上下文 |
| 减少重复 | 创建一次,即可在所有对话中自动使用 |
| 组合功能 | 结合多项技能构建复杂工作流 |
| 高效加载 | 仅在需要时将相关内容加载到上下文中 |
| 特性 | 智能体技能(Agent Skills) | 自定义指令(Instructions) |
|---|---|---|
| 目的 | 教授专业能力和工作流程 | 定义编码标准和指南 |
| 便携性 | 适用于 VS Code、Copilot CLI 和 Copilot 编码智能体 | 仅适用于 VS Code 和 GitHub.com |
| 内容 | 说明、脚本、示例和资源 | 仅指令 |
类型:
.github/skills/~/.copilot/skills/创建方法:
.github/skills 目录。SKILL.md 文件。SKILL.md 结构示例:
--- name: webapp-testing description: Guide for testing web applications using Playwright. Use this when asked to create or run browser-based tests. --- # 使用 Playwright 进行 Web 应用程序测试 本技能助力您运用 Playwright 为 Web 应用程序创建并运行基于浏览器的测试。 ## 何时使用本技能 当您需要以下操作时,使用本技能: - 为 Web 应用程序创建新的 Playwright 测试 - 调试失败的浏览器测试 - 为新项目搭建测试基础设施 ## 创建测试 1. 查看 [测试模板](./test-template.js),了解标准测试结构 2. 确定要测试的用户流程 3. 在 `tests/` 目录中创建一个新的测试文件 4. 使用 Playwright 的定位器查找元素(优先选用基于角色的选择器) 5. 添加断言以验证预期行为
元数据字段说明:
| 字段 | 必填 | 描述 |
|---|---|---|
| name | 是 | 技能的唯一标识符。必须为小写,使用连字符代替空格 |
| description | 是 | 对该技能的功能以及何时使用该技能的描述 |
| argument-hint | 否 | 当该技能作为斜杠命令调用时,聊天输入框中显示的提示文本 |
| user-invokable | 否 | 控制该技能是否在聊天菜单中以斜杠命令的形式显示 |
| disable-model-invocation | 否 | 控制智能体是否可以根据相关性自动加载技能 |
技能可作为聊天中的斜杠命令使用。在聊天输入框中输入 /,即可查看可用技能和提示的列表。
从 GitHub 仓库寻找可用技能,例如 Claude Code 官方技能库。
通过 .agent.md 文件,你可以配置 AI 采用不同的角色身份,专注于特定的开发任务。
自定义智能体通过 .agent.md Markdown 文件定义,使用 YAML 前置元数据配置元信息。
存放位置:
.github/agents/ —— 仅当前工作区可用文件结构示例:
--- name: code-reviewer description: Specialized agent for thorough code reviews focusing on security, performance, and maintainability tools: - readFile - runTests model: gpt-4o user-invokable: true --- # 代码审查专家 你是一个经验丰富的代码审查专家,专注于以下维度: ## 审查维度 1. **安全性**:检查潜在的 SQL 注入、XSS、敏感信息泄露等安全风险 2. **性能**:识别 N+1 查询、内存泄漏、不必要的计算等性能瓶颈 3. **可维护性**:评估代码可读性、函数复杂度、命名规范等 4. **测试覆盖**:检查是否包含充分的单元测试和集成测试 ## 输出格式 请按以下结构输出审查结果: - **严重问题**(阻塞合并):... - **建议优化**(可选):... - **亮点**:... #tool:readFile #tool:runTests
| 参数 | 必填 | 说明 |
|---|---|---|
name | 是 | 智能体唯一标识符,小写,使用连字符代替空格 |
description | 是 | 功能描述,Copilot 根据此描述决定何时加载该智能体 |
tools | 否 | 允许使用的工具列表,限制智能体的操作范围 |
agents | 否 | 可委托的子智能体列表,实现分层协作 |
model | 否 | 指定使用的模型(如 gpt-4o、claude-3.5-sonnet) |
handoffs | 否 | 定义工作流交接点,实现多智能体协作流程 |
user-invokable | 否 | 是否允许用户手动调用(默认 true) |
工作流交接是自定义智能体的高级特性,允许你创建引导式顺序工作流,在不同智能体之间传递任务。
配置示例:
---name: planning-agent description: Creates detailed implementation plans before coding tools:- readFile - search handoffs:-label:"Execute this plan"agent: implementation-agent prompt:"Implement the following plan..."send:true---
典型的工作流设计: [需求分析智能体] ↓ handoff: "开始设计方案" [架构设计智能体] ↓ handoff: "开始编码实现" [开发实现智能体] ↓ handoff: "开始代码审查" [代码审查智能体] ↓ handoff: "合并并部署" [部署发布智能体]
假设我们需要一个专门负责 API 接口开发的智能体:
步骤 1:创建智能体文件
在 .github/agents/api-developer.agent.md 创建文件:
--- name: api-developer description: Specialized agent for API development with NestJS. Use this when creating RESTful APIs, defining DTOs, or implementing controllers and services. tools: - readFile - editFile - createFile - runTerminalCommand model: gpt-4o user-invokable: true --- # API 开发专家 你是一个专注于 NestJS 后端开发的专家,擅长设计 RESTful API、数据验证和业务逻辑实现。 ## 开发规范 ### 1. DTO 设计原则 - 使用 `class-validator` 进行属性验证 - 必填字段使用 `@IsNotEmpty()` 或 `@IsDefined()` - 可选字段使用 `@IsOptional()` - 枚举类型使用 `@IsEnum()` - 使用 `ApiProperty` 添加 Swagger 文档 ### 2. Controller 设计原则 - 使用 RESTful 命名规范 - 统一响应格式:`{ code: number, data: T, message: string }` - 使用装饰器进行权限控制 (`@Roles`, `@Permissions`) - 使用 `@ApiTags` 分组接口文档 ### 3. Service 设计原则 - 业务逻辑封装在 Service 层 - 使用 Repository 模式进行数据库操作 - 异常处理使用自定义异常类 - 日志记录使用 Winston 或 NestJS 内置 Logger ## 文件组织 src/modules/{module-name}/ ├── dto/ │ ├── create-{entity}.dto.ts │ ├── update-{entity}.dto.ts │ └── {operation}-{entity}.dto.ts ├── entities/ │ └── {entity}.entity.ts ├── {entity}.controller.ts ├── {entity}.service.ts └── {entity}.module.ts ## 代码示例 ### 创建 DTO ```typescript import { IsNotEmpty, IsString, IsOptional, IsEnum, IsNumber } from 'class-validator'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; export class CreateUserDto { @ApiProperty({ description: '用户名' }) @IsNotEmpty({ message: '用户名不能为空' }) @IsString() username: string; @ApiProperty({ description: '邮箱' }) @IsNotEmpty({ message: '邮箱不能为空' }) @IsEmail() email: string; @ApiPropertyOptional({ description: '年龄' }) @IsOptional() @IsNumber() age?: number; } ``` ### 创建 Controller ```typescript import { Controller, Get, Post, Body, Param, Query } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'; import { UserService } from './user.service'; import { CreateUserDto } from './dto/create-user.dto'; @ApiTags('用户管理') @Controller('users') export class UserController { constructor(private readonly userService: UserService) {} @Post() @ApiOperation({ summary: '创建用户' }) @ApiResponse({ status: 201, description: '创建成功' }) create(@Body() createUserDto: CreateUserDto) { return this.userService.create(createUserDto); } @Get() @ApiOperation({ summary: '查询用户列表' }) findAll(@Query() query: QueryUserDto) { return this.userService.findAll(query); } } ``` ## 工具使用 #tool:readFile #tool:editFile #tool:createFile #tool:runTerminalCommand
步骤 2:使用智能体 创建完成后,你可以在 Copilot 聊天中直接调用这个智能体:
/api-developer 然后描述你的需求。@ 符号选择智能体。Hooks 允许你在智能体会话的关键生命周期节点执行自定义 shell 命令。
| 事件类型 | 触发时机 | 典型用途 |
|---|---|---|
SessionStart | 用户提交新会话的第一个提示时 | 注入项目元数据、加载环境信息 |
UserPromptSubmit | 用户提交提示(包括后续追问) | 记录审计日志、内容过滤 |
PreToolUse | Agent 调用任何工具之前 | 权限控制、危险操作拦截 |
PostToolUse | 工具执行完成之后 | 自动格式化、触发测试、发送通知 |
PreCompact | 上下文压缩(trim)之前 | 保存完整对话历史 |
SubagentStart | 启动子智能体时 | 传递父级上下文、初始化资源 |
SubagentStop | 子智能体完成时 | 收集结果、清理资源 |
Stop | 会话结束时 | 生成总结报告、归档会话 |
Hooks 通过 JSON 文件配置,Copilot 会在以下位置搜索配置:
| 作用域 | 路径 | 优先级 |
|---|---|---|
| 项目级 | .github/hooks/*.json | 最高 |
| 用户级 | ~/.vscode/hooks/*.json 或 macOS ~/Library/Application Support/Code/hooks/ | 较低 |
配置文件格式:
{"hooks":{"SessionStart":[{"type":"command","command":"node","args":["./scripts/get-project-info.js"],"cwd":"${workspaceFolder}","env":{"NODE_ENV":"development"},"timeout":30000}],"PreToolUse":[{"type":"command","command":"python","args":["security-check.py"],"windows":{"command":"python.exe"},"linux":{"command":"/usr/bin/python3"}}]}}
配置字段说明:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 是 | 钩子类型,目前仅支持 "command" |
command | string | 是 | 要执行的命令 |
args | array | 否 | 命令参数列表 |
cwd | string | 否 | 工作目录,可使用 ${workspaceFolder} 变量 |
env | object | 否 | 环境变量 |
timeout | number | 否 | 超时时间(毫秒),默认 30000 |
windows/linux/osx | object | 否 | 平台特定的命令覆盖 |
Hooks 通过标准输入(stdin)接收 JSON 格式的输入,通过标准输出(stdout)返回 JSON 格式的输出。
输入格式示例(PreToolUse):
{"timestamp":"2024-01-15T09:30:00Z","cwd":"/home/user/project","sessionId":"sess_abc123","hookEventName":"PreToolUse","toolName":"editFile","toolInput":{"path":"src/config/database.ts","content":"..."}}
输出格式示例(PreToolUse 拦截危险操作):
{"continue":false,"stopReason":"Potential destructive operation detected","systemMessage":"⚠️ 检测到可能危险的操作:正在尝试修改数据库配置文件。请确认此操作是经过授权的。","hookSpecificOutput":{"permissionDecision":"deny","updatedInput":null,"additionalContext":"This operation was blocked by security policy"}}
退出码含义:
| 退出码 | 含义 | 行为 |
|---|---|---|
0 | 成功 | 正常继续 |
2 | 阻止错误 | 中断操作并显示错误信息 |
| 其他 | 非阻塞警告 | 记录警告但继续执行 |
场景 1:拦截危险命令
使用 PreToolUse 钩子阻止破坏性操作。
场景 2:自动格式化代码
使用 PostToolUse 在文件修改后自动运行 Prettier。
场景 3:审计日志记录
使用 PreToolUse 和 PostToolUse 组合记录所有工具调用。
场景 4:注入会话上下文
使用 SessionStart 在会话开始时提供项目元数据。
安全注意事项:
故障排查: 查看诊断信息:在 Chat 视图中右键 → Diagnostics(诊断),在 Output 面板中选择 GitHub Copilot Chat Hooks 查看钩子输出。
MCP(Model Context Protocol)是一个开放标准,旨在为 AI 模型与外部世界提供统一的连接协议。
在 VS Code 中,MCP 服务器可以提供以下四种能力:
| 能力类型 | 说明 | 典型应用场景 |
|---|---|---|
| Tools | 函数调用能力,执行文件操作、调用 API、查询数据库等 | 文件读写、HTTP 请求、SQL 查询、执行测试 |
| Resources | 提供上下文数据,如文件内容、数据库表、API 响应 | 读取配置文件、获取数据库 Schema、查询外部数据源 |
| Prompts | 预配置的提示模板,通过 /<server>.<prompt> 调用 | 标准化常用操作、封装复杂指令、团队共享提示 |
| MCP Apps | 交互式 UI 组件,在聊天面板中渲染 | 表单输入、数据可视化、交互式配置界面 |
在 VS Code 中,MCP 服务器通过 mcp.json 文件配置,支持两种配置位置:
| 作用域 | 路径 | 适用场景 |
|---|---|---|
| 工作区级 | .vscode/mcp.json | 当前项目专用的 MCP 服务器 |
| 用户级 | 用户配置目录 | 跨项目共享的 MCP 服务器 |
配置文件结构:
{"servers":{"github":{"type":"http","url":"https://api.githubcopilot.com/mcp","headers":{"Authorization":"Bearer ${env:GITHUB_TOKEN}"}},"playwright":{"type":"command","command":"npx","args":["-y","@microsoft/mcp-server-playwright"],"env":{"PLAYWRIGHT_BROWSERS_PATH":"0"}},"sqlite":{"type":"command","command":"uvx","args":["mcp-server-sqlite","--db-path","./data/app.db"]},"fetch":{"type":"http","url":"https://api.example.com/mcp/fetch","timeout":30000}}}
传输类型:
| 类型 | 配置方式 | 适用场景 |
|---|---|---|
| HTTP | "type": "http", "url": "..." | 远程 MCP 服务器、团队共享服务 |
| 本地命令 | "type": "command", "command": "..." | 本地安装的 CLI 工具、Node/Python 脚本 |
配置完成后,MCP 服务器提供的工具会自动出现在 Copilot 的工具列表中。
工具调用: 当你在聊天中描述需要执行的操作时,Copilot 会自动选择合适的 MCP 工具。
Prompt 调用:
MCP 服务器提供的预配置提示可以通过 /<server>.<prompt> 语法调用。
在智能体中使用:
你也可以在 .agent.md 文件中显式声明使用 MCP 工具。
MCP 和 Hooks 虽然解决的问题不同,但可以形成强大的协同效应。
协同示例:数据操作的安全审查
社区已经有很多现成的 MCP 服务器可以直接使用:
| 服务器 | 安装命令 | 功能描述 |
|---|---|---|
| Playwright | npx -y @microsoft/mcp-server-playwright | 浏览器自动化测试 |
| SQLite | uvx mcp-server-sqlite --db-path ./app.db | SQLite 数据库操作 |
| GitHub | HTTP 方式配置 | GitHub API 操作 |
| Brave Search | npx -y @modelcontextprotocol/server-brave-search | 网络搜索能力 |
| Filesystem | npx -y @modelcontextprotocol/server-filesystem | 文件系统操作 |
安全注意事项:
mcp.json 中硬编码敏感信息。最佳实践:
重置信任状态:如需重新审查已信任的 MCP 服务器,使用命令 MCP: Reset Trust。
用自然语言描述一项功能,智能体就会搭建项目架构、在多个文件中实现逻辑,并运行测试以验证结果。
将智能体指向失败的测试,它会读取错误信息,在你的代码库中追踪根本原因,应用修复方案,并重新运行测试以确认。
让智能体规划一次迁移,例如从一个框架迁移到另一个框架,它会在文件间应用协调的更改,同时通过构建进行验证。
将任务委派给云智能体,它会创建分支、实施更改并打开拉取请求供团队审核。
要让 Copilot 真正成为你的"专属项目管家",关键在以下几点:
其实无论是 Claude Code、Cursor 还是 Copilot,工具只是手段,提升开发效率和代码质量才是目的。选择最适合你团队工作流的工具,搭配合理的配置,才能真正发挥 AI 辅助开发的威力。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online