介绍 GitHub Copilot 代理模式(预览版)
2025年2月24日,由 Isidor Nikolic 发布
代理模式现已在 VS Code 稳定版中可用,并支持 MCP 服务器。请在我们的博客文章中阅读有关代理模式更新的更多信息。
Copilot 代理模式是 AI 辅助编程的下一次进化。它如同一个自主的结对程序员,根据你的指令执行多步骤的编码任务——分析你的代码库、读取相关文件、提出文件编辑建议,以及运行终端命令和测试。它能响应编译和代码检查错误,监控终端和测试输出,并自动循环修正,直到任务完成。目前所有 VS Code Insiders 用户均可使用,并即将登陆 VS Code 稳定版。
如何使用 Copilot 代理模式
在 VS Code Insiders 中,打开 Copilot 编辑视图(),从模式下拉菜单中选择代理 (Agent),然后输入你的提示。
Copilot 代理模式可以从零开始创建应用程序、跨多个文件进行重构、编写并运行测试,以及将旧代码迁移到现代框架。它可以自动生成文档、集成新库,或帮助解答关于复杂代码库的问题。Copilot 代理模式让你拥有一个理解工作区的 AI 协作者,从而极大地提高生产力。它可以在你掌控全局的同时,协调你的内部开发流程。
Copilot 代理模式以一种更自主、更动态的方式运作,以实现预期结果。为了处理一个请求,Copilot 会循环执行以下步骤,并根据需要多次迭代:
- 自主确定相关的上下文和需要编辑的文件。
- 提供代码更改和终端命令来完成任务。例如,Copilot 可能会编译代码、安装软件包、运行测试等。
- 监控代码编辑的正确性和终端命令的输出,并迭代修正问题。
Copilot 代理模式使用一组工具来完成这些任务。
在理想情况下,你只需关心 Copilot 代理模式的最终输出,但它有时也会犯错或偏离轨道。为了在这些情况下轻松干预和撤销,每一次工具调用都会透明地显示在用户界面中,终端工具需要批准,并且我们支持丰富的撤销功能——你可以使用视图标题栏中的撤销上次编辑 (Undo Last Edit) 控件来恢复到上次编辑应用之前的状态。与其依赖一个冗长详细的提示来获得完美的解决方案,你更应该与 Copilot 进行迭代——用户界面就是为迭代而设计的,让你完全控制整个过程,确保最终结果更好。
Copilot 代理模式通过调用正确的工作区工具,自动找到精确的上下文并设置工作文件集。为了更精确地引导 Copilot,你随时可以通过 #file
、拖放或点击添加文件 (Add Files) 按钮来明确引用上下文。例如,你可以创建一个 specifications.md
文件并将其添加为上下文,以更好地控制 Copilot,或者你可以设置自定义指令——这样 Copilot 就会遵循你的编码规范或其他偏好。
请记住,因为 Copilot 代理模式可能会为每个提示发送多个请求,所以它不会像常规编辑模式那么快,并且可能会迅速用完你的免费 Copilot 配额。对于定义明确且范围有限的任务,请坚持使用编辑模式。当你需要多次编辑或处理更开放的任务时,再切换到代理模式。
工作原理
当你在代理模式下向 Copilot 发送请求时,我们会根据你从模型下拉菜单中选择的大语言模型 (LLM) 生成一个提示。这个提示包括:
- 你的查询
- 工作区的摘要结构(而不是完整的代码库,以节省 token)
- 机器上下文(例如,你使用的操作系统)
- 工具描述(以及可选的工具调用结果)
我们为 LLM 定义了一套可供调用的工具,每个工具都有其独特的功能,帮助 Copilot 完成工作。利用这些工具,Copilot 可以在工作区中搜索、读取文件内容、在终端中运行命令、从编辑器获取编译或代码检查错误,并通过一个推测性解码器端点应用建议的更改(性能正在改进中)。工具列表在不断扩充,因为我们正在试验还有哪些其他工具可以增强 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 的行为有所不同,但目前我们向这些模型发送类似的系统提示。未来,随着我们将 Copilot 代理模式的支持扩展到更多 LLM,我们将为每个模型专门定制提示。
我们热爱自托管(self-hosting)
从 VS Code 诞生第一天起,我们就是自托管的坚定信徒。如果团队没有使用一个新功能来进行生产环境的变更,那么这个功能本身就有问题。对我们来说,道理就这么简单。
我们的团队拥有超过 200 个 GitHub 仓库,我们已经看到 Copilot 代理模式在较小的仓库中表现出色,并已经带来了生产力的提升。向 Copilot 提出开放式问题的能力在任何规模的仓库上都表现得很好——例如,某个特定功能是在哪里以及如何实现的。在像 vscode 这样的大型代码库中进行跨多文件的重构,对当今任何软件工程代理来说都是一个严峻的挑战。在复杂仓库中改进 Copilot 代理模式将为我们的团队解锁更多的自托管机会,也为你带来更有用的交互。
除了自托管,VS Code 团队成员还喜欢在他们的业余项目中使用 Copilot 代理模式,比如天气预报、膳食计划、咖啡消耗或健身锻炼的应用。
目前,对于我们的 Copilot 代理模式用例,VS Code 团队更倾向于使用 Claude Sonnet 而非 GPT-4o。在对 Claude 3.7 Sonnet 的初步测试中,我们已经看到 Copilot 代理模式的功能有了显著提升。
今日可用
Copilot 代理模式正处于预览阶段,现已对所有 VS Code Insiders 用户开放。我们每天都在推送代码以改进 Copilot,因此 VS Code Insiders 中的体验每天都在变好(例如,今天我们推送了编辑建议的终端命令的功能)。我们期待在我们的仓库中收到你的反馈。请告诉我们你想如何使用 Copilot 代理模式,以便我们能确保我们交付的功能对你有影响力。
接下来,我们计划进行以下工作:
- 更细粒度的撤销功能
- 简化上下文 UI(工作集)
- 支持 Notebook(目前编辑会话仅适用于文本编辑器)
- 能够自动批准特定的终端命令
- 改进终端工具 UI(例如,内联显示终端命令输出)
- 探索将工具可扩展性和 MCP 服务器作为代理模式的工具。如果你有扩展程序的想法,请告诉我们
- 统一聊天和编辑的体验
- 与此同时,我们正在提高质量和性能,目标是向所有 VS Code 稳定版用户发布 Copilot 代理模式。
关于 Copilot 代理模式的详细概述,请阅读官方文档。
我们对 Copilot 代理模式感到非常兴奋——今天就试试吧,让我们知道你的想法。
享受愉快的编程氛围!
Isidor 和 VS Code 团队