
技术速递|GitHub Copilot Agent 模式(预览版)介绍
作者:Isidor Nikolic翻译:Alan WangGitHub Copilot Agent 模式(预览版)是 AI 辅助编码的最新进化。它作为一个自主的编程助手,可以根据你的指令执行多步骤的编码任务——分析代码库、读取相关文件、提出文件编辑建议、运行终端命令和测试。它能够响应编译和 lint 错误,监控终端和测试输出,并在循环中自动纠正,直到任务完成。
作者:Isidor Nikolic
翻译:Alan Wang
GitHub Copilot Agent 模式(预览版)是 AI 辅助编码的最新进化。它作为一个自主的编程助手,可以根据你的指令执行多步骤的编码任务——分析代码库、读取相关文件、提出文件编辑建议、运行终端命令和测试。它能够响应编译和 lint 错误,监控终端和测试输出,并在循环中自动纠正,直到任务完成。
Copilot Edits video
如何使用 Copilot Agent 模式
在 VS Code Insiders 中,打开 Copilot Edits 视图(⇧⌘I
),从模式下拉菜单中选择 Agent,然后输入提示。
Copilot Agent 模式可以从头开始创建应用程序、跨多个文件执行重构、编写和运行测试,以及将遗留代码迁移到现代框架。它可以自动生成文档、集成新库,或帮助回答有关复杂代码库的问题。Copilot Agent 模式通过拥有一个理解工作区的 AI 合作者,帮助你实现超高的生产力。它可以在你的控制下协调你的内部开发流程。
Copilot Agent 模式以更自主和动态的方式运作,以实现预期的结果。为了处理请求,Copilot 会循环执行以下步骤,并根据需要多次迭代:
- 自主确定相关的上下文和需要编辑的文件。
- 提供代码更改和终端命令以完成任务。例如,Copilot 可能会编译代码、安装包、运行测试等。
- 监控代码编辑和终端命令输出的正确性,并进行迭代以修复问题。
Copilot Agent 模式使用一组工具来完成这些任务。
在理想情况下,你只需关注 Copilot Agent 模式的最终输出。但它有时可能会出错或偏离预期。为了便于干预和撤销,每次工具调用都会透明地显示在 UI 中,终端工具需要获得批准,我们还提供了丰富的撤销功能——你可以使用视图标题栏中的 Undo Last Edit 控件,恢复到应用最后一次编辑之前的状态。与其依赖一个冗长、详细的提示词来获得完美解决方案,不如与 Copilot 进行迭代交互——UI 设计旨在支持迭代,让你完全掌控整个过程,确保最终结果更优。
Copilot Agent 模式会自动查找精确的上下文,并通过调用合适的工作区工具来设置文件工作集。为了更精准地引导 Copilot,你可以使用 #file
标记、拖放文件,或点击 Add Files 按钮显式引用上下文。例如,你可以创建一个 specifications.md
文件并将其作为上下文,以更好地控制 Copilot,或者设置自定义指令,让 Copilot 遵循你的编码规范或其他偏好。
请注意,由于 Copilot Agent 模式可能会为每个提示发送多个请求,它的速度不会像普通编辑模式那样快,并且可能会快速消耗你的 Copilot 免费额度。对于范围明确、定义清晰的任务,建议使用编辑模式。当你需要多个编辑步骤或处理更开放的任务时,则可以切换到 Agent 模式。
工作原理
当你在 Agent 模式下向 Copilot 发送请求时,我们会向你在模型下拉菜单中选择的 LLM 发送一个提示,该提示包括以下内容:
- 你的查询内容
- 工作区的摘要结构(而非完整代码库,以节省 token)
- 机器环境信息(例如你使用的操作系统)
- 工具描述(以及可选的工具调用结果)
我们为 LLM 定义了一组可调用的工具,每个工具都有特定的功能,帮助 Copilot 完成任务。借助这些工具,Copilot 可以搜索工作区、读取文件内容、在终端运行命令、从编辑器获取编译或 lint 错误,并通过推测式解码端点应用建议的更改(性能优化正在进行中)。这些工具的列表不断扩展,我们正在尝试引入更多工具,以提升 Copilot 在 Agent 模式下的能力。
每个工具都包含详细的说明,指导 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 在其 构建高效 Agent 博客中也提到了这一点。我们有自动化评估机制,但仍然需要不断调整提示词和描述,并观察它们在实际应用中的表现。
我们发现 GPT-4o 和 Claude Sonnet 之间存在不同的行为,但目前我们对这些模型发送的系统提示是相似的。未来,随着 Copilot Agent 模式对更多 LLM 的支持扩展,我们将为每个模型量身定制专门的提示词。
我们热爱自测
自 VS Code 诞生以来,我们一直坚信自测的重要性。如果团队在生产环境中不使用某个新功能,那说明这个功能存在问题。对我们来说,就是这么简单。
我们的团队负责管理 200 多个 GitHub 代码库,我们已经看到 Copilot Agent 模式在较小的代码库中表现出色,并且已经开始提升生产力。Copilot 能够回答开放式问题这一能力,无论代码库大小都很实用——比如,某个特定功能是如何实现、在哪里实现的等。然而,在大型代码库(如 VS Code)中跨多个文件进行重构,目前仍然是所有软件工程 Agent 面临的挑战。提升 Copilot Agent 模式在复杂代码库中的能力,不仅能为我们的团队解锁更多自测的可能性,也能为你带来更有价值的交互体验。
除了用于自测,VS Code 团队的成员还喜欢在个人项目中使用 Copilot Agent 模式,比如开发天气预报、餐食规划、咖啡消费记录或健身追踪等应用。
目前,在 Copilot Agent 模式的使用场景中,VS Code 团队更倾向于 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 模式的前景感到非常兴奋——欢迎立即试用并告诉我们你的想法。
编码愉快!
更多推荐
所有评论(0)