GitHub Copilot

GitHub Copilot 使用技巧与最佳实践

#tech / ai #resource / copilot #type / howto #status / evergreen

[!info] related notes copilot-usage-workflow mcp mcp-filesystem Context7 GitHub Copilot Memory AI Agent 配置文件路径参考

GitHub Copilot

基础概念

GitHub Copilot 是由 GitHub 和 OpenAI 合作开发的 AI 代码助手,基于大型语言模型训练,能够根据上下文自动生成代码建议、完成函数实现、提供代码解释等功能。

特殊文件(通过聊天窗口右上角设置添加,或者手动添加) prompt 提示词文件 instruction 说明文件

自定义指令、提示词文件与配置

Copilot 要分成三块看:

  • VS Code / GitHub / JetBrains 的 Copilot
  • Copilot CLI
  • Copilot Memory

VS Code 中的 instruction files

Always-on

  • .github/copilot-instructions.md
    • 仓库根目录
    • 对整个 workspace 生效
  • .github/instructions/**/*.instructions.md
    • applyTo frontmatter 控制路径匹配
  • AGENTS.md
    • VS Code 支持作为 always-on instructions
    • 嵌套 AGENTS.md 目前仍偏实验性
  • CLAUDE.md
    • 也能被 VS Code 识别,方便和 Claude Code 共用规则

用户级

VS Code 还会查找用户 profile 下的 instruction 目录,例如:

  • ~/.copilot/instructions
  • ~/.claude/rules
  • VS Code user data 目录

VS Code prompt files

Copilot 的 prompt files 是独立体系:

  • 工作区:.github/prompts/*.prompt.md
  • 用户级:VS Code profile 的 user data

规则:

  • 文件后缀必须是 .prompt.md
  • 可通过 YAML frontmatter 指定 namedescriptionagent 等字段

Copilot CLI custom instructions(自定义说明文件)

Copilot CLI 也支持:

GitHub Copilot CLI 的最佳做法 - GitHub 文档

位置Scope
~/.copilot/copilot-instructions.md所有会话(全局)
.github/copilot-instructions.md资料库
.github/instructions/**/*.instructions.md存储库(模块化)
AGENTS.md (在 Git 根或 cwd 中)资料库
Copilot.mdGEMINI.mdCODEX.md资料库

[!info] 最佳做法 存储库说明 始终优先 于全局指令。 使用此函数强制实施团队约定。 保持说明简洁且可执行。 冗长的指令可以稀释有效性。

配置文件

  • VS Code MCP:
    • 全局:VS Code 用户 mcp.json
    • 项目级:.vscode/mcp.json
  • Copilot CLI:
    • 通用配置:~/.copilot/config.json
    • MCP 配置:~/.copilot/mcp-config.json

记忆机制

Copilot 现在还可以结合 GitHub Copilot Memory 来沉淀仓库级知识。

这个记忆层更像:

  • repository-scoped 的长期记忆
  • 带代码引用的仓库知识
  • Copilot 内部的工程化增益

它很适合在同一个 repository 里持续复用约定和历史实现细节,但不适合单独承担跨多个 coding client 的统一个人记忆主库。

工作流

以下面的需求为例:

SDN 网络软件开发
要求基于软件定义网络技术,包括编程与测试平台(Nexus 9000v)、开发接口 NX-SDK(NXAPI),利用 Python 等通用编程语言开发网络运维或应用软件, 同时可集成 Chef/Puppet/RESTCONF/NETCONF 等,解决网络部署、运维、管理、 排错等任意应用场景下的自动化或智能化需求,例如: (1)实现一个网络软件,完成接收事件通知、故障告警,及时发现和快速定位 有线或者无线网络的问题等功能,让网管人员可以随时随地掌握校园网的健康状 况,预先发现网络故障隐患,及时排除网络故障; (2)实现一个网络软件,可灵活、方便地解决校园网中关键应用(如选课系统) 与非关键应用竞争网络资源的问题,通过创建和修改网络策略,下发策略,网络 设备根据推送策略修改 QoS 配置,从而确保关键应用在校园网具有高优先级。

生成需求文档


## 需求

**效果**:  
实现一个网络软件,完成接收事件通知、故障告警,及时发现和快速定位有线或者无线网络的问题等功能,让网管人员可以随时随地掌握校园网的健康状况,预先发现网络故障隐患,及时排除网络故障;

**技术限定**
- 基于软件定义网络技术,包括编程与测试平台(Nexus 9000v)、开发接口NX-SDK(NXAPI)
- 基于 python

