介绍 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 agent 模式可以从头开始创建应用程序,对多个文件进行重构,编写和运行测试,并将遗留代码迁移到现代框架。它可以自动生成文档,集成新库,或帮助回答关于复杂代码库的问题。Copilot agent 模式通过拥有一个理解工作区的 AI 合作者,帮助你超级高效。它可以在保持你控制内的情况下协调你的内部开发流程。
Copilot 代理模式以更自主和动态的方式运行以实现预期结果。要处理请求,Copilot 会循环执行以下步骤,并根据需要多次迭代:
- 确定相关的上下文和文件进行自主编辑。
- 提供代码更改和终端命令来完成任务。例如,Copilot 可能会编译代码、安装软件包、运行测试等。
- 监控代码编辑和终端命令输出的正确性,并进行迭代以解决问题。
Copilot代理模式使用一组工具来完成这些任务。

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

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

每个工具都有详细的说明,说明LLM如何以及何时使用它。以下是读取文件工具描述示例:
{
"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代理模式在较小的仓库中表现出色,已经在这些仓库中提高了生产力。 提出开放性问题的能力在任何大小的仓库上都很有效——例如,特定功能的实现位置和方法。 在大型代码库中对多个文件进行重构,例如vscode,是当今任何软件工程代理的艰难挑战。 改进复杂仓库中的Copilot代理模式将为我们的团队解锁更多的自托管机会,并为您带来有用的交互。
除了自我托管,VS Code 团队成员还喜欢在他们的个人项目中使用 Copilot 代理模式,例如用于天气预报、膳食计划、咖啡消费或健身锻炼的应用程序。
今天,VS Code团队在为我们的Copilot代理模式使用案例选择模型时,更倾向于Claude Sonnet而不是GPT-4o。在Claude 3.7 Sonnet的初步测试中,我们看到了Copilot代理模式功能的显著改进。
今天有货
Copilot agent 模式正在预览中,今天所有 VS Code Insiders 用户都可以使用。我们每天都会推送代码以改进 Copilot,因此 VS Code Insiders 的体验每天都在变得更好(例如,今天我们推送了编辑建议的终端命令的能力)。我们期待在 我们的仓库 中收到您的反馈。请告诉我们您希望如何使用 Copilot agent 模式,这样我们可以确保我们提供的功能对您有实际意义。
接下来,我们计划进行:
- 细粒度撤销功能
- 简化上下文用户界面(工作集)
- 笔记本支持(目前仅能在文本编辑器上进行编辑会话)
- 自动批准特定终端命令的能力
- 改进终端工具用户界面(例如,内联显示终端命令输出)
- 探索工具扩展性和MCP服务器作为代理模式的工具。如果你有扩展想法告诉我们
- 统一聊天和编辑体验
- 与此同时,我们正在改进质量和性能,目标是向所有 VS Code 稳定版用户发布 Copilot 代理模式。
关于 Copilot 代理模式的详细概述,请阅读 官方文档。
我们对 Copilot 代理模式感到非常兴奋——今天就试用一下并告诉我们您的想法。
快乐编程!
伊西多尔和VS Code团队