参加你附近的 ,了解 VS Code 中的 AI 辅助开发。

隆重推出 Copilot Edits(预览版)

2024年11月12日,由 Isidor Nikolic 发布

直到最近,在 VS Code 中使用 GitHub Copilot 还有两种独立的方式。您可以使用代码补全或内联聊天 (Inline Chat) 在编辑器中修改代码。或者,您也可以在聊天视图 (Chat view) 中使用 Copilot 提出关于代码的问题。Copilot Edits 是一个预览功能,它是在 VS Code 中使用 Copilot 的一种全新方式。它结合了聊天和内联聊天的优点:既有对话式的流程,又能在一系列您管理的文件中进行内联更改。而且,它就是这么好用。

专为跨多文件迭代而设计

在 Copilot Edits 中,您可以指定一组要编辑的文件,然后用自然语言告诉 Copilot 您的需求。Copilot Edits 会在您的工作区中,跨多个文件进行内联更改,并采用专为快速迭代设计的用户界面。您可以在审查建议的更改时保持编码的流畅性,接受可行的部分,并通过后续提问进行迭代。

Screenshot of the Copilot edits, and the proposed inline changes

Copilot Edits 之所以有效,是因为它让您掌握控制权——从设置正确的上下文到接受更改——而不是因为它依赖一个从不出错的高级模型。这种体验是迭代式的:当模型出错时,您可以审查跨多个文件的更改,接受好的部分,并不断迭代,直到与 Copilot 共同找到正确的解决方案。在接受更改时,您可以运行代码来验证这些更改,并在需要时,在 Copilot Edits 中使用“撤销”功能恢复到之前可用的状态。

一切尽在掌控

我们引入了一个新的 UI 概念——工作集 (Working Set)——它让您掌握控制权,可以定义需要在哪些文件上应用编辑。您还可以通过拖放文件或编辑器标签页,或按 # 键来显式地将文件添加到工作集中。Copilot Edits 会自动将您在所有编辑器组中的活动编辑器添加到工作集中。

Screenshot of the Working Set, showing the user adding index.js

工作集,再加上撤销 (Undo) 和重做 (Redo) 功能,让您能够精确控制更改,并决定在何处以及如何应用它们。Copilot Edits 会在您的代码中直接就地显示生成的编辑,并为您提供一个代码审查流程,您可以接受或放弃每一处由 AI 生成的编辑。Copilot Edits 不会在工作集之外进行任何更改——唯一的例外是当它建议创建一个新文件时。

Screenshot of the inline changes, showing the Accept / Discard widget

Copilot Edits 位于次侧边栏(默认在右侧),这样您在审查建议的更改时,可以与主侧边栏中的视图进行交互,例如资源管理器 (Explorer)、调试 (Debug) 或源代码管理 (Source Control) 视图。例如,您可以在左侧的测试视图中运行单元测试,同时在右侧使用 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 利用双模型架构来提高编辑效率和准确性。首先,一个基础语言模型会考虑 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 InsidersGitHub Copilot Chat 扩展的预发布版本。为了帮助改进该功能,请在我们的仓库中提交问题。

最终,重要的不仅仅是 Copilot Edits 本身,而是它帮助您构建了什么。

编程愉快!

Isidor