介绍 Copilot Edits(预览版)
2024 年 11 月 12 日,作者:Isidor Nikolic
直到最近,您还可以在 VS Code 中以两种独立的方式使用 GitHub Copilot。您可以使用补全或内联聊天在编辑器内修改代码。或者,您可以使用 Copilot 在聊天视图中询问有关代码的问题。Copilot Edits 作为一项预览功能,是 VS Code 中使用 Copilot 的全新方式。它结合了聊天和内联聊天的优点:对话式流程和在您管理的多个文件上进行内联更改的能力。而且它就是好用。
专为跨多文件迭代而设计
在 Copilot Edits 中,您指定要编辑的文件集,然后使用自然语言向 Copilot 提出您的需求。Copilot Edits 使用专为快速迭代设计的 UI,在您的工作区中跨多个文件进行内联更改。您在审阅建议更改时保持在代码流中,接受可行的更改,并通过后续提问进行迭代。
Copilot Edits 之所以有效,是因为它让您掌控一切,从设置正确的上下文到接受更改,而不是因为它依赖于一个从不出错的先进模型。并且体验是迭代的:当模型出错时,您可以跨多个文件审阅更改,接受好的更改并进行迭代,直到您与 Copilot 一起找到正确的解决方案。接受更改时,您可以运行代码以验证更改,并在需要时在 Copilot Edits 中撤销以恢复到之前的可用状态。
掌控一切
有一个新的 UI 概念——工作集(Working Set)——它让您掌控一切,并允许您定义需要将编辑应用到哪些文件。您还可以通过拖放文件或编辑器选项卡,或按 #
来显式添加文件到工作集。Copilot Edits 会自动将您的活动编辑器(跨编辑器组)添加到工作集。
工作集,连同撤销(Undo)和重做(Redo)功能,让您对更改拥有精确的控制,并允许您准确决定在何处以及如何应用它们。Copilot Edits 会将生成的编辑直接显示在您的代码中,并为您提供代码审阅流程,您可以在其中接受或丢弃每个 AI 生成的编辑。Copilot Edits 不会在工作集之外进行更改——唯一的例外是当它建议创建一个新文件时。
Copilot Edits 位于辅助侧边栏(默认为右侧),这样您在审阅建议的更改时,可以与主侧边栏中的视图进行交互,例如资源管理器、调试或源代码管理视图。例如,您可以在左侧的测试视图中运行单元测试,同时在右侧使用 Copilot Edits 视图,这样在每次迭代中,您都可以验证 Copilot Edits 建议的更改是否通过了单元测试。
在使用 Copilot Edits 时,使用语音是一种自然的体验。只需与 Copilot 对话,即可使交互流畅且具有对话性。这几乎感觉就像与一位领域专家同事互动,使用与您在现实生活中的结对编程中使用的相同类型的迭代流程。
Copilot Edits 让不同技能水平的用户都能轻松进行 AI 代码编辑。作为微软的产品经理,我可以使用 Copilot Edits 快速迭代早期想法,而无需大量编码。对于我的 VS Code 工程同事,Copilot Edits 帮助他们轻松地在 vscode 存储库中跨多个文件创建复杂的重构。例如,一位对 Swift 零经验的团队成员使用 Copilot Edits 从零开始创建了一个自定义 macOS 应用——每次迭代后,他们运行应用,识别出哪些不起作用,并向 Copilot Edits 给出适当的后续指令。
幕后原理
Copilot Edits 利用双模型架构来提高编辑效率和准确性。首先,一个基础语言模型会考虑编辑会话的完整上下文以生成初始编辑建议。您可以在 GPT-4o、o1-preview、o1-mini 和 Claude 3.5 Sonnet 之间选择您喜欢的基础语言模型。为了提供高性能体验,团队开发了一个推测解码端点,该端点经过优化,可快速应用文件中的更改。基础模型提出的编辑会发送到推测解码端点,然后该端点将在编辑器中内联提出这些更改。推测解码端点比常规模型更快,但团队知道它可以更快,并且正在努力改进,敬请期待。
今日可用
Copilot Edits 处于预览阶段,现已向所有 GitHub Copilot 用户开放!您过去在 #1 和 #2 中提供的反馈对发布此功能至关重要,因此非常感谢您!
有关 Copilot Edits 的详细概述,请阅读官方文档。
接下来,团队计划改进应用更改推测解码端点的性能,通过保留上下文来支持从 Copilot Chat 过渡到 Copilot Edits,建议文件到工作集,并允许撤销建议的块。如果您想成为第一批体验这些改进的用户,请务必使用 VS Code Insiders 和 GitHub Copilot Chat 扩展的预发布版本。为了帮助改进此功能,请在我们的存储库中提交问题。
最终,这不仅仅是关于 Copilot Edits 本身,而是它能帮助您构建什么。
编程愉快!
Isidor