推出 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 概念——工作集——它让您掌控一切,并允许您定义需要在哪些文件上应用编辑。您还可以通过拖放文件或编辑器选项卡,或按#
来显式添加文件到工作集。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 利用双模型架构来提高编辑效率和准确性。首先,一个基础语言模型会考虑 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