在 VS Code 中使用 Copilot 聊天
通过 Visual Studio Code 中的 GitHub Copilot 聊天 扩展,您可以进行 AI 驱动的聊天对话,以生成代码、提高代码理解能力,甚至配置编辑器。您无需在文档或在线论坛中搜索答案,而可以直接在 VS Code 中向 Copilot 聊天提问,并在编码过程中获得代码建议。
Copilot 聊天集成到您的开发流程中,并在您需要的地方提供帮助
Copilot 聊天用例
您可以在各种开发场景中使用 Copilot 聊天,例如:
- 解答有关编码和技术主题的问题("什么是链表?"、"十大流行的 Web 框架")
- 解答有关如何最佳解决问题的编码问题("如何在项目中添加身份验证?")
- 解释他人的代码并建议改进("@workspace /explain"、"这段代码的作用是什么?")
- 提出代码修复建议("@workspace /fix"、"此方法导致 FileNotFoundException 错误")
- 生成单元测试用例("@workspace /tests")
- 生成代码文档("/doc")
先决条件
-
要使用 GitHub Copilot,您必须在个人帐户中拥有 GitHub Copilot 的有效订阅,或者需要由您的组织分配一个席位。
-
要使用 VS Code 中的 GitHub Copilot,您必须安装 GitHub Copilot 扩展。安装此扩展时,还会安装 GitHub Copilot 聊天 扩展。
按照以下步骤 在 VS Code 中设置 GitHub Copilot,方法是注册订阅并在 VS Code 中安装 Copilot 扩展。
入门
打开聊天
使用 VS Code 命令中心的 Copilot 聊天菜单开始使用不同的聊天体验。
或者使用以下键盘快捷键之一开始与 Copilot 的聊天对话。
快捷键 | 描述 |
---|---|
⌃⌘I (Windows、Linux Ctrl+Alt+I) | 打开聊天视图,并使用自然语言开始与 Copilot 的聊天对话。 |
⇧⌥⌘L (Windows、Linux Ctrl+Shift+Alt+L) | 打开快速聊天,并向 Copilot 提问。 |
⌘I (Windows、Linux Ctrl+I) | 开始内联聊天,以直接从编辑器向 Copilot 发送聊天请求。使用自然语言或使用 / 命令向 Copilot 指示。 |
聊天上下文
Copilot 会根据您的自然语言聊天提示尝试确定您的意图和问题的范围。为了帮助 Copilot 为您提供最佳和最相关的答案,请在您的聊天提示中添加上下文。例如,附加特定文件,甚至添加工作区中的所有内容、当前编辑器选择内容等。
您可以使用 按钮(⌘/ (Windows、Linux Ctrl+/))在任何聊天体验中向聊天消息添加上下文。然后,您可以从快速选择中选择特定类型的上下文,例如当前选择、工作区中的一个或多个文件,或源代码中的一个或多个符号。
要快速从附件快速选择中添加多个项目,请使用 向上 和 向下 键在列表中导航,使用 向右 键将项目添加为上下文,然后对其他项目重复此操作。
将资源管理器或搜索视图中的文件拖放到聊天输入字段,是将特定文件快速添加到聊天提示的另一种方法。您也可以将编辑器选项卡拖放到聊天输入字段中,以将文件添加为上下文。
VS Code 会自动将当前活动的编辑器添加为聊天视图中聊天提示的上下文。如果在编辑器中选择了一块代码,则只将该选择内容添加为上下文。您可以选择上下文项目上的禁用图标来禁用添加活动编辑器。
您还可以使用聊天变量引用上下文。键入 #
字符,您将看到一个可用聊天变量的列表。例如,您可以使用 #selection
将当前编辑器选择内容添加到您的聊天提示中,或使用 #file
将工作区中的特定文件添加到您的聊天提示中。
如果可能,将包含文件的所有内容。如果大小太大而无法容纳在上下文窗口中,将包含文件的概述,包括函数及其描述,但不包含实现。如果概述的大小也太大,则文件将不会成为提示的一部分。
更改 AI 模型
聊天输入字段中的模型选择器使您能够更改用于生成响应的语言模型。选择模型选择器并选择一个可用的语言模型。
您可以在不同的聊天体验中使用模型选择器。
内联聊天
内联聊天使您能够直接从编辑器与 Copilot 进行聊天对话,而无需离开工作上下文。使用内联聊天,您可以在代码中就地预览代码建议,这对于快速迭代代码更改非常有用。
在任何文件中,按键盘上的 ⌘I (Windows、Linux Ctrl+I),以调出 Copilot 内联聊天并开始使用。或者,打开文件,然后在 Copilot 聊天命令中心菜单中选择**编辑器内联聊天**。
根据您的问题,Copilot 会为当前所在的代码文件建议代码修改或重构。Copilot 会提供更新预览,您可以接受 (⌘Enter (Windows、Linux Ctrl+Enter)) 或放弃 (Escape)。您也可以选择生成新的代码建议。
如果您在编辑器中选择了一块代码,Copilot 会将您的问题范围缩小到所选内容。
您也可以询问 Copilot 在编写和迭代代码时出现的更具探索性的问题,例如“解释这段代码”或“如何添加功能来执行 X?”。
使用 inlineChat.mode 设置,您可以配置内联聊天在编辑器中显示更新的方式。默认设置值为live
,这意味着更新会直接应用到编辑器中。如果您希望并排预览更改,可以将设置配置为preview
。
以下示例显示了内联聊天的preview
模式。
聊天视图
打开聊天视图
聊天视图使您能够在一个单独的视图中与 Copilot 进行聊天对话。默认情况下,聊天视图位于**辅助侧边栏**中。辅助侧边栏始终位于主侧边栏的对面,因此您可以同时打开聊天视图和资源管理器、源代码管理或主侧边栏中的其他视图。
您可以通过按 ⌃⌘I (Windows、Linux Ctrl+Alt+I) 或选择 Copilot 聊天命令中心菜单中的**打开聊天**来访问聊天视图。
您也可以使用 VS Code 标题栏中的布局控件来切换辅助侧边栏,其中包含聊天视图。
您可以随时将聊天视图拖动到其他位置,甚至将其作为编辑器打开。详细了解 VS Code 中的自定义布局。
输入聊天提示
要开始使用,请在聊天输入框中键入您的问题。例如,询问有关一般编程主题的问题,或询问有关工作区中特定代码的问题。请确保 附加聊天提示的相关上下文,以帮助 Copilot 为您提供更相关的答案。
在聊天输入框中键入/help
,以获取有关 GitHub Copilot 及如何与 Copilot 聊天进行交互的帮助。
Copilot 聊天可以提供丰富的交互式结果,其中包含:简单文本、图像、用于调用 VS Code 命令的按钮、引用 URI 或编辑器位置,或文件树(例如,在聊天参与者建议创建新的工作区时,显示工作区预览)。
以下示例("@workspace /new Express with TypeScript and pug")显示了用于创建 Express 应用的聊天提示,它会返回一个带有建议工作区结构的树形视图和一个用于创建新工作区的按钮。
在您继续对话时,Copilot 会维护 聊天消息和回复的历史记录,并在其回复中提供相关的后续问题或命令。
代码块
根据您的问题,Copilot 聊天可能会在代码块中返回源代码。根据语言扩展,聊天回复中的代码块可能支持 IntelliSense,这使您能够通过将鼠标悬停在方法和符号上来获取有关它们的信息,或转到它们的定义。
将鼠标悬停在代码块上会显示以下选项:**在编辑器中应用**、**在光标处插入**和**复制**。
**更多操作** (...
) 按钮提供了以下选项:**插入到新文件**和**插入到终端** (⌃⌥Enter (Windows、Linux Ctrl+Alt+Enter))。
如果 Copilot 聊天检测到代码块包含 shell 命令,您可以使用**插入到终端** (⌃⌥Enter (Windows、Linux Ctrl+Alt+Enter)) 在集成终端中直接运行它。此选项会创建或打开活动终端,并插入命令文本,以便您立即运行。
使用**聊天:下一个代码块** (⌥⌘PageDown (Windows、Linux Ctrl+Alt+PageDown)) 和**聊天:上一个代码块** (⌥⌘PageUp (Windows、Linux Ctrl+Alt+PageUp)) 在代码块之间导航。
您可以使用以下设置控制聊天中代码块的字体
聊天历史记录
Copilot 聊天会维护您之前聊天对话的历史记录,您可以通过使用聊天视图中的**显示聊天...**按钮或使用命令面板中的**聊天:显示聊天...**命令来访问它。
快速选择会显示之前聊天的列表,按最近的时间顺序排序。您可以选择一个聊天,将其在聊天视图中打开。
快速聊天
如果您想向 Copilot 提出一个简短的问题,而不想启动完整的聊天视图会话或在编辑器中打开内联聊天,可以使用快速聊天下拉菜单。
按键盘上的 ⇧⌥⌘L (Windows、Linux Ctrl+Shift+Alt+L),以调出快速聊天。或者,在 Copilot 聊天命令中心菜单中选择**快速聊天**。
您可以键入问题,使用 聊天参与者 和 斜杠命令 来设定问题的范围,并使用下拉菜单右上角的**在聊天视图中打开**按钮将讨论提升为完整的聊天视图会话。
多轮对话
当您在 Copilot 聊天中提出问题时,您不必受第一个回复的限制。保持聊天对话打开,并继续迭代并提示 Copilot 改进建议的解决方案。Copilot 既拥有生成的代码的上下文,也拥有您当前的对话历史记录。当您继续提出其他问题时,Copilot 会根据您的要求进一步优化回复。
以下示例使用内联聊天来创建一个用于计算斐波那契数的函数
如果您希望获得不使用递归的解决方案,请更新聊天提示并将其提交给 Copilot,以获得不同的回复。
详细了解如何 迭代 Copilot 聊天对话。
终端内联聊天
与编辑器中的内联聊天类似,您可以在终端中调出 Copilot 内联聊天,以帮助您回答与终端和 shell 命令相关的问题。终端内联聊天使用@terminal
聊天参与者,该参与者具有有关集成终端的 shell 及其内容的上下文。例如,您可以提出以下问题:“如何安装 npm 包”或“列出 src 目录中最大的 5 个文件”。
要在终端中启动内联聊天,请按 ⌘I (Windows、Linux Ctrl+I) 键盘快捷键。
建议命令后,使用**运行** (⌘Enter (Windows、Linux Ctrl+Enter)) 在终端中运行命令,或使用**插入** (⌥Enter (Windows、Linux Alt+Enter)) 将命令插入终端。
您也可以在运行命令之前直接在 Copilot 回复中编辑命令,方法是在回复中放置光标或按 Windows 和 Linux 上的 Ctrl+down、Tab、Tab,或 macOS 上的 Cmd+down、Tab、Tab。
聊天智能操作
为了更方便地使用 Copilot 聊天功能,智能操作已集成到您的 VS Code 工作流程中,您无需编写任何提示。例如,您可以从编辑器上下文菜单或通过快速修复操作访问 Copilot 智能操作。
选择一段代码,右键单击并选择**Copilot**,以访问智能操作。智能操作是上下文感知的,可以帮助您完成常见任务,例如生成文档、修复代码或解释代码。
最强大的智能操作是/fix
。这是一个相对简单的 TypeScript 计算器,其中有一个错误,提示“类型为 'string' 的参数不可分配给类型为 'number' 的参数”。选择闪光图标,然后选择**使用 Copilot 修复**。
与/fix
类似,/doc
智能操作很受用户欢迎。要使用/doc
,请选择一段代码,右键单击,然后选择**Copilot** > **生成文档**。Copilot 将为您的代码生成文档注释。
聊天参与者
为了进一步帮助 Copilot 为您提供更相关的答案,您可以通过聊天参与者来指示问题的范围和意图。
聊天参与者就像专家一样,拥有他们可以帮助您解决的专业领域,您可以通过使用@
符号提及他们在聊天中与他们交谈。目前,以下是内置的聊天参与者
@workspace
具有有关工作区中代码的上下文,可以帮助您浏览它,找到相关文件或类。@vscode
了解 VS Code 编辑器本身的命令和功能,可以帮助你使用它们。@terminal
对集成终端 shell 及其内容有上下文信息。@github
了解你的 GitHub 仓库、问题、拉取请求和主题,还可以使用 Bing API 进行网络搜索。
扩展程序还可以贡献聊天参与者,为他们的领域提供专门的帮助。
@workspace
@workspace
聊天参与者知道如何收集关于工作区中代码的上下文信息,可以帮助你浏览它,查找相关的类、文件等等。
由于拥有所有必要的上下文,@workspace
可以回答开发者更有可能提出的问题。例如,与代码不同部分如何交互有关的问题
- "
@workspace
通知是如何排定的?"
或者需要了解相关代码、依赖项和设计模式的问题
- "
@workspace
添加表单验证,类似于新闻稿页面"
@vscode
VS Code 可以通过多种方式自定义,因此人们在发现一些隐藏功能时会感到惊喜。为了帮助你释放 VS Code 的全部潜力,我们创建了 @vscode
。
此聊天参与者了解所有关于 VS Code 的知识,可以帮助你弥合自然语言与 VS Code 命令和自定义之间的差距。@vscode
内部使用工具,使其可以访问所有设置和命令的索引,我们正在添加一个工具,以便此聊天参与者也可以使用 VS Code 文档。现在你可以问一些模糊的问题,比如
- "
@vscode
当 vscode 模拟打开一个文件时,那个东西的名字是什么?如何禁用它?" - "
@vscode
如何更改我的 VS Code 颜色?"
使用 /runCommand
斜杠命令,你可以要求 @vscode
在编辑器中运行一个命令。例如,你可以要求 @vscode /runCommand show minimap
在编辑器中显示小地图。
@terminal
使用 @terminal
,你可以询问关于集成终端 shell、其缓冲区和当前选择的问题。在以下示例中,你在终端中使用快速修复 **使用 Copilot 解释** 来获取有关 shell 命令失败的信息。
注意聊天视图中的提示如何填充 @terminal #terminalLastCommand
以帮助更正错误。#terminalLastCommand
是一个聊天变量,允许你为聊天提示添加更多上下文信息。详细了解 为聊天添加上下文。
终端不会自动拉取工作区上下文,因此关于工作区的问题可能需要一些时间。
@github
使用 @github
,你可以询问关于你的 GitHub 仓库以及你的提交、问题、拉取请求等等的问题。以下是一些你可以使用 @github
参与者的示例
@github 我分配的所有未解决的 PR 是什么?
@github 我分配的最新问题是什么?
@github 最新版本是什么时候发布的?
在 GitHub 文档中获取有关可用 GitHub 技能 的更多信息。
扩展贡献的聊天参与者
你可以从 Visual Studio Code Marketplace 或 GitHub Marketplace 安装其他聊天参与者。
通过 VS Code 扩展贡献的聊天参与者是客户端扩展,它们可以完全访问 VS Code 扩展 API 表面。
通过 GitHub 应用贡献的聊天参与者不会在你的本地计算机上运行,必须明确请求访问你的本地编辑器上下文。在你安装贡献聊天参与者的 GitHub 应用后,你第一次在 VS Code 中 @-提及
该参与者时,系统会要求你授权其访问你的本地编辑器上下文。
为了保护你的隐私,你对与来自 GitHub 应用的聊天参与者共享编辑器上下文的偏好将保存在每个工作区的基础上,除非你选择“允许所有工作区”。
斜杠命令
回答问题时的一项任务是确定意图,了解你想做什么。你可以使用自然语言来描述你的意图,但它可能很模糊。为了帮助解决这个问题,你可以使用斜杠命令。聊天参与者可以贡献斜杠命令,它们是该聊天参与者提供的特定常用功能的快捷方式。
例如,我们可以推断“使用 Node.js Express Pug TypeScript 创建一个新的工作区”意味着你想要一个新的项目。相反,你也可以使用“@workspace /new Node.js Express Pug TypeScript”,它明确、简洁,并节省你打字时间。在这种情况下,/new
斜杠命令是创建新工作区的快捷方式。
一旦意图明确,@workspace
更有可能满足你的需求,尽管自然语言存在固有的模糊性。@workspace 聊天参与者可以提出目录结构,用户可以选择要预览的提议文件。有一个“创建工作区”按钮,它会在新文件夹中生成这些文件。
内置命令示例 - 键入 @
或选择 图标。
/clear
:开始一个新的聊天会话/help
:获取有关使用 GitHub Copilot 的帮助/doc
:生成代码文档(行内聊天)@workspace /explain
(或/explain
):解释所选代码的工作原理@workspace /fix
(或/fix
):为所选代码中的问题提出解决方案@workspace /fixTestFailure
(预览):为失败的测试提出解决方案@workspace /setupTests
:为你的工作区配置测试框架@workspace /tests
(或/tests
):为所选代码生成单元测试@workspace /new
(或/new
):为新工作区或新文件搭建代码@workspace /newNotebook
(或/newNotebook
):创建一个新的 Jupyter 笔记本@vscode /runCommand
:搜索或运行 VS Code 命令@vscode /search
(或/search
):为搜索视图生成查询参数@vscode /startDebugging
(实验性):生成launch.json
文件以设置调试配置并启动调试@terminal /explain
:解释终端功能或 shell 命令
提高 Copilot 聊天性能
当 Copilot 有足够的上下文来了解你正在做什么以及你想要什么帮助时,它能发挥最佳效果。就像你在向同事寻求特定编程任务的帮助时会提供上下文信息一样,你也可以对 Copilot 做到这一点。
你可以通过对 Copilot 响应的赞成或反对来帮助 Copilot 提供更好的答案,在 Copilot 响应的右上角使用点赞和反对图标。这将为 Copilot 提供有关它在你的场景中帮助了多少的反馈,以便它将来能更好地帮助你。
使用聊天变量
通过在你的聊天提示中使用聊天变量,你可以更具体地说明你提供给 Copilot 的上下文信息。例如,提示“使用哪个排序算法 #selection”将聊天请求集中在所选代码段上。
使用聊天参与者和命令
聊天参与者(如 @workspace
)可能与他们相关联的上下文信息。例如,@vscode
了解 VS Code 设置及其 API。当你将聊天参与者包含在聊天提示中时,你本质上是在提示中添加了上下文信息。同样,通过使用斜杠命令,你可以进一步集中聊天请求的意图。
会话历史
Copilot 会跟踪你在聊天视图中的对话历史记录。Copilot 可以使用此信息作为后续提示的上下文信息,例如当你有 多轮对话 时。
例如,当你首先询问“TypeScript 中的数字数据类型是什么?”,然后询问“你也可以将其用于十进制数吗?”时,Copilot 知道你仍在引用 number
数据类型。
你可以通过将鼠标悬停在提示上并选择 **x** 控件来从对话历史记录中删除提示及其相应的响应。删除一个或多个提示可能有助于你获得更相关的响应。
你可以使用命令面板中的 **聊天:导出聊天...** 命令将聊天会话的所有提示和响应导出到一个 JSON 文件中。
行内聊天的上下文
如果你使用的是行内聊天,并且在编辑器中选择了代码,Copilot 会将你的问题范围限定到所选代码。
忽略文件
当你使用 @workspace
来询问与你的 VS Code 工作区相关的問題时,你可以通过使用 .gitignore
文件来显式地忽略工作区中的特定文件。@workspace
会在决定要索引工作区中的哪些文件时尊重 .gitignore
。
使用语音交互
使用 VS Code 语音 扩展提供的 VS Code 语音控制功能,你可以使用语音启动聊天会话
- 使用语音来口述你的聊天提示
- 使用“Hey Code”语音命令开始与 Copilot 聊天的语音会话
- 使用“按住说话”模式加速聊天的语音输入
详细了解如何 在 VS Code 中使用语音交互。
隐私和透明度
我们强调负责任地使用 AI,尤其是在源代码方面。默认情况下启用的 inlineChat.acceptedOrDiscardBeforeSave 设置会要求你在保存由 Copilot 生成的代码之前确认。
启用该设置后,文件保存操作将等待你接受或丢弃任何待处理的行内聊天会话。这也适用于启用自动保存的情况,自动保存将被暂时禁用,直到行内聊天结束。
为了为私有仓库启用更多工作区搜索功能,我们需要额外的权限。如果我们检测到尚未获得这些权限,将在启动时请求它们。权限授予后,我们将安全地存储会话以备将来使用。
了解更多关于安全、隐私和透明度的信息,请访问 GitHub Copilot 信任中心。
常见问题解答
如何在内联聊天、聊天视图和快速聊天之间选择?
下表比较了每个界面的功能。
功能 | 聊天视图 | 内联聊天 | 快速聊天 |
---|---|---|---|
询问一般技术问题 | ✅ | ✅ | ✅ |
接收代码建议 | ✅ | ✅ | ✅ |
在编辑器中查看代码建议 | ✅ | ||
多个文件的代码建议 | ✅ | ✅ | |
生成新项目 | ✅ | ✅ | |
附加上下文 | ✅ | ✅ | ✅ |
使用聊天参与者 | ✅ | ✅ | |
使用命令 | ✅ | ✅* | ✅ |
聊天历史记录 | ✅ |
* 内联聊天只提供有限的命令集
其他资源
您可以在 GitHub Copilot 文档中阅读更多关于 GitHub Copilot 以及如何在 VS Code 中使用它的信息,请访问 GitHub Copilot 文档。
或者查看 YouTube 上的 VS Code Copilot 系列,您可以在其中找到更多介绍性内容和针对编程的视频,用于将 Copilot 与 Python、C#、Java、PowerShell、C++ 等一起使用。
下一步
从介绍性的 Copilot Chat 教程 开始。