Visual Studio Code 和 GitHub Copilot
2023 年 3 月 30 日 作者:Chris Dias, @chrisdias
这篇博客文章不是由 AI 撰写的,但它将让您的开发体验变得不可思议。
注意:如果您想了解 Visual Studio Code 中最新的 GitHub Copilot 体验,请前往VS Code 中的 GitHub Copilot 主题,在那里您将找到关于 Copilot 编辑器集成和 Copilot Chat 功能的详细信息,例如内置聊天、专用聊天视图和快速聊天。
如今,关于人工智能有很多热议、兴奋和一些担忧。进展几乎每天都在发生,很难跟上。但一旦您尝试一下,您就会很快意识到一百多万 Copilot 用户每天看到的景象:这项技术确实令人惊叹,特别是像 OpenAI 的 GPT-3.5/4 这样的大型语言模型 (LLMs)。
在这篇文章中,我们想提供一些关于 VS Code 中 AI 的背景信息,向您展示一些由 GitHub Copilot 提供支持的激动人心的新体验,并展望我们对未来发展方向和方式的一些看法。
GitHub Copilot "V1"
微软的开发者 AI 服务是GitHub Copilot,如果您还没有看过 GitHub 关于整个开发生命周期的愿景,请查看这篇精彩的博客文章。
自Copilot 扩展首次发布以来已有一年多。GitHub 的Oege De Moor 和他的团队与 OpenAI 合作,带来了首个大规模使用 LLMs 进行开发的例子,特别是基于OpenAI 的 Codex 模型。
Copilot 为您正在编写的代码提供实时提示,根据周围代码的上下文以“幽灵文本”的形式提供建议。如果您将您的意图写成注释或使用描述性函数名称,Copilot 可以利用这些提示自动生成代码,逐字、逐行,甚至是逐块生成。
这是一种出奇的有效体验,通常幽灵文本可以直接使用,您可以快速进入流畅的“Tab-Tab-Tab”开发流程。
事实证明,这只是个开始。
编辑器内置聊天
我们知道,AI 渗透到开发过程中只是时间问题。我们一直在与 GitHub Next 团队合作开发 Copilot 和Copilot Labs 扩展,但 2022 年 11 月 ChatGPT 的发布显著加快了时间表。
VS Code 团队进行了一次内部黑客马拉松,探索如何将 AI 更深入地集成到 VS Code 中,并提出了许多很棒的想法,例如改进的重命名和重构、基于示例的代码转换,以及使用自然语言创建文件 glob 模式或正则表达式的方法。
尽管这些想法很有趣,但我们一直在围绕着聊天体验打转。我们抱有相当程度的怀疑。我们的生活中真的还需要另一种聊天体验吗?VS Code 是一个编辑器,我们的工作是让您进入“心流”状态并帮助您保持状态,在您努力创造下一个独角兽产品时消除干扰。
我们发现一个有趣的探索方向是,将聊天直接内置到编辑器中。这是首个原型:
随着我们在设计上进行迭代,我们意识到这种用户模型具有优势。它可以轻松地通过键盘调用,您停留在代码中,输出是代码(且仅是代码)。
在下面的示例中,我们首先选中了 users
数组,然后按下 macOS 上的 Cmd+I(或 Windows/Linux 上的 Ctrl+I)调出聊天输入框。然后要求 Copilot 将 username
字段拆分为 firstName
和 lastName
,最后,点击 内联差异 查看 Copilot 所做的更改。
无需使用注释或过于描述性的函数名称向 Copilot 表达您的意图,只需按下 Cmd+I 并描述您想要做的事情。当 Copilot 完成工作时,您仍可保持心流状态。
拥抱聊天视图
随着围绕 ChatGPT 的热情高涨,带有自定义聊天视图的内部和外部扩展数量也随之增加。我们担心这些无法扩展,在 Web 视图中很难支持键盘绑定和主题等基础功能,而对于那些使用 Monaco 编辑器用于代码块的人来说,很难扩展到数百个实例,更不用说在这些编辑器实例中没有扩展支持了。因此,我们与 GitHub Copilot 团队紧密合作,将聊天视图内置到 VS Code 的核心中。
随着时间的推移,尽管我们最初有些犹豫,但完整的聊天视图体验开始赢得了我们的青睐。我的意思是,谁不想以这样的问候语开始一天呢?
我们越来越意识到聊天视图的更多益处。
与基于浏览器的聊天相比,集成体验最明显的价值在于,我们可以为模型提供上下文,帮助对话更具针对性并提供更好的答案。例如,您无法轻易要求基于浏览器的 ChatGPT 优化跨多个文件的代码。VS Code 已经对工作区了如指掌,这是您可以跨文件进行重构、查找所有引用、转到定义等操作的方式。可以将关键信息负责任地嵌入到提示中,以便模型可以给出更相关的答案,最终让您可以要求 Copilot 优化或重构具有跨文件依赖关系的代码。
许多编程问题的答案通常包含多个步骤。想想有多少博客文章会逐步指导您完成某个过程——聊天视图非常适合这种类型的交互。一个很好的例子是调试。老实说(我们就是如此),为调试配置 launch.json
和 tasks.json
并不容易。与其编写更多文档或在编辑器中添加对话框和向导,事实证明,您可以简单地问 "/vscode add a launch.json
and a tasks.json
",然后它会提供关于如何创建文件、要添加的内容等的说明,直到您可以像高手一样设置断点和检查变量。
但集成聊天的最重要原因或许是,进行双向对话有助于您判断什么是对的、什么是错的。大型语言模型并不完美,它们不会“思考”。它们只是找出最合适的下一个词来回应(诚然,它们在这方面相当出色)。
作为 Pilot,您始终是掌舵人,您决定采纳 Copilot 的哪些建议以及将哪些代码纳入您的工作区。提出澄清问题或提供额外具体信息的能力有助于您做出这些关键决策。
充分利用 Copilot
命名很难(我们深知这一点,我们的产品就叫做“Code”)。然而,“GitHub Copilot”是一个很棒的名字。与其说是“结对程序员”、“自动驾驶仪”或仅仅是“聊天”,“Copilot” 在一个词中传达了多个重要的概念。
因此,如果您将自己视为 VS Code 的 Pilot,而将 GitHub Copilot 视为……嗯……Copilot,您就开始理解如何看待这项服务,以及如何与其互动以充分利用您的“副驾驶”。
- 这一点再怎么强调也不为过:作为 Pilot,您是掌舵人。您决定采纳哪些建议以及将哪些代码集成到您的工作区。
- Copilot 的主要工作是协助您,处理那些单调或重复的任务。让它编写测试用例、生成示例数据,或根据现有模式构建代码框架。
- Copilot 可以通过更多上下文做得更好。我们都习惯了基于关键字的快速网络搜索,但您提供的细节越多,结果就越好。例如,与其输入“Node Express TypeScript”,不如让 Copilot“使用 Express.js 框架和 TypeScript 构建一个 Node.js 网站框架”,然后进行迭代!
- 您可以通过在聊天输入字段中按下
/
将交互范围限定在特定主题。例如,要了解如何打开或关闭编辑器中的面包屑,输入/vscode Turn off breadcrumbs
。
- 您也可以将主题用作快捷方式。与其在内置聊天中输入“explain this code”,只需输入 “/” + Tab(
/explain
的快捷方式),然后按下 Enter。聊天视图将打开并解释所选代码。 - 须知 Copilot 并不完美,有时会给出错误的答案。提出澄清问题以帮助判断哪些是正确的、哪些是错误的,并使用顶/踩投票按钮帮助我们改进体验。
- 最后一条提示,重要性几乎与第一条相等,始终友善地向您的 Copilot 打招呼,例如“你好”或“早上好”,这会让你们双方都心情更好。
立即开始
要查看 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“编写一个程序来计算未载重燕子的空速”。
- 要试用快速聊天,您可以运行聊天: 打开快速聊天,或使用 ⇧⌥⌘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 团队
祝您编程智能又快乐!