Copilot 是最老牌的 AI 编程工具,也最容易被低估——以为就是补全,结果 Agent 模式和 MCP 支持都挺深。8 个常见坑。信息更新于 2026-09。
踩过新坑?提 Issue 或 PR。
症状
- Copilot 生成的代码用了某个库的旧 API
- 你拷进来跑:
Deprecated: use xxx instead或直接is not a function - 升级到库的新版本后,Copilot 还在按旧 API 补全
根因
Copilot 的补全基于训练数据 + 当前打开文件的上下文。训练数据截止日期前的库版本可能已经迭代过,而 Copilot 不会读 package.json 里的实际版本。
出坑
- 把新版文档的关键一页作为 tab 打开(Copilot 会读打开的 tab)
- 或在文件顶部加注释:
// 使用 TanStack Query v5 API(useQuery 签名:useQuery({ queryKey, queryFn }))
import { useQuery } from '@tanstack/react-query';预防
- 在
.github/copilot-instructions.md里声明关键库的版本和 API 风格:
## 关键依赖版本
- React 19(使用 useTransition、useOptimistic)
- TanStack Query v5(useQuery 新签名)
- Zod v3(不用 v2 的 object() 链式风格)症状
- 让 Copilot Agent 改个配置,它顺手扫了
.env把 key 读进上下文 - 在 Chat 窗口里看到你的 API key 明文显示
- 最坏:补全建议里带出了真实的 secret
根因
.gitignore 里的文件 Copilot 依然可能读到。GitHub 提供的 Content Exclusion(内容排除) 只能在仓库 / 组织 / 企业级由管理员配置,而且官方文档明确写着:IDE 里 Copilot Chat 的 Agent 模式不支持内容排除。也就是说,即使配了排除规则,Agent 模式照样可能读到 .env、.aws/credentials、id_rsa 这类文件。
(早期流传的 github.copilot.advanced.exclude 设置并不是官方的排除机制,别指望它。)
出坑 如果敏感信息已经进了 Chat 历史:开一个新会话 / 清空当前会话,并立即轮换相关密钥。
预防
- 敏感信息别放在项目目录里:用
direnv/1Password CLI等从项目外注入,不落地 - 仓库 / 组织层面配好 Content Exclusion,至少能覆盖补全和普通 Chat(对 Agent 模式无效)
- Agent 执行读文件、跑命令前留意确认提示,别无脑全部批准
- 在 instructions 里写明"不要读取
.env*、*.pem、*.key"——这是软约束,只能降低概率
症状
- 你在 instructions 里写了 20 条规则
- Agent 只遵守前几条,后面的像没看过
- 尤其 Chat 窗口里提问时,细节规则几乎不生效
根因 instructions 会整体注入上下文,写得越长、越杂,每条规则的"分量"越低;和当前任务无关的规则还会挤占注意力。
出坑 拆文件:
- 核心不变规则 →
.github/copilot-instructions.md(尽量短) - 按路径生效的规则 →
.github/instructions/*.instructions.md,用applyTo指定 glob - 专项角色 →
.github/agents/下各自的.agent.md - 成套方法论 → Agent Skills(
.github/skills/)
预防 Instructions 里只放跨场景的全局规则(技术栈、命名、禁止事项)。具体场景规则:
.github/
├── copilot-instructions.md # 核心规则
├── instructions/
│ ├── python.instructions.md # applyTo: "**/*.py"
│ └── tests.instructions.md # applyTo: "tests/**"
└── agents/
├── security-reviewer.agent.md # 安全审查专用
└── migration-helper.agent.md # 迁移项目专用
症状
- 你说
#file:src/api/user.ts 按这个改 - Copilot 改得基本对,但不完全
- 另一次你只说"改一下 user.ts",Agent 自己搜索,找到了 2 个 user.ts(项目有两处重名)
根因
#file精确引用你给的路径- Agent 模式会自动搜索整个代码库(
#codebase可以强制做一次语义搜索) - 项目里有重名文件时,自动搜索可能选错那个
出坑 明确路径 > 模糊搜索:
❌ 改一下 user.ts 的 register 方法
✅ #file:src/api/v2/user.ts 改一下这里的 register 方法
预防
- 项目里避免重名文件(
user.ts× 3 这种结构重构一下) - 如果必须重名,引用时用完整路径而非文件名
- 自动搜索 /
#codebase只用于探索("项目里有没有 XX"),不用于指向("改 XX")
症状
- 配了 MCP server,Chat 里该用 MCP 工具时它没用,走了别的路径
- 不报错,就是悄悄没用
根因 常见四种:
- 配置位置或格式不对:VS Code 的 MCP 配置在
.vscode/mcp.json,顶层键是servers;写在settings.json里的旧github.copilot.chat.mcpServers不是当前的配置方式 - MCP server 启动命令写错(
npx路径、参数顺序) - 当前不在 Agent 模式,或工具没在工具列表里勾选
- server 启动成功但工具 schema 定义有问题,Copilot 认不出
出坑
然后命令面板运行 MCP: List Servers,选中你的 server → Show Output 看日志。Chat 视图里 MCP 出错时也会显示错误标记,点开可以直接看输出。
预防
- 先用官方示例 server(比如
@modelcontextprotocol/server-filesystem)验证 MCP 能接通 - 再换自己的 server
- VS Code 和 GitHub Copilot 插件都保持最新版
症状
- 团队里 VS Code 用户用上了某个新功能,JetBrains 用户那边还没有
- 同一份配置在两边表现有差异
根因
- VS Code 通常是 Copilot 新功能最先上线的地方
- 不过差距已经明显缩小:JetBrains 的自定义 Agent、子 Agent、Plan Agent 已于 2026 年 3 月 GA,也支持 AGENTS.md / CLAUDE.md
- 个别最新功能在 JetBrains 上仍可能晚一步,插件版本旧时差异更明显
出坑 先把 JetBrains 的 Copilot 插件升到最新;遇到某个功能缺失,查一下官方文档里该功能的 IDE 支持情况。
预防
- 团队共享的规则优先用两边都支持的格式(
.github/copilot-instructions.md、AGENTS.md、.agent.md) - 依赖某个新功能前,先确认团队用的所有 IDE 都支持
- 插件保持最新版
症状
- Copilot Free 用得好好的,某天补全或 Chat 突然不能用了("已达使用上限"之类的提示)
- 付费用户月中发现 Agent 模式、代码审查开始提示额度不足
- VS Code 里提示不一定醒目,容易忽略
根因 2026-06-01 起 Copilot 按 GitHub AI Credits 计费:
- Chat、Agent 模式、代码审查、云端 Agent、Copilot CLI 等都消耗 Credits(代码审查还会消耗 GitHub Actions 分钟数)
- 代码补全在付费套餐中不限量;Free 每月 2,000 次补全 + 少量 Credits
- 每个套餐每月有包含额度(Pro 1,500 / Pro+ 7,000 / Max 20,000 Credits;Business 每人 1,900、Enterprise 每人 3,900),用完需要额外购买或等下个月
- 高推理、大模型的请求消耗更快
出坑
- 在 GitHub 账户 → Copilot 设置页查看用量
- 用量接近上限:升级 Pro / Pro+ / Max,设置额外支出上限,或当月剩余时间依赖其他工具
预防
- 高频使用者直接上 Pro($10/月)或更高档,别在 Free 上省
- 日常小任务用消耗低的模型,复杂任务再切大模型
- 团队用户和管理员对齐额度和支出上限
- 建立"Copilot 额度用完用谁"的 fallback(比如切 Claude Code 或 Cursor)
症状
- 你写了个专家角色文件,在 Chat 里输入
@security-review,Copilot 不识别 - 或者 Agent 下拉框里根本找不到它
- 或者选中了但行为和普通 Chat 没区别
根因
- 调用方式不对:自定义 Agent 不是用
@名字调用的,要在 Chat 视图的 Agent 下拉框里选,或在输入框输入/agents打开列表 - 还在用旧格式:Chat Modes(
.github/chatModes/*.chatmode.md)已弃用,现在叫自定义 Agent - 位置或扩展名不对:必须是
.github/agents/下的*.agent.md(也支持.claude/agents/) - frontmatter 缺失,或设置了
user-invocable: false(不在下拉框中显示)
出坑
把文件改名/移动到 .github/agents/security-review.agent.md,检查 frontmatter:
---
name: security-review
description: Security review using OWASP Top 10
---
# 后面是角色内容然后在 Agent 下拉框里选中它。
预防
- 用命令面板的 Chat: New Custom Agent 生成文件,基于它改,别从零写
- 老项目的
.chatmode.md统一改名为.agent.md并挪到.github/agents/ - 需要工具限制时在 frontmatter 里写
tools,需要固定模型时写model
模板见 claude-code.md 结尾。
- Copilot 完整指南
- common/security.md — AI 编程的安全风险和防护
- common/context-management.md — 上下文管理