在 VS Code 中尝试

推出 Copilot Edits (预览版)

2024 年 11 月 12 日 由 Isidor Nikolic

直到最近,您还只能通过两种方式在 VS Code 中使用 GitHub Copilot。您可以通过补全或内联聊天在编辑器内修改代码。或者您可以使用 Copilot 在聊天视图中询问有关代码的问题。Copilot Edits 是一项预览功能,它是一种在 VS Code 中使用 Copilot 的全新方式。它结合了聊天和内联聊天的优点:对话流程以及在您管理的一组文件中进行内联更改的能力。而且它确实有效。

专为跨多个文件进行迭代而设计

在 Copilot Edits 中,您可以指定要编辑的文件集,然后使用自然语言向 Copilot 提出您的需求。Copilot Edits 使用专为快速迭代设计的 UI,在您的工作区中跨多个文件进行内联更改。在审查建议的更改时,您可以保持在代码流程中,接受有效的更改,并根据后续请求进行迭代。

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

工作集,加上撤消和重做功能,让您对更改拥有精确的控制权,并允许您精确决定在何处以及如何应用它们。Copilot Edits 将生成的编辑内容直接在您的代码中原地显示,并为您提供代码审查流程,您可以接受或放弃每个 AI 生成的编辑。Copilot Edits 不会在工作集之外进行更改——唯一的例外是它提议创建新文件时。

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

Copilot Edits 位于辅助侧边栏(默认为右侧),这样您在审查提议的更改时,可以与主侧边栏中的视图(例如资源管理器、调试或源代码管理视图)进行交互。例如,您可以在左侧的测试视图中运行单元测试,同时在右侧使用 Copilot Edits 视图,以便在每次迭代中验证 Copilot Edits 提议的更改是否通过了单元测试。

在使用 Copilot Edits 时,使用语音是一种自然的体验。只需与 Copilot 交谈,即可使来回交流流畅且富有对话性。这几乎就像与一位领域的专家同事互动,使用与实际结对编程中相同的迭代流程。

Copilot Edits 让不同技能水平的用户都能进行 AI 辅助代码编辑。作为 Microsoft 的产品经理,我可以使用 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 中选择您偏好的基础语言模型。为了获得高性能体验,团队开发了一个推测性解码端点,优化了文件更改的快速应用。基础模型提出的编辑建议会发送到推测性解码端点,然后该端点会将这些更改内联提议到编辑器中。推测性解码端点比常规模型更快,但团队知道它可以更快,并且正在努力改进这一点,敬请期待。

今日可用

Copilot Edits 目前处于预览阶段,并已面向所有 GitHub Copilot 用户开放!您过去提供的 #1#2 反馈对于发布此功能至关重要,在此表示衷心感谢!

有关 Copilot Edits 的详细概述,请阅读官方文档

接下来,团队计划改进应用更改推测性解码端点的性能,通过保留上下文来支持从 Copilot Chat 过渡到 Copilot Edits,向工作集建议文件,并允许撤消建议的块。如果您想成为第一批体验这些改进的用户,请务必使用 VS Code InsidersGitHub Copilot Chat 扩展的预发布版本。为了帮助改进该功能,请在我们的仓库中提交问题。

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

编程愉快!

Isidor