Visual Studio Code 与 GitHub Copilot
2023 年 3 月 30 日,作者:Chris Dias,@chrisdias
这篇文章并非由 AI 撰写,但它将让你的开发体验变得不可思议。
注意:如果你想了解 Visual Studio Code 中最新的 GitHub Copilot 体验,请前往“VS Code 中的 GitHub Copilot”主题,在那里你可以找到有关 Copilot 编辑器集成以及 Copilot Chat 功能(如行内聊天、专用聊天视图和快速聊天)的详细信息。
如今,人工智能(AI)引发了大量的热议、兴奋以及一些担忧。技术的进步几乎每天都在发生,让人目不暇接。但一旦你尝试过,就会很快意识到全球超过一百万的 Copilot 用户每天所见的真相:这项技术确实令人惊叹,尤其是像 OpenAI 的 GPT-3.5/4 这样的大语言模型(LLM)。
在这篇文章中,我们想介绍一下 VS Code 中 AI 的背景,向你展示由 GitHub Copilot 提供支持的一些令人兴奋的新体验,并展望我们对未来的看法。
GitHub Copilot “V1”
微软的开发者 AI 服务是 GitHub Copilot。如果你还没有看过 GitHub 关于整个开发生命周期的愿景,请查看这篇出色的博文。
Copilot 扩展首次发布至今已超过一年。Oege De Moor 和他在 GitHub 的团队与 OpenAI 合作,带来了第一个在大规模开发中使用大语言模型的案例,具体来说就是 OpenAI 的 Codex 模型。

Copilot 通过根据周围代码的上下文提供“幽灵文本”建议,为你正在编写的代码提供实时提示。如果你通过注释表达意图或使用描述性的函数名,Copilot 可以利用这些提示自动生成代码,无论是逐字、逐行还是逐块地进行。
这是一种非常有效的体验,通常幽灵文本直接就能用,你很快就会进入一种流畅的“Tab-Tab-Tab”开发流程。
事实证明,这仅仅是个开始。
编辑器内聊天 (In-Editor Chat)
我们知道 AI 渗透到开发流程中只是时间问题。我们一直与 GitHub Next 团队在 Copilot 和 Copilot Labs 扩展上进行合作,但 2022 年 11 月 ChatGPT 的发布大大加快了时间表。
VS Code 团队举办了一次内部黑客松,探索如何将 AI 更深入地集成到 VS Code 中,并提出了许多很棒的想法,例如改进重命名和重构、基于示例的代码转换,以及使用自然语言创建文件匹配模式(glob patterns)或正则表达式的方法。
尽管这些想法很有趣,但我们一直围绕着“聊天”体验转。我们对此持怀疑态度:我们的生活中真的需要另一个聊天功能吗?VS Code 是一个编辑器,我们的工作是让你进入“心流”状态,并通过减少干扰来帮助你保持专注,直到你写出下一个独角兽产品。
我们发现的一项有趣的探索是将聊天功能直接集成到编辑器中。以下是最初的原型:

随着我们不断迭代设计,我们意识到这种用户模式具有优势。它可以方便地通过键盘调用,让你保持在代码中,并且输出的是代码(且仅有代码)。
在下面的示例中,我们首先选中了 users 数组,然后按下 macOS 上的 Cmd+I(或 Windows/Linux 上的 Ctrl+I)调出聊天输入框。接着,我们要求 Copilot 将 username 字段拆分为 firstName 和 lastName,最后点击内联差异 (Inline Diff) 查看 Copilot 所做的更改。

无需通过注释或过于描述性的函数名来向 Copilot 表达意图,只需按下 Cmd+I 并描述你想做的事情。在 Copilot 处理任务的同时,让你保持在专注状态。
拥抱聊天视图 (Chat view)
随着围绕 ChatGPT 的热度不断增长,内部和外部带有自定义聊天视图的扩展数量也在增加。我们担心这些无法扩展:在 Web 视图中支持键盘快捷键和主题等基础功能非常困难;对于那些在代码块中使用 Monaco 编辑器的场景,扩展到数百个实例非常难,更不用说这些编辑器实例中没有扩展支持。因此,我们与 GitHub Copilot 团队紧密合作,将聊天视图构建到 VS Code 的核心中。
随着时间的推移,尽管我们最初持犹豫态度,但完整的聊天视图体验开始赢得了我们的认可。我的意思是,谁不想用这样的问候语开启新的一天呢?

我们开始意识到聊天视图越来越多的好处。
与基于浏览器的聊天相比,集成体验最明显的价值在于我们可以为模型提供上下文,帮助实现对话的落地并提供更好的答案。例如,你很难让基于浏览器的 ChatGPT 去优化跨越多个文件的代码。VS Code 已经了解关于工作区的很多信息,因为这就是你可以进行跨文件重构、查找所有引用、转到定义等操作的方式。关键信息可以被负责任地嵌入到提示词中,以便模型能够给出更相关的答案,最终让你要求 Copilot 优化或重构具有跨文件依赖关系的代码。
许多编程问题的答案通常包含多个步骤。想想有多少篇博客文章是在引导你完成一个过程——聊天视图非常适合这种类型的交互。调试就是一个很好的例子。如果我们要诚实地说(我们确实是这样),配置 launch.json 和 tasks.json 进行调试并不容易。我们无需编写更多文档或向编辑器添加对话框和向导,你可以直接要求 “/vscode 添加一个 launch.json 和一个 tasks.json”,它就会提供有关如何创建文件、要添加的内容等说明,直到你像高手一样设置断点并检查变量。

