GitHub Copilot Agent 模式实战
Copilot 的 Agent 模式、Workspace 上下文、自定义指令等新功能
Copilot 的进化
GitHub Copilot 已经不再只是一个代码补全工具了。从最初的 Tab 补全,到 Copilot Chat,再到现在的 Agent 模式,Copilot 正在从”代码建议者”进化为”编程搭档”。
Agent 模式是 Copilot 最重要的一次升级。它让 Copilot 具备了自主规划、多步执行、工具调用的能力。简单来说,你可以给它一个复杂任务,它会自己拆解步骤、读取文件、运行命令、修改代码,直到任务完成。
Agent 模式概览
什么是 Agent 模式
Agent 模式下的 Copilot 不再是被动等待你的指令,而是主动规划和执行。它可以:
- 分析你的需求,制定执行计划
- 自动读取项目中的相关文件
- 执行终端命令(需要你确认)
- 创建和修改多个文件
- 运行测试并根据结果调整代码
- 迭代修复直到任务完成
如何启用
在 VS Code 中,确保你安装了最新版的 GitHub Copilot 扩展:
# 检查扩展版本
code --list-extensions | grep github.copilot
在 Copilot Chat 面板中,切换到 Agent 模式:
- 打开 Copilot Chat(
Cmd + Shift + I) - 在输入框上方选择模式:Chat / Edit / Agent
- 选择 “Agent” 模式
Agent vs Chat vs Edit
| 特性 | Chat | Edit | Agent |
|---|---|---|---|
| 对话交互 | 是 | 否 | 是 |
| 代码修改 | 建议 | 直接修改 | 直接修改 |
| 多文件操作 | 否 | 有限 | 是 |
| 终端命令 | 否 | 否 | 是 |
| 自主规划 | 否 | 否 | 是 |
| 工具调用 | 否 | 否 | 是 |
| 迭代修复 | 否 | 否 | 是 |
Workspace 上下文
自动上下文收集
Agent 模式会自动收集 Workspace 上下文,包括:
- 当前打开的文件
- 项目的文件结构
package.json、tsconfig.json等配置文件- Git 历史和当前分支信息
- 终端输出和错误信息
手动添加上下文
你也可以手动添加上下文来帮助 Agent 更好地理解任务:
#file:src/types/user.ts
#file:src/services/database.ts
基于这些已有的类型和数据库服务,
创建一个完整的用户管理 API
上下文引用语法
| 语法 | 说明 |
|---|---|
#file:path | 引用特定文件 |
#selection | 引用当前选中的代码 |
#editor | 引用当前编辑器内容 |
#terminalLastCommand | 引用最后一条终端命令的输出 |
#terminalSelection | 引用终端中选中的内容 |
自定义指令
.github/copilot-instructions.md
这是 Copilot 的项目级配置文件,类似于 Cursor 的 .cursorrules。在项目根目录创建 .github/copilot-instructions.md:
# Copilot Instructions
## Project Overview
This is a Next.js 14 e-commerce application using TypeScript,
Prisma ORM, and Tailwind CSS.
## Code Standards
- Always use TypeScript strict mode
- Use functional components with React hooks
- Follow the repository's existing patterns
- Use Zod for runtime validation
- Handle errors with custom AppError class
## Architecture
- API routes: src/app/api/[resource]/route.ts
- Services: src/services/[name].service.ts
- Types: src/types/[name].types.ts
- Components: src/components/[Name]/index.tsx
- Hooks: src/hooks/use[Name].ts
## Database
- Use Prisma for all database operations
- Always use transactions for multi-step operations
- Include proper error handling for database calls
- Use soft delete (deletedAt field) instead of hard delete
## Testing
- Write tests using Vitest
- Use React Testing Library for component tests
- Mock external services with MSW
- Follow AAA pattern (Arrange, Act, Assert)
## Security
- Validate all user inputs with Zod
- Use parameterized queries (Prisma handles this)
- Sanitize output to prevent XSS
- Check authorization in every API route
指令的作用范围
Copilot 会在以下场景使用这些指令:
- Agent 模式下的代码生成
- Chat 对话中的代码建议
- Inline 补全(部分规则)
- Edit 模式下的代码修改
个人级指令
除了项目级指令,你还可以设置个人级指令:
Settings > GitHub Copilot > Instructions
个人指令适合放通用偏好,比如:
- I prefer functional programming patterns
- Use early returns to reduce nesting
- Add JSDoc comments for public functions
- Use descriptive variable names
Copilot Chat 命令
内置命令
Copilot Chat 提供了一系列斜杠命令:
/explain — 解释选中的代码
/fix — 修复代码中的问题
/tests — 生成测试代码
/doc — 生成文档注释
/optimize — 优化代码性能
/new — 创建新的项目或文件
/newNotebook — 创建新的 Jupyter Notebook
命令使用示例
/explain
选中一段复杂的代码,然后:
/explain 这段代码的时间复杂度是多少?有没有更优的实现?
/fix
当代码有错误时:
/fix 这个函数在并发调用时会出现竞态条件
/tests
为选中的函数生成测试:
/tests 生成边界情况的测试,包括空输入、超大输入、特殊字符
自定义斜杠命令
你可以在 .github/copilot-instructions.md 中定义自定义命令的行为:
## Custom Commands
### When user asks to /review
- Check for security vulnerabilities
- Verify error handling completeness
- Check TypeScript types are strict
- Verify accessibility compliance
- Look for performance issues
### When user asks to /migrate
- Analyze the current code structure
- Plan the migration steps
- Create backup of affected files
- Execute migration incrementally
- Verify functionality after each step
多文件编辑实战
场景:添加新功能
在 Agent 模式下,描述你要添加的功能:
给项目添加一个订单管理功能:
- 订单的 CRUD API
- 订单状态机(pending -> paid -> shipped -> delivered)
- 订单与用户和商品的关联
- 订单列表支持筛选和分页
Agent 会自动执行以下步骤:
- 读取现有的 Prisma schema,了解数据模型
- 添加 Order 模型到 schema
- 生成 Prisma migration
- 创建 Order Service
- 创建 API 路由
- 添加输入验证
- 生成测试代码
每一步都会展示给你确认,你可以随时调整方向。
场景:修复 Bug
用户报告:在商品列表页面,当快速切换分类时,
显示的商品数据和选中的分类不匹配。
这可能是一个竞态条件问题。
Agent 会:
- 找到商品列表相关的组件和 API 调用
- 分析数据获取逻辑
- 识别竞态条件的根源
- 实现修复(比如使用 AbortController 取消过期请求)
- 添加测试验证修复
// Agent 可能生成的修复代码
export function useProducts(categoryId: string) {
const [products, setProducts] = useState<Product[]>([]);
const [loading, setLoading] = useState(false);
useEffect(() => {
const controller = new AbortController();
setLoading(true);
fetchProducts(categoryId, {
signal: controller.signal
})
.then(data => {
setProducts(data);
setLoading(false);
})
.catch(error => {
if (error.name !== 'AbortError') {
console.error('Failed to fetch products:', error);
setLoading(false);
}
});
return () => controller.abort();
}, [categoryId]);
return { products, loading };
}
场景:代码重构
将 src/utils/helpers.ts 这个 500 行的工具文件
拆分成独立的模块,按功能分类:
- 日期处理
- 字符串处理
- 数组操作
- 格式化
保持所有现有的导入路径正常工作
Agent 会分析文件内容,创建新的模块文件,更新所有引用,并确保没有破坏现有功能。
与 Inline Suggestions 的配合
Agent 模式和传统的 Inline Suggestions 并不冲突,它们适用于不同场景:
Inline Suggestions 适合
- 写代码时的实时补全
- 重复模式的快速生成
- 简单的代码片段
Agent 模式适合
- 需要多步骤的复杂任务
- 跨文件的修改
- 需要运行命令验证的任务
- Bug 修复和调试
- 新功能的完整实现
推荐工作流
日常编码 → Inline Suggestions(Tab 补全)
↓
遇到问题 → Chat 模式(讨论和理解)
↓
需要修改 → Edit 模式(单文件快速修改)
↓
复杂任务 → Agent 模式(多文件、多步骤)
实用配置
VS Code 设置
{
"github.copilot.enable": {
"*": true,
"markdown": true,
"plaintext": false
},
"github.copilot.chat.localeOverride": "zh-CN",
"github.copilot.advanced": {
"inlineSuggestCount": 3,
"length": 500
}
}
快捷键配置
| 快捷键 | 功能 |
|---|---|
Tab | 接受补全 |
Esc | 拒绝补全 |
Alt + ] | 下一个建议 |
Alt + [ | 上一个建议 |
Cmd + I | 打开 Inline Chat |
Cmd + Shift + I | 打开 Chat 面板 |
Cmd + Enter | 在 Chat 中发送 |
注意事项
安全考虑
Agent 模式可以执行终端命令,使用时注意:
- 仔细审查 Agent 要执行的每条命令
- 不要在包含敏感信息的环境中盲目确认
- 对于破坏性操作(删除文件、修改配置),多加确认
- 建议在 Git 分支上使用 Agent,方便回滚
使用限制
- Agent 模式消耗的 token 较多,注意用量
- 复杂任务可能需要多轮交互
- 某些操作需要你手动确认
- 生成的代码仍需人工审查
最佳实践
- 给 Agent 清晰、具体的任务描述
- 提供足够的上下文(引用相关文件)
- 分步骤执行大型任务
- 及时纠正 Agent 的方向偏差
- 保持
.github/copilot-instructions.md更新
Agent 模式不是要替代开发者,而是让开发者从重复性工作中解放出来,专注于真正需要创造力的部分。
相关文章
评论
加载中...
评论
加载中...