Visual Studio Code 和 GitHub Copilot
2023 年 3 月 30 日,作者:Chris Dias,@chrisdias
这篇博文并非由 AI 撰写,但 AI 将让你的开发体验变得非凡。
注意:如果你想了解 Visual Studio Code 中最新的 GitHub Copilot 体验,请访问VS Code 中的 GitHub Copilot主题,你将在其中找到有关 Copilot 编辑器集成和 Copilot Chat 功能的详细信息,例如行内聊天、专用聊天视图和快速聊天。
如今,人工智能领域充满热议、兴奋,但也伴随着一些担忧。技术进步几乎每天都在发生,让人难以跟上。但一旦你尝试过,你很快就会发现一百多万 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 合作,带来了首个大规模使用 LLM 进行开发的示例,特别是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 添加一个 launch.json
和一个 tasks.json
”,它就会提供创建文件、添加内容等说明,直到你能够像专家一样设置断点和检查变量。
但集成聊天最重要的原因或许是,双向对话能帮助你判断什么是对的,什么是错的。大型语言模型并非完美,它们不会“思考”。它们只是简单地找出下一个最适合回复的词语(当然,它们在这方面做得相当出色)。
作为“飞行员”(Pilot),你始终是掌控者,你决定采纳 Copilot 的哪些建议,以及将哪些代码引入你的工作区。提问澄清问题或提供额外具体信息的能力有助于你做出这些关键决策。
充分利用 Copilot
命名很难(我们应该知道,我们的产品就叫“Code”)。然而,“GitHub Copilot”是一个很棒的名字。与“结对程序员”、“自动驾驶仪”或简单的“聊天”相比,“Copilot”在一个词中传达了多个重要概念。
因此,如果你将自己视为 VS Code 的“飞行员”,将 GitHub Copilot 视为……嗯……“副驾驶”(Copilot),你就会开始了解如何看待这项服务以及如何与它互动,从而从你的“座舱伙伴”那里获得最大收益。
- 我们怎么强调都不为过:作为“飞行员”,你负责掌舵。你决定采纳哪些建议,以及将哪些代码集成到你的工作区。
- Copilot 的主要职责是协助你,处理日常或重复性任务。让它编写测试用例、创建示例数据,或根据现有模式搭建代码框架。
- Copilot 在获得更多上下文时能做更多事情。我们都习惯了基于关键词的快速网络搜索,但你提供的细节越多,获得的结果就越好。例如,与其说“Node Express TypeScript”,不如要求 Copilot “使用 Express.js 框架和 TypeScript 搭建一个 Node.js 网站”,然后迭代!
- 你可以在聊天输入字段中按下
/
来将交互范围限定到特定主题。例如,要了解如何在编辑器中打开或关闭面包屑导航,请键入/vscode Turn off breadcrumbs
。
- 你也可以将主题用作快捷方式。与其在行内聊天中键入“解释这段代码”,不如直接键入“/” + Tab(
/explain
的快捷方式)并按下 Enter 键。聊天视图将打开并解释所选代码。 - 请注意,Copilot 并不完美,有时会给出错误的答案。提出澄清性问题以帮助判断哪些是对的,哪些是错的,并使用顶/踩投票按钮来帮助我们改进体验。
- 最后一点,也几乎和第一条提示一样重要,始终用友好的“你好”或“早上好”问候你的 Copilot,这会让你们双方的心情都更好。
立即开始
要查看 Copilot 的实际应用并获取更多充分利用 Copilot 的技巧,请观看这个精彩的介绍视频,或者深入了解 YouTube 上的完整VS Code Copilot 系列。
上面讨论的行内补全体验现已可用。如果你的组织没有提供 Copilot,你可以在此处注册并开始免费试用。之后,
- 打开 VS Code(更好的是,使用内测版)。
- 打开扩展视图(⇧⌘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 团队
祝你智能编程愉快!