介绍 GitHub Copilot agent 模式(预览版)

image Copilot agent 模式是 AI 辅助编程的下一步演化。它可以作为一位自治的“编程同伴”,执行多步骤的编码任务——分析你的代码库、阅读相关文件、提出文件修改建议、执行终端命令并运行测试。它能够对编译和 lint 错误作出响应,监控终端和测试输出,并在循环中自动修复,直到任务完成。该功能目前对所有VS Code Insiders用户开放,不久也将在 VS Code Stable 中上线。

如何使用 Copilot agent 模式

在 VS Code Insiders 中,打开 Copilot Edits 视图(⇧⌘I),从模式下拉菜单中选择Agent,然后输入你的提示(prompt)。

Copilot agent 模式可以从零开始创建应用、在多个文件之间进行重构、编写和运行测试,也可以将遗留代码迁移到现代框架。它还能自动生成文档、集成新库,或帮助你理解复杂的代码库。由于它对工作区有深入的理解,Copilot agent 模式就像一个与你协作的 AI 同伴,让你在保持掌控的同时,大幅提升生产力。

Copilot agent 模式会以更自主、更灵活的方式来实现目标。处理请求时,Copilot 会在以下步骤中循环并根据需要进行多次迭代:

  • 自主确定与任务相关的上下文和需要编辑的文件。
  • 为完成任务提出代码修改和终端命令(例如编译代码、安装包、运行测试等)。
  • 监控代码修改和终端命令输出的正确性,并循环迭代以解决问题。

Copilot agent 模式会使用一系列工具来完成上述任务。

image 理想情况下,你只需关心 Copilot agent 模式最终的输出。但有时它也会犯错或者偏离轨道。为了让你能在此类情况下轻松介入并撤销,每一次对工具的调用都会在 UI 中透明显示,终端工具需要你的许可才会真正执行,同时我们也提供了丰富的撤销功能——你可以使用视图标题栏上的Undo Last Edit控制来回退到应用上一次修改之前的状态。与其依赖一个冗长、详细的提示一次性得到完美解决方案,不如多次迭代使用 Copilot——UI 就是为了迭代而设计,能让你在整个过程中始终掌控,确保最终结果更好。

Copilot agent 模式会自动查找精准的上下文,并通过调用合适的工作区工具来设定需要处理的文件范围。如果你想对 Copilot 进行更精确的引导,也可以显式地使用#file引用上下文,或者使用拖拽操作或点击Add Files按钮。例如,你可以创建一个specifications.md文件并将其添加为上下文,从而更好地控制 Copilot;也可以设置自定义指令,让 Copilot 遵守你的编码规范和其他偏好。

请注意,由于 Copilot agent 模式对每次提示可能会发送多条请求,它的速度不会像常规的 edits 模式那样快,而且会更快地消耗你的 Copilot 免费配额。如果任务目标非常明确且范围可控,建议继续使用 edits 模式;如果需要多次编辑或执行更开放式的任务,则可以切换到 agent 模式。

工作原理

image 当你在 agent 模式下向 Copilot 发送请求时,我们会向你在模型下拉菜单中选择的 LLM 发出一个提示(prompt),其中包含以下内容:

  • 你的查询
  • 工作区的结构概述(而非完整代码,以避免占用过多 Token)
  • 机器上下文(例如你的操作系统信息)
  • 工具描述(可选地包含工具调用的结果)

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

image 每个工具都有详细的说明,告诉 LLM 何时以及如何使用它。以下是read_file工具描述示例:

{ "name": "read_file", "description": "读取文件内容。你必须指定感兴趣的行号范围,如果文件较大,会只给出文件的大纲。如果返回的文件内容不足以完成任务,你可以再次调用这个工具,以获取更多内容。", "parameters": { "type": "object", "properties": { "filePath": { "description": "要读取文件的绝对路径。", "type": "string" }, "startLineNumberBaseZero": { "type": "number", "description": "从 0 开始计算的行号。" }, "endLineNumberBaseZero": { "type": "number", "description": "同样是 0 基准的行号(包含该行)。" } }, "required": ["filePath", "startLineNumberBaseZero", "endLineNumberBaseZero"] } } 我们花了大量开发时间来完善这些工具描述和系统提示(system prompt),以确保 LLM 准确地调用工具,这一点在 Anthropic 的building effective agents博客中也有所提及。虽然我们有自动化的评估手段,但在实际场景中,仍需要不断地在提示和描述之间来回调整和测试。

我们观察到 GPT-4o 和 Claude Sonnet 在使用这些工具时会有不同的行为,但目前针对它们的系统提示大体一致。随着未来我们在 Copilot agent 模式中支持更多 LLM,我们会为每种模型定制更适合它们的提示。

我们热爱自我“内测”

自 VS Code 面世的第一天起,我们就非常推崇自我“内测”(self-hosting)。如果我们团队并不使用某个新功能来完成产品级的开发,那就说明这个功能存在问题。对我们而言,这就是简单直白的标准。

我们的团队管理着 200 多个 GitHub 仓库,Copilot agent 模式在较小的仓库中已经表现出色,显著提升了生产力。例如,针对任何规模的仓库,向 Copilot 提问“开放式”问题都很好用——比如,某个特性是在哪里、如何实现的。至于在大型代码库(如vscode)中进行跨多个文件的重构,这是当今任何软件工程代理都面临的挑战。若能在复杂仓库中提高 Copilot agent 模式的表现,就能为我们团队带来更多的自我“内测”机会,也将为你带来更多有用的交互方式。

除了在工作中自我“内测”,VS Code 团队成员也会在一些业余项目中使用 Copilot agent 模式,比如天气预报、膳食规划、咖啡摄入记录或健身训练计划等应用。

目前,VS Code 团队更倾向于在 Copilot agent 模式的使用场景中选择 Claude Sonnet 而非 GPT-4o。在对 Claude 3.7 Sonnet 的初步测试中,我们看到 Copilot agent 模式的功能有显著提升。

立即试用

Copilot agent 模式目前处于预览状态,所有VS Code Insiders用户都可立即试用。我们每天都会推送新代码来改进 Copilot,在 VS Code Insiders 上的体验也在逐日提升(例如今天我们刚刚上线了“编辑终端命令建议”的新功能)。期待你在我们的仓库中给我们反馈,告诉我们你想如何使用 Copilot agent 模式,以便我们确保提供的功能对你真正有帮助。

接下来,我们计划重点提升:

  • 更细粒度的撤销能力
  • 简化上下文 UI(工作集)
  • Notebook 支持(目前编辑会话仅适用于文本编辑器)
  • 允许自动批准特定终端命令
  • 改进终端工具 UI(例如在编辑器中直接显示终端命令输出)
  • 探索工具可扩展性和MCP 服务器作为 agent 模式的工具。如果你有扩展想法,欢迎告诉我们
  • 统一 Chat 与 edits 的使用体验
  • 与此同时,我们也在提升质量和性能,目标是在 VS Code Stable 中向所有用户推出 Copilot agent 模式。

若想了解有关 Copilot agent 模式的详细信息,请查看官方文档。

我们对 Copilot agent 模式的前景感到非常兴奋——欢迎你立即试用并告诉我们你的想法。

祝你在编程中保持愉快的心情!

Isidor 及 VS Code 团队敬上