## 技术方案

请你帮我生成一份可行的技术方案(直接创建文档),能够在三个星期内实现

使用 prompt 文件

  1. 创建 prompt
  2. 把 生成的技术方案 直接复制进去
  3. 后续可以添加其他提示词,比如: 角色定位
    你是一个网络工程师(偏向软件),帮我实现我的网络软件

后续直接:

/[创建的 prompt 的名字] 用来引用 prompt
请你直接帮我按照这个方案生成项目代码

然后慢慢调,慢慢问

可以直接 默认允许那些 命令,就不用手动点了

核心使用技巧

编写高质量注释

Copilot 依赖上下文理解,详细的注释能显著提升代码建议质量。

好的注释示例:

/**
 * 计算两个日期之间的工作日天数(不包含周末和节假日)
 * @param startDate 开始日期
 * @param endDate 结束日期
 * @param holidays 节假日列表,格式:['2023-01-01', '2023-10-01']
 * @returns 工作日天数
 */
function calculateWorkdays(startDate: Date, endDate: Date, holidays: string[]): number {
  // Copilot 会基于这个详细注释生成准确的实现
}

使用描述性函数名

// 好的函数名,Copilot 能准确推断实现
function validateEmailAndSendWelcome(email: string) {
  // Copilot 会生成邮箱验证和发送欢迎邮件的代码
}

// 模糊的函数名
function process(data: any) {
  // Copilot 难以推断具体需要做什么
}

提供类型信息(TypeScript)

interface User {
  id: string;
  name: string;
  email: string;
  createdAt: Date;
}

// 有了类型信息,Copilot 能生成更准确的代码
function createUserProfile(user: User) {
  // Copilot 知道 user 的结构,生成的代码会更准确
}

使用示例驱动开发

// 先写测试用例,让 Copilot 理解预期行为
describe('formatCurrency', () => {
  it('should format number to currency string', () => {
    expect(formatCurrency(1234.56)).toBe('$1,234.56');
    expect(formatCurrency(0)).toBe('$0.00');
  });
});

// 然后实现函数,Copilot 会根据测试用例生成实现
function formatCurrency(amount: number): string {
  // Copilot 会生成符合测试预期的代码
}

高级使用技巧

1. 利用 Copilot Chat 进行代码审查

/explain 这段代码的时间复杂度是什么?
/fix 这段代码有什么潜在的性能问题?
/optimize 如何优化这个算法?
/generate 为这个函数生成单元测试

2. 上下文工程(Context Engineering)

// 在文件顶部提供上下文信息
/**
 * 用户管理模块
 * - 使用 JWT 进行身份验证
 * - 密码使用 bcrypt 加密
 * - 支持邮箱验证
 * - 集成 Redis 缓存
 */

prompt 文件

官网的 prompt 文件配置页

把之前放在 prompt.md 文件中的内容放到了改配置文件中,确实好用。
把项目介绍、模块、指令都放进去

常见场景与技巧

1. API 开发

/**
 * RESTful API for user management
 * - GET /users - list users with pagination
 * - POST /users - create new user
 * - PUT /users/:id - update user
 * - DELETE /users/:id - delete user
 */
app.get('/users', async (req: Request, res: Response) => {
  // Copilot 会生成包含分页、错误处理的代码
});

2. 数据处理

// 描述数据转换逻辑
const rawData = [
  { name: 'John', age: 25, department: 'Engineering' },
  { name: 'Jane', age: 30, department: 'Marketing' }
];

// Transform raw data to chart-friendly format with age groups
const chartData = rawData
  // Copilot 会生成数据分组和转换逻辑

3. 测试代码生成

describe('UserService', () => {
  describe('createUser', () => {
    it('should create user with valid data', async () => {
      // Given: valid user data
      // When: creating user
      // Then: user should be created successfully
      // Copilot 会生成完整的测试代码
    });
  });
});

性能优化技巧

1. 减少不必要的建议

{
  "github.copilot.enable": {
    "markdown": false,    // 在 markdown 中禁用
    "txt": false,         // 在纯文本中禁用
    "json": false         // 在配置文件中禁用
  }
}

2. 快捷键设置

{
  "key": "ctrl+enter",
  "command": "github.copilot.generate"
},
{
  "key": "alt+]",
  "command": "editor.action.inlineSuggest.showNext"
}

参考资源

创建于 2025/9/1 更新于 2026/5/27