尝试以扩展 VS Code 中的代理模式!

推出 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 代理模式使用一组工具来完成这些任务。

Screenshot of the Copilot agent mode, and the proposed inline changes

在理想情况下,您可能只关心 Copilot 代理模式的最终输出,但它有时会犯错并偏离轨道。为了在这种情况下轻松干预和撤销,每次工具调用都会在用户界面中透明显示,终端工具需要批准,并且我们支持丰富的撤销功能——您可以使用视图标题栏中的撤销上次编辑控件来恢复到应用上次编辑之前的状态。与其依赖一个冗长、详细的提示来获得完美解决方案,不如与 Copilot 迭代合作——用户界面就是为迭代而构建的,让您完全掌控整个过程,确保最终结果更好。

Copilot 代理模式通过调用正确的工作区工具,自动找到精确的上下文并设置工作文件集。为了更精确地引导 Copilot,您始终可以使用拖放或点击添加文件按钮,通过 #file 显式引用上下文。例如,您可以创建一个 specifications.md 文件并将其添加为上下文以更好地控制 Copilot,或者您可以设置自定义指令——这样 Copilot 就会遵守您的编码规范或其他偏好。

请记住,由于 Copilot 代理模式可能每个提示发送多个请求,因此它不会像常规编辑模式那样快,并且可能会迅速用完您的免费 Copilot 配额。对于定义明确且范围受限的任务,请坚持使用编辑模式。当您需要多次编辑或执行更开放的任务时,请切换到代理模式。

工作原理

Diagram showing the inner works of agent mode and how it interacts with context, LLM and tools

当您在代理模式下向 Copilot 发送请求时,我们会向您从模型下拉菜单中选择的 LLM 发送一个提示。此提示包括

  • 您的查询
  • 工作区的摘要结构(而非完整的代码库,以节省 token)
  • 机器上下文(例如您使用的操作系统)
  • 工具描述(可选地包含工具调用结果)

我们为 LLM 定义了一组可调用的工具,每个工具都有自己的功能,帮助 Copilot 完成任务。使用这些工具,Copilot 可以搜索工作区、读取文件内容、在终端中运行命令、从编辑器获取编译或 lint 错误,并通过推测解码器端点应用建议的更改(性能改进正在进行中)。工具列表正在不断扩展,我们正在试验还有哪些工具可以提高 Copilot 在代理模式下的能力。

Screenshot Copilot agent mode proposing a terminal tool to "npm run dev"

每个工具都为 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,我们将为每个模型专门定制提示。

我们热爱自托管

从 VS Code 诞生第一天起,我们就坚信自托管。如果团队不使用新功能进行生产就绪的更改,那么这个功能就有问题。对我们来说,就这么简单。

我们的团队拥有 200 多个 GitHub 存储库,我们已经看到 Copilot 代理模式在较小的存储库中表现出色,它已经在提高生产力。向 Copilot 提出开放式问题的能力在任何规模的存储库上都非常有效——例如,某个特定功能在哪里以及如何实现。在大型代码库中(例如 vscode)跨多个文件进行重构对当今的任何软件工程代理来说都是一个严峻的挑战。在复杂存储库中改进 Copilot 代理模式将为我们的团队带来更多的自托管机会,以及为您带来有用的交互。

除了自托管,VS Code 团队成员还喜欢将 Copilot 代理模式用于他们的个人项目,例如天气预报应用、膳食规划、咖啡消耗健身锻炼

目前,VS Code 团队在 Copilot 代理模式的使用场景中更倾向于使用 Claude Sonnet 而非 GPT-4o。在对 Claude 3.7 Sonnet 的初步测试中,我们发现 Copilot 代理模式的功能有了显著改进。

今日可用

Copilot 代理模式目前处于预览阶段,并已向所有 VS Code Insiders 用户开放。我们每天都在推送代码以改进 Copilot,因此 VS Code Insiders 中的体验每天都在变好(例如,今天我们推出了编辑建议的终端命令的功能)。我们期待在我们的代码库中获得您的反馈。请告诉我们您希望如何使用 Copilot 代理模式,以便我们确保所提供的功能对您有影响力。

接下来,我们计划致力于

  • 细粒度撤销功能
  • 简化上下文用户界面(工作集)
  • 笔记本支持(目前编辑会话仅适用于文本编辑器)
  • 自动批准特定终端命令的能力
  • 改进终端工具用户界面(例如,内联显示终端命令输出)
  • 探索工具可扩展性以及将 MCP 服务器作为代理模式的工具。如果您有扩展想法,请告诉我们
  • 统一聊天和编辑体验
  • 与此同时,我们正在改进质量和性能,目标是将 Copilot 代理模式发布给所有 VS Code 稳定版用户。

有关 Copilot 代理模式的详细概述,请阅读官方文档

我们对 Copilot 代理模式感到非常兴奋——今天就来试用,并告诉我们您的想法。

享受愉快的代码时光!

Isidor 和 VS Code 团队