AI 工具 | | 约 17 分钟 | 6,641 字

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 模式:

  1. 打开 Copilot Chat(Cmd + Shift + I
  2. 在输入框上方选择模式:Chat / Edit / Agent
  3. 选择 “Agent” 模式

Agent vs Chat vs Edit

特性ChatEditAgent
对话交互
代码修改建议直接修改直接修改
多文件操作有限
终端命令
自主规划
工具调用
迭代修复

Workspace 上下文

自动上下文收集

Agent 模式会自动收集 Workspace 上下文,包括:

  • 当前打开的文件
  • 项目的文件结构
  • package.jsontsconfig.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 会在以下场景使用这些指令:

  1. Agent 模式下的代码生成
  2. Chat 对话中的代码建议
  3. Inline 补全(部分规则)
  4. 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 会自动执行以下步骤:

  1. 读取现有的 Prisma schema,了解数据模型
  2. 添加 Order 模型到 schema
  3. 生成 Prisma migration
  4. 创建 Order Service
  5. 创建 API 路由
  6. 添加输入验证
  7. 生成测试代码

每一步都会展示给你确认,你可以随时调整方向。

场景:修复 Bug

用户报告:在商品列表页面,当快速切换分类时,
显示的商品数据和选中的分类不匹配。
这可能是一个竞态条件问题。

Agent 会:

  1. 找到商品列表相关的组件和 API 调用
  2. 分析数据获取逻辑
  3. 识别竞态条件的根源
  4. 实现修复(比如使用 AbortController 取消过期请求)
  5. 添加测试验证修复
// 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 模式可以执行终端命令,使用时注意:

  1. 仔细审查 Agent 要执行的每条命令
  2. 不要在包含敏感信息的环境中盲目确认
  3. 对于破坏性操作(删除文件、修改配置),多加确认
  4. 建议在 Git 分支上使用 Agent,方便回滚

使用限制

  • Agent 模式消耗的 token 较多,注意用量
  • 复杂任务可能需要多轮交互
  • 某些操作需要你手动确认
  • 生成的代码仍需人工审查

最佳实践

  1. 给 Agent 清晰、具体的任务描述
  2. 提供足够的上下文(引用相关文件)
  3. 分步骤执行大型任务
  4. 及时纠正 Agent 的方向偏差
  5. 保持 .github/copilot-instructions.md 更新

Agent 模式不是要替代开发者,而是让开发者从重复性工作中解放出来,专注于真正需要创造力的部分。

评论

加载中...

相关文章

分享:

评论

加载中...