GitHub Copilot 工作流
GitHub Copilot 是 GitHub 与 OpenAI 合作推出的 AI 编程助手,深度集成于 VS Code、JetBrains、Visual Studio 等主流 IDE 中。凭借对 GitHub 代码库的深度训练,Copilot 在代码补全和上下文理解方面表现出色。
copilot-instructions.md 配置
copilot-instructions.md 是 GitHub Copilot 的自定义指令文件,放在项目的 .github/ 目录下,为 Copilot Chat 提供项目上下文和行为规范。
文件位置
your-project/
.github/
copilot-instructions.md ← 在这里
src/
package.json
...基础配置模板
markdown
# GitHub Copilot 自定义指令
## 项目背景
这是一个 SaaS 订单管理系统,使用 Python FastAPI 构建后端 REST API,
PostgreSQL 作为主数据库,Redis 用于缓存和队列。
## 技术规范
- Python 3.11+,使用类型注解(typing module)
- 遵循 PEP 8 代码风格
- 使用 Pydantic v2 进行数据验证
- 异步优先,所有 I/O 操作使用 async/await
- 日志使用 structlog,禁止 print 调试
## 项目结构约定
- 路由定义在 app/routers/
- 业务逻辑在 app/services/
- 数据库模型在 app/models/
- Pydantic Schema 在 app/schemas/
- 工具函数在 app/utils/
## 测试规范
- 测试框架:pytest + pytest-asyncio
- 测试文件命名:test_[模块名].py
- 每个 API 端点必须有集成测试
- Mock 外部服务调用
## 响应格式
所有 API 响应统一格式:
{
"success": true/false,
"data": {...} | null,
"message": "..." | null,
"errors": [...] | null
}团队协作配置示例
markdown
## 代码审查关注点
- 检查是否有 N+1 查询问题
- 验证敏感数据是否已脱敏
- 确认事务边界是否正确
- 检查并发安全性
## 禁止的模式
- 不使用全局变量存储状态
- 不在模型层直接处理 HTTP 请求
- 不暴露内部异常详情给 API 响应
- 不使用弃用的 SQLAlchemy 1.x 写法代码补全优化技巧
原则:优质注释驱动优质补全
Copilot 通过分析光标前的上下文来预测代码。高质量的注释和函数签名是获得准确补全的关键。
示例 1:通过注释引导实现
python
# 从数据库查询指定用户的最近 N 条订单,
# 按创建时间倒序排列,并预加载关联的商品信息
async def get_recent_orders(user_id: int, limit: int = 10) -> list[Order]:
# Copilot 会根据注释生成合适的查询示例 2:类型注解改善补全
typescript
interface PaginatedResponse<T> {
items: T[];
total: number;
page: number;
pageSize: number;
hasMore: boolean;
}
// 有了清晰的类型定义,Copilot 补全更精准
async function fetchProducts(page: number): Promise<PaginatedResponse<Product>> {
// Copilot 会正确推断返回结构
}利用文件内已有代码
Copilot 会参考同文件中的代码模式。在同一文件中写一个函数后,类似函数的补全质量会显著提升:
python
# 第一个函数(手动编写)
async def create_user(data: UserCreate, db: AsyncSession) -> User:
user = User(**data.model_dump())
db.add(user)
await db.commit()
await db.refresh(user)
return user
# 第二个函数(Copilot 会模仿上面的模式)
async def create_product(data: ProductCreate, db: AsyncSession) -> Product:
# 按 Tab,Copilot 会生成一致的模式使用 Copilot 友好的编码习惯
| 习惯 | 说明 |
|---|---|
| 写完整的函数签名再补全 | 让 Copilot 知道输入输出类型 |
| 先写函数名再按 Tab | 函数名是最强的上下文提示 |
| 保持文件聚焦 | 单一职责的文件补全更准 |
| 打开相关文件 | Copilot 会参考已打开的标签页 |
Copilot Chat 使用指南
访问方式
- 侧边栏:点击 VS Code 左侧 Copilot 图标
- 快捷键:
Ctrl+Shift+I(Windows)/Cmd+Shift+I(macOS) - 内联聊天:选中代码后按
Ctrl+I/Cmd+I
内置斜杠命令
| 命令 | 功能 | 示例 |
|---|---|---|
/explain | 解释代码 | /explain 这段递归逻辑是如何工作的? |
/fix | 修复问题 | /fix TypeError: Cannot read property |
/tests | 生成测试 | /tests 为 calculateDiscount 函数生成单元测试 |
/doc | 生成文档 | /doc 生成 JSDoc 注释 |
/optimize | 优化代码 | /optimize 提升这个循环的性能 |
/new | 创建新文件 | /new 创建 Express 路由文件 |
高效的 Chat 提问模板
# 代码审查
审查以下代码,关注:安全漏洞、性能问题、可维护性
[粘贴代码]
# 调试帮助
运行 [命令] 出现以下报错,分析根本原因并给出修复方案:
[错误信息]
# 重构建议
这段代码实现了 [功能],有什么重构建议可以让它更符合 SOLID 原则?
# 技术选型
在 Node.js 项目中,处理 [场景] 时,选择 [方案A] 还是 [方案B] 更合适?@workspace 代理深度使用
@workspace 是 Copilot Chat 中最强大的代理,能够理解整个项目的代码结构。
启用条件
- VS Code 1.90+
- GitHub Copilot Chat 扩展
- 项目已在 VS Code 中打开
常用用法
# 代码探索
@workspace 这个项目中用户认证是在哪里处理的?
# 影响分析
@workspace 如果我修改 User 模型的 email 字段,
哪些地方会受到影响?
# 架构理解
@workspace 解释这个项目的数据流向,从 API 请求到数据库写入
# 全局搜索
@workspace 项目中有哪些地方直接调用了 fetch 而没有使用封装的 API 客户端?
# 最佳实践检查
@workspace 检查项目中的错误处理是否一致,找出不符合规范的地方@workspace 与 #file 对比
| 特性 | @workspace | #file:文件名 |
|---|---|---|
| 范围 | 全项目 | 指定文件 |
| 速度 | 较慢(需索引) | 快 |
| 适用场景 | 架构级问题 | 局部代码问题 |
| Token 消耗 | 多 | 少 |
内联建议管理
快捷键总览
| 操作 | Windows/Linux | macOS |
|---|---|---|
| 接受建议 | Tab | Tab |
| 拒绝建议 | Esc | Esc |
| 查看下一个建议 | Alt+] | Option+] |
| 查看上一个建议 | Alt+[ | Option+[ |
| 逐词接受 | Ctrl+→ | Cmd+→ |
| 打开建议面板 | Ctrl+Enter | Ctrl+Enter |
建议面板
按 Ctrl+Enter 打开完整建议面板,可以查看 Copilot 生成的最多 10 个不同方案,选择最合适的。
调整建议行为
json
// .vscode/settings.json
{
// 禁用特定语言的补全
"github.copilot.enable": {
"*": true,
"plaintext": false,
"markdown": false,
"yaml": true
},
// 内联建议显示延迟(毫秒)
"editor.inlineSuggest.showToolbar": "onHover"
}企业版特性
GitHub Copilot Enterprise 和 Business 版本提供额外的团队协作功能:
知识库(Knowledge Base)
企业版可以将内部代码库、文档和规范添加为知识库:
在 Copilot Chat 中引用知识库:
@github 根据我们的内部 API 规范,/explain 这段代码是否符合规范?代码引用检测
json
// 开启代码引用追踪(企业合规需求)
{
"github.copilot.advanced": {
"codeReferencesEnabled": true
}
}内容排除
在仓库或组织层面排除特定文件,防止 Copilot 将其作为训练上下文:
yaml
# .github/copilot-content-exclusions.yml
paths:
- "**/*.env"
- "secrets/**"
- "internal-docs/**"审计日志
企业版管理员可查看团队的 Copilot 使用情况,包括:
- 建议接受率(acceptance rate)
- 按语言的使用分布
- 活跃用户统计
VS Code 深度集成
推荐的扩展组合
GitHub Copilot ← 核心补全功能
GitHub Copilot Chat ← 对话式 AI 功能
GitHub Pull Requests ← PR 审查中的 AI 摘要工作区设置优化
json
// .vscode/settings.json
{
// 减少补全请求的噪音
"github.copilot.editor.enableAutoCompletions": true,
// 在测试文件中开启更多建议
"github.copilot.advanced": {
"length": 500,
"temperature": ""
},
// 快速访问 Copilot Chat
"workbench.panel.defaultLocation": "right"
}在代码审查中使用 Copilot
在 VS Code 的 PR 视图中,Copilot 可以:
- 自动生成 PR 摘要
- 解释特定的代码变更
- 建议潜在问题
在 PR 差异视图中,右键选中的代码:
→ Copilot → Explain This Change
→ Copilot → Suggest Fix工作流整合建议
TDD 工作流
1. 写测试(手动或 /tests 生成)
2. 运行测试(红灯)
3. 让 Copilot 补全实现代码
4. 运行测试(绿灯)
5. 请 Copilot Chat /optimize 重构代码审查前检查
在提交 PR 前,在 Copilot Chat 中运行:
> /fix 检查这段代码中是否有明显的 bug 或安全问题
> @workspace 这次修改是否与现有的错误处理模式保持一致?