介绍 Copilot Edits(预览版)
2024年11月12日 由 Isidor Nikolic 发布
直到最近,您还只能通过两种独立的方式在 VS Code 中使用 GitHub Copilot。您可以利用补全功能或内联聊天(Inline Chat)在编辑器中修改代码;或者,您也可以在聊天视图中向 Copilot 询问关于代码的问题。Copilot Edits 是一项全新的预览功能,它提供了一种在 VS Code 中使用 Copilot 的全新方式。它结合了聊天和内联聊天的优点:既有对话式的交互流程,又能对您管理的一组文件进行跨文件的内联修改。而且,它用起来非常顺手。
专为跨文件迭代而设计
在 Copilot Edits 中,您可以指定一组待编辑的文件,然后使用自然语言告知 Copilot 您的需求。Copilot Edits 利用专为快速迭代设计的 UI,在您的工作区中跨多个文件进行内联修改。在审查建议的更改时,您始终保持在代码逻辑的流程中,接受有效的更改,并针对后续问题进行迭代。

Copilot Edits 之所以有效,是因为它让您掌握控制权——从设置正确的上下文到接受更改,而不是因为它依赖于一个永远不会出错的高级模型。这种体验是迭代式的:当模型处理出错时,您可以审查跨多个文件的更改,接受正确的部分,并不断迭代,直到与 Copilot 一起达成正确的解决方案。在接受更改时,您可以运行代码来验证修改;如果需要,还可以在 Copilot Edits 中执行“撤销”操作,以恢复到之前的正常状态。
保持控制权
这引入了一个新的 UI 概念——“工作集”(Working Set),它赋予了您掌控权,让您能够定义需要在哪些文件上应用编辑。您还可以通过拖放文件或编辑器标签页,或者输入 # 来显式添加文件,从而将文件添加到工作集中。Copilot Edits 会自动将您在各编辑器组中处于活动状态的编辑器加入到工作集中。

工作集结合撤销和重做功能,让您能够精确控制更改,并决定更改应用的位置和方式。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。为了获得高性能的体验,团队开发了一个专为快速应用文件更改而优化的推测解码(speculative decoding)端点。来自基础模型建议的编辑会被发送到推测解码端点,该端点随后会在编辑器中内联提出这些更改。推测解码端点比普通模型更快,但团队深知它还可以更快,并且正在致力于改进这一点,敬请期待。
现已推出
Copilot Edits 目前处于预览阶段,即日起向所有 GitHub Copilot 用户开放!您过去在 #1 和 #2 中提供的反馈对该功能的发布起到了至关重要的作用,非常感谢大家!
如需详细了解 Copilot Edits,请阅读官方文档。
接下来,团队计划提高应用更改的推测解码端点的性能,支持通过保留上下文从 Copilot Chat 转换到 Copilot Edits,建议将文件添加到工作集,并允许撤销建议的片段。如果您想率先体验这些改进,请务必使用 VS Code Insiders 和 GitHub Copilot Chat 扩展的预发布版本。为了帮助改进此功能,请在我们的仓库中提交问题。
归根结底,重要的不仅仅是 Copilot Edits 本身,而是它能帮助您构建出什么。
编程愉快!
Isidor