在VS Code中使用Copilot Chat

使用Visual Studio Code中的GitHub Copilot Chat扩展,您可以进行AI驱动的聊天对话,以生成代码、增加对代码的理解,甚至配置您的编辑器。无需在文档或在线论坛中搜索答案,您可以直接在VS Code中询问Copilot Chat,并在编码过程中获得代码建议。

Copilot Chat 集成到您的开发流程中,并在您需要的地方提供帮助:

  • 内联聊天: 直接从编辑器启动聊天对话,并在编码时获取内联建议
  • 聊天视图: 在侧边有一个AI助手,帮助解答您的问题并提供代码建议
  • 快速聊天: 快速提问并回到你正在做的事情

如果您打算在项目中的多个文件上进行编辑,您可能会考虑使用Copilot Edits。您可以轻松地将现有的聊天对话转移到Copilot Edits

Tip

如果您还没有Copilot订阅,您可以通过注册Copilot免费计划免费使用Copilot,并获得每月一定数量的完成和聊天互动限制。

Copilot Chat 使用案例

你可以在各种开发者场景中使用Copilot Chat,例如:

  • 回答关于编码和技术主题的问题("什么是链表?", "十大流行的Web框架"
  • 回答关于如何最好地解决问题的编码问题("如何在我的项目中添加认证?"
  • 解释他人的代码并提出改进建议 ("@workspace /explain", "这段代码是做什么的?")
  • 提出代码修复建议 ("@workspace /fix", "此方法会抛出FileNotFoundException")
  • 生成单元测试用例 ("@workspace /tests")
  • 生成代码文档 ("/doc")

先决条件

  1. 安装GitHub Copilot扩展。

    安装 GitHub Copilot 扩展

  2. 使用您的GitHub账户登录以使用Copilot。

    Tip

    如果您还没有Copilot订阅,您可以通过注册Copilot免费计划免费使用Copilot,并获得每月一定数量的完成和聊天互动限制。

开始使用Copilot Chat

打开聊天

使用VS Code命令中心中的Copilot Chat菜单开始不同的聊天体验。

VS Code 命令中心中的 Copilot Chat 菜单截图

或者使用其中一个键盘快捷键开始与Copilot的聊天对话。

Shortcut Description
⌃⌘I (Windows, Linux Ctrl+Alt+I) Open the Chat view and start a chat conversation with Copilot by using natural language.
⇧⌥⌘L (Windows, Linux Ctrl+Shift+Alt+L) Open Quick Chat and ask a quick question to Copilot.
⌘I (Windows, Linux Ctrl+I) Start Inline Chat to send a chat request to Copilot directly from the editor. Use natural language or use / commands to give instructions to Copilot.

聊天上下文

Copilot 尝试根据您的自然语言聊天提示确定您问题的意图和范围。为了帮助 Copilot 提供最佳且最相关的答案,请在聊天提示中添加上下文。例如,附加特定文件甚至整个工作区的内容、当前编辑器选择等。

VS Code 会自动将当前活动的编辑器作为上下文添加到聊天视图中的聊天提示中。如果您在编辑器中选择了代码块,则仅将该选择作为上下文添加。您可以通过选择上下文项上的禁用图标来禁用添加活动编辑器。

VS Code Copilot 聊天视图的截图,显示当前编辑器选择作为上下文。

有几种方法可以为您的聊天提示添加上下文:

  • 在任何聊天体验中使用 按钮 (⌘/ (Windows, Linux Ctrl+/))。

    然后,您可以从快速选择中选择特定类型的上下文,例如当前选择、工作区中的一个或多个文件,或源代码中的一个或多个符号。

    VS Code Copilot 聊天视图的截图,显示附加上下文按钮和上下文快速选择。

    Tip

    要快速从附件快速选择中添加多个项目,请使用键导航列表,使用键将项目添加上下文,然后对其他项目重复此操作。

  • 将编辑器标签、文件或文件夹从资源管理器视图、搜索视图或编辑器面包屑拖放到聊天视图。

  • 通过输入#字符来使用聊天变量,您将看到可用的聊天变量列表。

    例如,您可以使用#selection将当前编辑器选择添加到您的聊天提示中,使用#file从工作区添加特定文件,或使用#sym从工作区添加符号。

    VS Code Copilot 聊天视图的截图,显示聊天变量选择器。

    Tip

    输入 # 并将其用作文件或符号建议的 IntelliSense 触发器。

  • 在资源管理器或搜索视图中,使用上下文菜单Copilot > 添加文件到聊天(或添加选择到聊天以选择文本)对文件进行操作。

Note

如果可能,当你附加文件时,文件的全部内容将被包含。如果文件太大无法放入上下文窗口,则将包含文件的概述,其中包括函数及其描述,但不包括实现。如果概述也太大,则该文件将不会成为提示的一部分。

更改您的AI模型

聊天输入框中的模型选择器使您能够更改用于生成响应的语言模型。选择模型选择器并从可用的语言模型中选择一个。

您可以在不同的聊天体验中使用模型选择器。

聊天视图中模型选择器的截图

内联聊天

内联聊天使您能够直接从编辑器中与Copilot进行聊天对话,而无需离开工作环境。通过内联聊天,您可以在代码中预览代码建议,这对于快速迭代代码更改非常有用。

在任何文件中,按下键盘上的 ⌘I (Windows, Linux Ctrl+I) 来启动 Copilot 内联聊天并开始使用。或者,打开一个文件并在 Copilot 聊天命令中心菜单中选择 编辑器内联聊天

VS Code 命令中心中的 Copilot Chat 菜单截图

根据你的问题,Copilot 会为你当前所在的文件建议代码修改或重构。Copilot 会提供更新的预览,你可以选择接受(⌘Enter (Windows, Linux Ctrl+Enter))或丢弃(Escape)。你也可以选择生成一个新的代码建议。

Copilot 内联聊天请求将排序算法转换为使用冒泡排序

如果你在编辑器中选中了一段代码,Copilot会将你的问题限定在选中的部分。

你也可以向Copilot提出更多探索性的问题,这些问题在你编写和迭代代码时会出现,例如“解释这段代码”,或者“我如何添加功能来实现X?”。

Copilot 内联聊天询问有关使用的排序算法的信息

通过inlineChat.mode设置,您可以配置内联聊天在编辑器中显示更新的方式。默认设置值为live,这意味着更新会直接应用于编辑器中。如果您更喜欢并排预览更改,可以将设置配置为preview

以下示例展示了Inline Chat的preview模式。

Copilot 内联聊天预览模式,显示代码更改的并排视图

聊天视图

打开聊天视图

聊天视图使您能够在一个单独的视图中与Copilot进行聊天对话。默认情况下,聊天视图位于辅助侧边栏中。辅助侧边栏始终位于主侧边栏的对面,因此您可以在主侧边栏中打开资源管理器、源代码控制或其他视图的同时,保持聊天视图的开启。

Copilot聊天视图在辅助侧边栏中,资源管理器视图在主侧边栏中。

您可以通过按下 ⌃⌘I (Windows, Linux Ctrl+Alt+I) 或在 Copilot Chat 命令中心菜单中选择 打开聊天 来访问聊天视图。

VS Code 命令中心中 Copilot Chat 菜单的截图,突出显示打开聊天

您还可以使用VS Code标题栏中的布局控件来切换包含聊天视图的辅助侧边栏。

VS Code 标题栏中的布局控件,突出显示辅助侧边栏切换按钮。

Tip

任何时候,您都可以将聊天视图拖动到另一个位置,甚至将其作为编辑器打开。了解更多关于VS Code中的自定义布局

输入聊天提示

要开始使用,请在聊天输入字段中输入您的问题。例如,询问有关一般编程主题的问题,或询问您工作区中的特定代码。确保附加相关上下文到您的聊天提示中,以帮助Copilot为您提供更相关的答案。

Copilot 解释 devcontainer.json 文件

Tip

在聊天输入框中输入 /help 以获取有关 GitHub Copilot 的帮助以及如何与 Copilot Chat 进行交互。

Copilot Chat 可以提供丰富且交互式的结果,包含:简单文本、图像、用于调用 VS Code 命令的按钮、引用 URI 或编辑器位置,或文件树(例如,当聊天参与者提议创建新工作区时显示工作区预览)。

以下示例("@workspace /new Express with TypeScript and pug")展示了一个聊天提示,用于创建一个Express应用程序,该应用程序返回一个带有建议工作区结构的树视图和一个用于创建新工作区的按钮。

Copilot响应包含丰富的结果,例如带有建议工作区结构的文件树,以及创建新工作区的按钮

随着对话的继续,Copilot会保持聊天消息和回复的历史记录,并在其响应中提供相关的后续问题或命令。

代码块

根据你的问题,Copilot Chat 可能会在代码块中返回源代码。根据语言扩展的不同,聊天响应中的代码块可能支持 IntelliSense,这使你能够通过悬停在方法或符号上获取相关信息,或跳转到它们的定义。

Copilot聊天代码块响应。

将鼠标悬停在代码块上会显示在编辑器中应用在光标处插入复制的选项。

更多操作 (...) 按钮提供了插入到新文件插入到终端的选项 (⌃⌥Enter (Windows, Linux Ctrl+Alt+Enter)).

如果Copilot Chat检测到代码块包含shell命令,您可以使用插入终端⌃⌥Enter (Windows, Linux Ctrl+Alt+Enter))直接在集成终端中运行它。此选项创建或打开活动终端并插入命令文本,准备供您运行。

Copilot Chat 代码块显示列出文件并带有插入终端选项

Tip

使用Chat: Next Code Block⌥⌘PageDown(Windows, Linux Ctrl+Alt+PageDown)和Chat Previous Code Block⌥⌘PageUp(Windows, Linux Ctrl+Alt+PageUp)在代码块之间导航。

您可以通过以下设置控制聊天中代码块的字体:

  • chat.editor.fontFamily
  • chat.editor.fontSize
  • chat.editor.fontWeight
  • chat.editor.lineHeight

聊天记录

Copilot Chat 保留了您之前的聊天对话历史记录,您可以通过在聊天视图中使用显示聊天...按钮或在命令面板中使用聊天:显示聊天...命令来访问这些历史记录。

快速选择显示最近的聊天列表,按最近排序。您可以选择一个聊天以在聊天视图中打开它。

聊天视图的截图,其中突出显示了显示聊天...按钮

快速聊天

如果你想快速向Copilot提问,并且不想启动完整的聊天视图会话或在编辑器中打开内联聊天,你可以使用快速聊天下拉菜单。

快速聊天下拉菜单

按下键盘上的 ⇧⌥⌘L (Windows, Linux Ctrl+Shift+Alt+L) 来打开快速聊天。或者,在 Copilot 聊天命令中心菜单中选择 快速聊天

VS Code 命令中心中的 Copilot Chat 菜单截图

你可以输入问题,通过聊天参与者斜杠命令来限定问题的范围,并通过下拉菜单右上角的在聊天视图中打开按钮将讨论提升为完整的聊天视图会话。

快速聊天 在聊天视图中打开按钮

多轮对话

当你在Copilot Chat中提问时,你并不局限于第一个回答。保持聊天对话开放,并继续迭代和提示Copilot以改进建议的解决方案。Copilot既了解生成的代码的上下文,也了解你当前的对话历史。随着你不断提出更多问题,Copilot会根据你的需求进一步优化回答。

这是一个使用内联聊天创建计算斐波那契数列函数的示例:

Copilot首次响应计算斐波那契数列的函数

如果您更喜欢不使用递归的解决方案,请更新聊天提示并将其提交给Copilot以获得不同的响应。

要求Copilot不要使用递归和新结果

了解更多关于如何在Copilot聊天对话中进行迭代的信息。

终端内联聊天

类似于编辑器中的内联聊天,您可以在终端中调出Copilot内联聊天,以帮助您回答与终端和shell命令相关的问题。终端内联聊天使用@terminal聊天参与者,该参与者具有关于集成终端的shell及其内容的上下文。例如,您可以提出诸如“如何安装npm包”或“列出src目录中最大的5个文件”之类的问题。

要在终端中启动内联聊天,请按键盘快捷键 ⌘I (Windows, Linux Ctrl+I)

截图显示你可以问复杂的问题,比如“列出src目录中最大的5个文件”

一旦建议了一个命令,使用运行 (⌘Enter (Windows, Linux Ctrl+Enter)) 在终端中运行该命令,或使用插入 (⌥Enter (Windows, Linux Alt+Enter)) 将命令插入到终端中。

可选地,在运行命令之前,您可以通过将光标放置在响应中或按下Ctrl+向下TabTab在Windows和Linux上,或Cmd+向下TabTab在macOS上,直接在Copilot响应中编辑命令。

智能操作

Copilot Chat 允许您使用自然语言从 Copilot 获取帮助。对于几种常见场景,您可以使用智能操作从 Copilot 获取帮助,而无需编写提示。这些智能操作的示例包括生成提交消息、生成文档、修复代码、解释代码或审查代码更改等任务。

这些智能操作在整个VS Code UI中都可用。例如,您可以从编辑器上下文菜单或通过快速修复操作访问Copilot智能操作。

在编辑器中,您可以通过选择一段代码,右键单击,然后选择Copilot来访问智能操作。

编辑器上下文菜单,Copilot菜单组已展开

最强大的智能操作是修复操作。这里有一个相对简单的TypeScript计算器,出现了一个错误,提示“类型为'string'的参数不能赋值给类型为'number'的参数”。选择火花图标,然后选择修复

使用Copilot智能操作快速修复类型不匹配错误

类似于/fix/doc智能操作也是一个流行的操作。要使用/doc,选择一段代码,右键点击,然后选择Copilot > 生成文档。Copilot 会为你的代码生成一个文档注释。

内联聊天 /doc 结果为 TypeScript 函数添加 JSDoc 注释

你也可以在聊天中使用等效的斜杠命令来调用一些这些智能操作。例如,你可以使用/fix来修复所选代码中的问题,或者使用/doc为所选代码生成文档。

聊天参与者

聊天参与者就像专家一样,他们有自己的专长,可以帮助你。你可以通过在聊天输入框中输入“@”来调用聊天参与者,后面跟上参与者的名字。有几个内置的聊天参与者:

  • @workspace 包含有关您工作区中代码的上下文信息,可以帮助您导航,找到相关的文件或类。
  • @vscode 了解 VS Code 编辑器本身的命令和功能,并可以帮助您使用它们。
  • @terminal 包含有关集成终端 shell 及其内容的信息。
  • @github 了解您的 GitHub 仓库、问题、拉取请求和主题,并且还可以使用 Bing API 执行网络搜索。

扩展还可以贡献聊天参与者,以提供其领域的专业帮助。要查找可用的聊天参与者列表,请在聊天输入字段中输入@

这些是Visual Studio Marketplace中一些扩展的示例,它们为VS Code中的聊天视图贡献了一个聊天参与者。前往Marketplace或使用集成的扩展视图,并使用chat-participant标签搜索更多扩展。

@workspace

@workspace 聊天参与者知道如何收集有关您工作区中代码的上下文,可以帮助您导航、查找相关的类、文件等。

询问@workspace聊天参与者关于在Express应用程序中指定URL的位置

因为它拥有所有必要的上下文,@workspace 可以回答开发者更可能提出的问题。例如,关于代码不同部分如何交互的问题:

  • "@workspace 通知是如何安排的?"

或者需要了解相关代码、依赖项和设计模式的问题:

  • "@workspace 添加表单验证,类似于新闻通讯页面"

@vscode

VS Code 可以通过多种方式进行定制,当人们发现一些隐藏功能时,会感到非常惊喜。为了帮助您充分发挥 VS Code 的全部功能,我们创建了 @vscode

这个聊天参与者了解所有关于VS Code的知识,可以帮助你弥合自然语言与VS Code命令和自定义之间的差距。@vscode 内部使用了一些工具,使其能够访问所有设置和命令的索引,我们正在添加一个工具,以便这个聊天参与者也可以使用VS Code文档。现在你可以问一些模糊的问题,比如:

  • "@vscode 当vscode假装打开一个文件时,那个东西的名字是什么?以及如何禁用它?"
  • "@vscode 如何更改我的 VS Code 颜色?"

询问@vscode如何更改VS Code颜色

使用/runCommand 斜杠命令,你可以要求@vscode在编辑器中运行一个命令。例如,你可以要求@vscode /runCommand show minimap来显示编辑器中的小地图。

使用Copilot Chat中的/runCommand斜杠命令在编辑器中切换小地图。

@terminal

使用@terminal,您可以询问有关集成终端shell、其缓冲区和当前选择的问题。在以下示例中,您使用终端中的快速修复使用Copilot解释来获取有关失败shell命令的信息。

注意聊天视图中的提示是如何填充@terminal #terminalLastCommand以帮助纠正错误的。#terminalLastCommand是一个聊天变量,它允许您为聊天提示添加更多上下文。了解更多关于为聊天添加上下文的信息。

与@terminal #terminalLastCommand和Copilot的答案快速聊天

Note

终端不会自动拉取工作区上下文,因此关于您工作区的问题可能需要一些时间。

@github

使用 @github 你可以询问关于你的 GitHub 仓库、提交、问题、拉取请求等的问题。以下是如何使用 @github 参与者的示例:

  • @github 分配给我的所有开放PR是什么?
  • @github 分配给我的最新问题是什么?
  • @github 最新版本是什么时候发布的?

获取更多关于可用GitHub技能的信息,请参阅GitHub文档。

扩展贡献的聊天参与者

您可以从Visual Studio Code MarketplaceGitHub Marketplace安装额外的聊天参与者。

通过VS Code扩展参与的聊天参与者是客户端扩展,这些扩展可以完全访问VS Code扩展API表面。

通过GitHub应用程序参与的聊天参与者不会在您的本地机器上运行,并且必须明确请求访问您的本地编辑器上下文。在您安装了一个提供聊天参与者的GitHub应用程序后,第一次在VS Code中@-提及该参与者时,系统会要求您授权其访问您的本地编辑器上下文。

Note

为了保护您的隐私,您与GitHub应用程序的聊天参与者共享编辑器上下文的偏好将按每个工作区保存,除非您选择“允许所有工作区”。

斜杠命令

聊天参与者可以通过使用斜杠命令来提供特定功能的快捷方式。这些命令提供了一种简洁且结构化的方式与聊天参与者互动并给予他们指示。您可以在聊天提示中引用斜杠命令,方法是输入参与者名称,后跟/和命令名称。

例如,@workspace 参与者有一个斜杠命令 /new 来搭建一个新的工作区或新文件。在聊天输入字段中输入 @workspace /new Node.js Express Pug TypeScript 会创建一个带有 Node.js Express Pug TypeScript 项目的新工作区。

一些内置斜杠命令的示例包括:

  • /clear: 开始一个新的聊天会话
  • /help: 获取有关使用 GitHub Copilot 的帮助
  • @workspace /explain (或 /explain): 解释所选代码的工作原理
  • @workspace /fix (或 /fix): 为所选代码中的问题提出修复建议
  • @workspace /new (或 /new): 为新工作区或新文件搭建代码
  • @vscode /runCommand: 搜索或运行一个VS Code命令

要查看内置参与者及其命令的列表,请在聊天输入字段中输入@或选择图标。

对话历史

Copilot 在聊天视图中跟踪您的对话历史。Copilot 可以将此信息用作后续提示的上下文,例如当您进行多轮对话时。

例如,当你第一次问“TypeScript中的数字数据类型是什么?”然后问“你也可以用它来表示小数吗?”,Copilot知道你仍然在引用number数据类型。

聊天视图包含多个提示,其中Copilot理解'it'指的是第一个提示。

您可以通过将鼠标悬停在提示上并选择x控件来从对话历史记录中删除提示和相应的响应。删除一个或多个提示以获得更相关的响应可能很有用。

聊天视图显示多个提示,突出显示用于删除聊天提示和响应的'x'控件。

您可以使用命令面板中的Chat: Export Chat...命令将会话中的所有提示和响应导出为JSON文件。

使用语音交互

通过VS Code Speech扩展提供的语音控制功能,您可以使用语音发起聊天对话:

  • 使用你的语音来口述你的聊天提示
  • 使用“Hey Code”语音命令开始与Copilot Chat的语音会话
  • 通过使用“按住说话”模式加速聊天的语音输入

了解更多关于如何在VS Code中使用语音交互的信息。

隐私与透明

我们强调负责任地使用AI,特别是在涉及源代码时。默认启用的inlineChat.acceptedOrDiscardBeforeSave设置,在保存由Copilot生成的代码之前会要求您进行确认。

当启用此设置时,文件保存操作将等待您接受或放弃任何挂起的Inline Chat会话。这也适用于启用了自动保存的情况,自动保存将暂时禁用,直到Inline Chat结束。

内联聊天保存同意消息。

为了为私有仓库启用更多的工作区搜索功能,我们需要额外的权限。如果我们检测到尚未拥有这些权限,我们将在启动时请求它们。一旦授予,我们将安全地存储会话以供将来使用。

请求私有仓库额外认证的模态窗口。

了解更多关于安全、隐私和透明度的信息,请访问GitHub Copilot Trust Center

常见问题

如何在Copilot编辑、内联聊天、聊天视图和快速聊天之间进行选择?

下表提供了每个接口功能的比较。

Capability Copilot Edits Chat view Inline Chat Quick Chat
Receive code suggestions
Multi-file edits ✅* ✅*
Preview code edits in editor
Code review flow
Roll back changes
Attach context
Use participants & commands
Generate shell commands
General-purpose chat

* 代码块包含在聊天对话中,需要手动应用到正确的文件中

额外资源

你可以阅读更多关于GitHub Copilot以及如何在VS Code中使用它的信息,在GitHub Copilot文档中。

或者查看VS Code Copilot系列在YouTube上,您可以找到更多关于使用Copilot的入门内容和特定编程语言的视频,如PythonC#JavaPowerShellC++等。

下一步