但或许集成聊天的最重要原因在于,双向对话能帮你决定什么是对的,什么是错的。大语言模型并不完美,它们不会“思考”。它们只是计算出下一个最合适的回复词(当然,它们在这方面做得相当不错)。
作为飞行员(Pilot),你始终掌握主导权,并决定采用 Copilot 的哪些建议以及将哪些代码引入你的工作区。询问澄清问题或提供更多细节的能力,有助于你做出那些关键决策。
充分利用 Copilot
命名很难(我们应该知道这一点,因为我们的产品叫“Code”)。然而,“GitHub Copilot”是一个很棒的名字。比起“结对编程员”、“自动驾驶仪”或仅仅是“聊天”,“Copilot”(副驾驶)在一个词中传达了多个重要的概念。
因此,如果你将自己视为 VS Code 的“飞行员”,将 GitHub Copilot 视为……嗯……“副驾驶”,你就会开始理解如何看待这项服务,以及如何与你的邻座互动以获得最大收益。
- 我们怎么强调也不为过:作为飞行员,你掌握主导权。你决定采用哪些建议,以及哪些代码被整合到你的工作区中。
- Copilot 的首要工作是协助你,处理平凡或重复的任务。让它编写测试用例、制作样本数据,或基于现有模式构建代码框架。
- Copilot 在有更多上下文的情况下能做得更多。我们都习惯了基于关键词的快速网页搜索,但你提供的细节越多,获得的结果就越好。例如,不要只搜 “Node Express TypeScript”,而是要求 Copilot “使用 TypeScript 和 Express.js 框架构建一个 Node.js 网站”,然后进行迭代!
- 你可以通过在聊天输入框中按
/将交互范围限制在特定主题。例如,要了解如何在编辑器中开启或关闭面包屑导航,请输入/vscode 关闭面包屑。

- 你也可以将主题用作快捷方式。与其在行内聊天中输入 “解释这段代码”,不如简单地输入 “/” + Tab(这是
/explain的快捷方式)并按 Enter。聊天视图将打开并解释选中的代码。 - 请记住,Copilot 并不完美,也会给出错误的答案。通过提出澄清问题来帮助判断哪些是对的、哪些是错的,并使用顶/踩按钮来帮助我们改进体验。
- 最后,这一点和第一个建议一样重要:记得用友好的 “Hello” 或 “Good Morning” 来问候你的 Copilot,这会让你们俩的心情都更好。
立即开始使用
要查看 Copilot 的实际操作并获取更多充分利用它的技巧,请观看这个精彩的入门视频,或深入了解 YouTube 上的完整 VS Code Copilot 系列。
上述讨论的行内补全体验现已可用。如果你的组织没有 Copilot,你可以在此处注册并开启免费试用。之后:
- 打开 VS Code(最好使用 Insiders 版本)。
- 打开扩展视图(⇧⌘X (Windows, Linux Ctrl+Shift+X)),搜索 GitHub Copilot 并安装扩展。
- 出现提示时,使用你的 GitHub ID 进行身份验证。
- 打开一个代码文件,见证奇迹吧!
要访问聊天体验(编辑器内、聊天视图、快速聊天),你需要安装 GitHub Copilot Chat 扩展。
- 打开扩展视图(⇧⌘X (Windows, Linux Ctrl+Shift+X)),搜索 GitHub Copilot Chat 扩展。
- 出现提示时,使用你的 GitHub ID 进行身份验证。
- 要打开编辑器内聊天,请选择一段代码(可选),然后按 ⌘I (Windows, Linux Ctrl+I)。要求 Copilot 编写一个快速排序函数。
- “聊天”图标将出现在活动栏中,点击它即可打开聊天视图。来吧,让 Copilot “写一个程序来计算无载燕子的空速”。
- 要体验快速聊天,你可以运行 Chat: Open Quick Chat 或使用 ⇧⌥⌘L (Windows, Linux Ctrl+Shift+Alt+L) 键盘快捷键。
你可以在“VS Code 中的 GitHub Copilot”主题中了解有关 GitHub Copilot 和 Copilot Chat 扩展的更多信息。
负责任的 AI
像这样重大的技术进步确实是凤毛麟角。我们也相信 AI 是下一个将改变我们思考、构建和使用开发者工具方式的重大变革。它最终将以我们今天只能梦想的方式增强开发过程的每一个方面。我们不敢自称是第一个这么说的人,但很快我们都会怀疑,在没有 AI 驱动工具的情况下,我们是如何构建、调试、部署和维护应用程序与系统的。
AI 并不完美(我们也不完美!),而且它会随着时间的推移不断进步。微软和 GitHub Copilot 遵循负责任的 AI 原则,并采取控制措施,确保你使用该服务的体验是恰当、愉悦且有用的。我们理解围绕 AI 能力迅速扩张存在犹豫和担忧,并完全尊重那些不想使用或无法使用 Copilot 的人。
融会贯通
聊天助手、编辑器内聊天和行内补全的组合,让你无论处于哪种编码“状态”,都能利用 Copilot 的力量。刚开始或有疑问?使用聊天视图。正在疯狂写代码并想进行一些重构、更新或构建框架?按下 Ctrl+I 让 Copilot 为你代劳。正在逐步解决问题?使用行内补全,通过 Tab-Tab-Tab 的方式走向成功。
将由 GitHub Copilot 支持的聊天功能集成到 VS Code 中只是旅程的一步。我们将继续探索更多“内循环”场景,例如使用自然语言描述搜索模式或生成代码、自动生成提交消息和拉取请求描述、更智能的代码重命名、重构、转换等。
请关注 GitHub、Twitter 和 YouTube。让我们知道你的想法,以及你对 VS Code 中 AI 功能的任何点子。
谢谢,
Chris 和 VS Code 团队
祝你 智能 编码愉快!