介绍 GitHub Copilot 代理模式(预览版)
2025 年 2 月 24 日,作者:Isidor Nikolic
代理模式现已在 VS Code 稳定版中可用,并支持 MCP 服务器。请阅读我们的博客文章 关于代理模式更新 的更多信息。
Copilot 代理模式 是 AI 辅助编码的下一个发展阶段。它充当一个自主的同行程序员,根据您的指令执行多步骤编码任务——分析您的代码库、读取相关文件、提出文件编辑建议,以及运行终端命令和测试。它响应编译和 lint 错误,监控终端和测试输出,并在循环中自动更正,直到任务完成。今天,所有 VS Code Insiders 用户都可以使用,并很快将在 VS Code 稳定版中推出。
如何使用 Copilot 代理模式
在 VS Code Insiders 中,打开 Copilot 编辑视图 (),从模式下拉菜单中选择 Agent(代理),然后输入您的提示。
Copilot 代理模式可以从头开始创建应用程序,执行跨多个文件的重构,编写和运行测试,以及将遗留代码迁移到现代框架。它可以自动生成文档,集成新的库,或帮助回答有关复杂代码库的问题。Copilot 代理模式通过提供一个理解工作空间的 AI 协作者,帮助您提高生产力。它可以协调您的内部开发流程,同时让您保持控制。
Copilot 代理模式以更自主和动态的方式实现所需的结果。为了处理请求,Copilot 会循环执行以下步骤,并根据需要多次迭代
- 自主确定相关的上下文和要编辑的文件。
- 提供代码更改和终端命令来完成任务。例如,Copilot 可能会编译代码、安装软件包、运行测试等。
- 监控代码编辑和终端命令输出的正确性,并迭代修复问题。
Copilot 代理模式使用一组工具来完成这些任务。

在理想情况下,您只需要关心 Copilot 代理模式的最终输出,但有时它可能会犯错误并偏离轨道。为了方便干预和撤销,在这些情况下,每次工具调用都会在 UI 中透明地显示,终端工具需要批准,并且我们支持丰富的撤销功能——您可以使用视图标题栏中的 撤销上一次编辑 控制来恢复到上次编辑之前的状态。与其依赖一个冗长而详细的提示来获得完美的解决方案,不如与 Copilot 迭代——UI 专为迭代而设计,让您完全控制流程,确保最终结果更好。
Copilot 代理模式会自动找到精确的上下文,并通过调用正确的 workspace 工具来设置工作文件集。为了更精确地引导 Copilot,您可以始终使用 #file 显式引用上下文,或者通过拖放或单击 添加文件 按钮。例如,您可以创建一个 specifications.md 文件并将其添加为上下文以更好地控制 Copilot,或者您可以设置 自定义指令 - 这样 Copilot 才能尊重您的编码指南或其他偏好。
请记住,由于 Copilot 代理模式可能会为每个提示发送多个请求,因此它的速度不会像常规编辑模式那样快,并且可能会迅速消耗您的免费 Copilot 配额。对于定义明确且范围有限的任务,请坚持使用编辑模式。当您需要多次编辑或更开放式的任务时,请切换到代理模式。
工作原理

当您向 Copilot 在代理模式下发送请求时,我们会根据您从模型下拉菜单中选择的 LLM 创建一个提示。此提示包括
- 您的查询
- 工作空间的总结结构(而不是完整的代码库以保留 token)
- 机器上下文(例如,您使用的操作系统)
- 工具描述(可选工具调用结果)
我们定义了一组 LLM 可以调用的工具,每个工具都有自己的功能,可以帮助 Copilot 完成工作。使用这些工具,Copilot 可以搜索工作空间、读取文件内容、在终端中运行命令、从编辑器获取编译或 lint 错误,并通过推测性解码器端点应用建议的更改(性能改进正在进行中)。工具列表不断扩展,因为我们正在试验哪些其他工具可以改进 Copilot 在代理模式下的功能。

每个工具都包含 LLM 关于如何以及何时使用它的详细说明。以下是 read_file 工具描述的一个示例
{
"name": "read_file",
"description": "Read the contents of a file. You must specify the line range you're interested in, and if the file is larger, you will be given an outline of the rest of the file. If the file contents returned are insufficient for your task, you may call this tool again to retrieve more content.",
"parameters": {
"type": "object",
"properties": {
"filePath": {
"description": "The absolute paths of the files to read.",
"type": "string"
},
"startLineNumberBaseZero": {
"type": "number",
"description": "The line number to start reading from, 0-based."
},
"endLineNumberBaseZero": {
"type": "number",
"description": "The inclusive line number to end reading at, 0-based."
}
},
"required": ["filePath", "startLineNumberBaseZero", "endLineNumberBaseZero"]
}
}
我们投入了大量开发时间来完善这些工具描述和系统提示,以便 LLM 准确地使用工具——正如 Anthropic 在他们的 构建有效的代理 博客中指出的那样。我们有自动评估,但仍然需要在更新提示和描述与观察它们在实际用例中的行为之间进行大量的来回。
我们看到 GPT 4o 和 Claude Sonnet 表现出不同的行为,但目前,我们将类似的系统提示发送给这些模型。未来,随着我们扩展对更多 LLM 的 Copilot 代理模式的支持,我们将专门为每个模型定制提示。
我们热爱自托管
从 VS Code 诞生的第一天起,我们就一直坚信自托管。如果团队没有使用新功能来做好生产准备的更改,那么这个功能就存在问题。对我们来说就是这么简单。
我们的团队拥有 200 多个 GitHub 存储库,我们已经看到 Copilot 代理模式在较小的存储库中表现出色,它已经在推动生产力提升。在任何大小的存储库中,提出开放式问题给 Copilot 都能很好地工作——例如,某个功能的实现位置和方式。在像 vscode 这样的大型代码库中进行跨多个文件的重构,对于当今的任何软件工程代理来说都是一项艰巨的挑战。改进 Copilot 代理模式在复杂存储库中的表现将为我们的团队解锁更多的自托管机会,以及对您的有用交互。
除了自托管之外,VS Code 团队成员还喜欢将 Copilot 代理模式用于他们的业余项目,例如天气预报、膳食计划、咖啡消费 或 健身锻炼。
今天,VS Code 团队更喜欢 Claude Sonnet 而不是 GPT-4o 用于我们的 Copilot 代理模式用例。在 Claude 3.7 Sonnet 的初步测试中,我们已经看到 Copilot 代理模式功能有了显著改进。
今天可用
Copilot 代理模式处于预览阶段,今天向所有 VS Code Insiders 用户开放。我们每天都会推送代码来改进 Copilot,因此 VS Code Insiders 中的体验每天都在变得更好(例如,今天我们推送了编辑建议的终端命令的功能)。我们期待在 我们的仓库 中收到您的反馈。请告诉我们您想如何使用 Copilot 代理模式,以便我们确保我们交付的功能对您有影响。
接下来,我们计划致力于
- 细粒度的撤销功能
- 简化上下文 UI(工作集)
- 笔记本支持(现在编辑会话仅适用于文本编辑器)
- 自动批准特定终端命令的能力
- 改进终端工具 UI(例如,内联显示终端命令输出)
- 探索 工具可扩展性 和 MCP 服务器 作为代理模式的工具。
- 统一聊天和编辑体验
- 与此同时,我们正在改进质量和性能,目标是将 Copilot 代理模式发布给所有 VS Code 稳定版用户。
有关 Copilot 代理模式的详细概述,请阅读 官方文档。
我们对 Copilot 代理模式感到非常兴奋——今天就尝试一下,告诉我们您的想法。
编码愉快!
Isidor 和 VS Code 团队