Visual Studio Code 和 GitHub Copilot
2023 年 3 月 30 日,作者:Chris Dias,@chrisdias
这篇博客文章并非由 AI 撰写,但 AI 将使您的开发体验变得不可思议。
注意:如果您想了解 Visual Studio Code 中最新的 GitHub Copilot 体验,请访问 VS Code 中的 GitHub Copilot 主题,您将在其中找到关于 Copilot 编辑器集成和 Copilot 聊天功能(如行内聊天、专用聊天视图和快速聊天)的详细信息。
如今,人工智能引发了广泛的讨论、兴奋和一些担忧。技术进步几乎每天都在发生,很难跟上。但是,一旦您尝试过,就会很快意识到一百多万 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”开发流程编写代码。
事实证明,这仅仅是个开始。
编辑器内聊天
我们知道 AI 渗透开发过程只是时间问题。我们一直与 GitHub Next 团队合作开发 Copilot 和 Copilot Labs 扩展,但 ChatGPT 于 2022 年 11 月的发布显著加快了时间表。
VS Code 团队内部举行了一场黑客马拉松,探索如何更深入地将 AI 集成到 VS Code 中,并提出了许多很棒的想法,例如改进重命名和重构、基于示例的代码转换,以及使用自然语言创建文件全局模式或正则表达式的方法。
尽管这些想法很有趣,但我们一直围绕着聊天体验。我们抱持着健康的怀疑态度。我们真的需要生活中再多一个聊天体验吗?VS Code 是一款编辑器,我们的工作是让您进入“心流状态”,并通过消除干扰来帮助您保持这种状态,同时您不断产出下一个“独角兽”项目。
我们发现一个有趣的探索,它涉及将聊天功能直接内置到编辑器中。这是第一个原型
随着我们对设计的迭代,我们意识到这种用户模型具有优势。它可以轻松地通过键盘调用,您无需离开代码,并且输出是代码(且仅是代码)。
在下面的示例中,我们首先选择了 users
数组,然后按 macOS 上的 Cmd+I(或 Windows/Linux 上的 Ctrl+I)调出聊天输入。接着我们要求 Copilot 将 username
字段拆分为 firstName
和 lastName
,最后我们点击了 Inline Diff 来查看 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
”,它会提供如何创建文件、要添加的内容等说明,直到您能够像专家一样设置断点和检查变量。
但也许集成聊天的最重要原因是,拥有双向对话有助于您判断什么是正确的,什么是错误的。大型语言模型并不完美,它们不会“思考”。它们只是简单地找出下一个最合适的词语来回应(诚然,它们在这方面做得相当好)。
作为“飞行员”,您始终掌控全局,由您决定采纳 Copilot 的哪些建议以及将哪些代码引入您的工作区。提出澄清问题或提供额外具体信息的能力有助于您做出这些关键决策。
充分利用 Copilot
命名很难(我们应该知道,我们的产品就叫“Code”)。然而,“GitHub Copilot”是一个很棒的名字。与“结对程序员”、“自动驾驶”或仅仅是“聊天”相比,“Copilot”在一个词中传达了多个重要的概念。
因此,如果您将自己视为 VS Code 的“飞行员”,而 GitHub 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(更好的是,使用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 团队
祝您智能编码愉快!