阅读(82) 书签 (0)

Copilot Chat

2024-11-28 18:41 更新

在 VS Code 中使用 Copilot Chat

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

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

  • 内联聊天 (Inline Chat): 直接从编辑器启动聊天对话,并在编码过程中获得内联建议。
  • 聊天视图 (Chat view): 在侧边栏拥有一个 AI 助手,帮助您解答问题并提供代码建议。
  • 快速聊天 (Quick Chat): 快速提问并立即返回到您的工作中。

Copilot Chat 使用案例

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

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

前提条件

要使用 GitHub Copilot,您必须拥有个人帐户的 GitHub Copilot 有效订阅,或者需要由您的组织分配一个席位。

要在 VS Code 中使用 GitHub Copilot,您必须安装 GitHub Copilot 扩展。安装此扩展程序时,也会安装 GitHub Copilot Chat 扩展程序。

请按照以下步骤在 VS Code 中设置 GitHub Copilot:注册订阅并在 VS Code 中安装 Copilot 扩展程序。

入门操作

打开聊天

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

Screenshot of the Copilot Chat menu in the VS Code Command Center

或者使用以下快捷键之一开始与 Copilot 的聊天对话:

快捷键说明
Ctrl+Alt+I使用自然语言打开聊天视图并开始与 Copilot 的聊天对话。
Ctrl+Shift+Alt+L打开快速聊天并向 Copilot 提问。
Ctrl+I启动内联聊天,直接从编辑器向 Copilot 发送聊天请求。使用自然语言或使用 / 命令向 Copilot 提供指令。


聊天上下文

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

您可以在任何聊天体验中使用按钮 (Ctrl+/) 向聊天消息添加上下文。然后,您可以从 Quick Pick 中选择特定类型的上下文,例如当前选择、工作区中的一个或多个文件或源代码中的一个或多个符号。

Screenshot of VS Code Copilot Chat view, showing the Attach context button and context Quick Pick.


提示

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

另一种快速将特定文件添加到聊天提示的方法是从资源管理器或搜索视图将文件拖放到聊天输入字段。您也可以将编辑器选项卡拖放到聊天输入字段以将文件添加为上下文。

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

Screenshot of VS Code Copilot Chat view, showing the current editor selection as context.

您还可以使用聊天变量引用上下文。键入 # 字符,您将看到可用聊天变量的列表。

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

Screenshot of VS Code Copilot Chat view, showing the chat variable picker.

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


更改 AI 模型

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

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

Screenshot of the model picker in the Chat view


内嵌聊天

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

在任何文件中,按键盘上的 Ctrl+I 即可调出 Copilot 内联聊天并开始使用。或者,打开一个文件,然后在 Copilot Chat 命令中心菜单中选择“编辑器内联聊天”。

Screenshot of the Copilot Chat menu in the VS Code Command Center

根据您的问题,Copilot 会建议您当前文件的代码修改或重构。Copilot 会预览更新,您可以接受 (Ctrl+Enter) 或放弃 (Escape) 这些更新。或者,您可以生成新的代码建议。

Copilot Inline Chat asking to convert a sort algorithm to use bubble sort

如果您在编辑器中选择了一段代码,Copilot 会将您的问题范围限定到所选内容。

您还可以提出更多探索性问题,这些问题会在您编写和迭代代码时出现,例如“解释这段代码”或“如何添加执行 X 的功能?”。

Copilot Inline Chat asking information about the used sorting algorithm

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

以下示例显示了内联聊天的预览模式。

Copilot Inline Chat preview mode, showing the code changes side-by-side


聊天视图(Chat view)

打开聊天视图

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

Copilot Chat view in the Secondary Side Bar and Explorer view in the Primary Side Bar.

您可以通过按 Ctrl+Alt+I 或在 Copilot Chat 命令中心菜单中选择“打开聊天”来访问聊天视图。

Screenshot of the Copilot Chat menu in the VS Code Command Center, highlighting Open Chat

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

Layout controls in the VS Code title bar, highlighting the Secondary Side Bar toggle.

提示:
您可以随时将聊天视图拖动到其他位置,甚至将其作为编辑器打开。


输入聊天提示

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

Copilot explaining a devcontainer.json file

提示:
在聊天输入框中键入 /help 可获取有关 GitHub Copilot 以及如何与 Copilot Chat 交互的帮助。


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

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

Copilot response containing rich results, such as a file tree with a proposed workspace structure, and a button to create a new workspace

当您继续进行对话时,Copilot 会保留聊天消息和回复的历史记录,并在其回复中提供相关的后续问题或命令。

代码块

根据您的问题,Copilot Chat 可能会在代码块中返回源代码。根据语言扩展,聊天回复中的代码块可能支持 IntelliSense,这使您可以通过将鼠标悬停在方法和符号上来获取有关它们的信息,或者转到它们的定义。

A Copilot Chat code block response.

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

“更多操作 (...)”按钮提供以下选项:插入到新文件和插入到终端 (Ctrl+Alt+Enter)。

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

Copilot Chat code block to list files with Insert into Terminal option visible

提示:
使用“聊天:下一个代码块”(Ctrl+Alt+PageDown) 和“聊天:上一个代码块”(Ctrl+Alt+PageUp) 在代码块之间导航。

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

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

聊天历史记录

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

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

Screenshot of the Chat view with the Show Chats... button highlighted

快速聊天 (Quick Chat)

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

Quick Chat dropdown

按键盘上的 Ctrl+Shift+Alt+L 可调出快速聊天。或者,在 Copilot Chat 命令中心菜单中选择“快速聊天”。

Screenshot of the Copilot Chat menu in the VS Code Command Center

您可以键入问题,使用聊天参与者和斜杠命令限定问题范围,并使用下拉菜单右上角的“在聊天视图中打开”按钮将讨论提升到完整的聊天视图会话。

Quick Chat Open in Chat View button

多轮对话

当您在 Copilot Chat 中提问时,您不会只局限于第一个回复。保持聊天对话打开,并继续迭代并提示 Copilot 改进建议的解决方案。Copilot 同时拥有生成的代码的上下文和您当前的对话历史记录。当您继续提出更多问题时,Copilot 会根据您的要求进一步完善回复。

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

First response from Copilot for a function to calculate Fibonacci numbers

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

Ask Copilot to not use recursion and new result


终端内联聊天

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

要启动终端中的内联聊天,请按 Ctrl+I 快捷键。

Screenshot showing that you can ask complex questions like "list the top 5 largest files in the src dir"

提出命令建议后,使用运行 (Ctrl+Enter) 在终端中运行命令,或使用插入 (Alt+Enter) 将命令插入终端。

或者,您可以在运行命令之前直接在 Copilot 回复中编辑命令,方法是将光标放在回复中,或在 Windows 和 Linux 上按 Ctrl+向下键、Tab、Tab,或在 macOS 上按 Cmd+向下键、Tab、Tab。

聊天智能操作

为了更轻松地使用 Copilot Chat 功能,智能操作已集成到您的 VS Code 流程中,它们根本不需要您编写任何提示。例如,您可以从编辑器上下文菜单或通过快速修复操作访问 Copilot 智能操作。

通过选择一段代码,右键单击并选择 Copilot 来访问智能操作。智能操作具有上下文感知能力,可以帮助您完成常见任务,例如生成文档、修复代码或解释代码。

Editor context menu with the Copilot menu group expanded

最强大的智能操作是 /fix。这是一个相对简单的 TypeScript 计算器,其中出现错误,指出“类型“string”的参数无法分配给类型“number”的参数”。选择闪光图标,然后选择“使用 Copilot 修复”。

Quick fix a type mismatch error by using the Copilot smart action

与 /fix 类似,/doc 智能操作深受用户欢迎。要使用 /doc,请选择一段代码,右键单击,然后选择 Copilot > 生成文档。Copilot 将为您的代码生成文档注释。

Inline Chat /doc results adding JSDoc comment for a TypeScript function

聊天参与者

聊天参与者就像专家一样,拥有他们可以帮助您的专业领域。您可以通过在聊天输入字段中键入“@”,然后键入参与者名称来调用聊天参与者。有几个内置的聊天参与者:

  • @workspace: 了解您工作区中的代码,可以帮助您浏览代码,查找相关的文件或类。
  • @vscode: 了解 VS Code 编辑器本身的命令和功能,可以帮助您使用它们。
  • @terminal: 了解集成终端 shell 及其内容。
  • @github: 了解您的 GitHub 存储库、问题、拉取请求和主题,还可以使用 Bing API 执行网络搜索。

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

以下是一些在 Visual Studio Marketplace 中贡献聊天参与者到 VS Code 聊天视图的扩展程序示例:


@workspace

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

Asking the @workspace chat participant about where a URL is specified in an Express app

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

“@workspace 通知是如何安排的?”

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

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

@vscode

VS Code 的自定义方式多种多样,人们在发现一些隐藏的功能时会感到惊喜。为了帮助您释放 VS Code 的全部功能,我们创建了 @vscode。

此聊天参与者了解 VS Code 的所有信息,可以帮助您弥合自然语言与 VS Code 命令和自定义之间的差距。@vscode 在内部使用可访问所有设置和命令索引的工具,我们正在添加一个工具,以便此聊天参与者也可以使用 VS Code 文档。现在,您可以提出含糊不清的问题,例如:

“@vscode vscode 模拟打开文件时那个东西的名字?以及如何禁用它?”

“@vscode 如何更改我的 VS Code 颜色?”

Asking @vscode how to change the VS Code colors

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

Toggle the minimap in the editor with the /runCommand slash command in Copilot Chat.


@terminal

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

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

Quick Chat with @terminal #terminalLastCommand and Copilot's answer

注意:
终端不会自动拉入工作区上下文,因此有关工作区的问题可能需要一些时间。

@github

使用 @github,您可以询问有关您的 GitHub 存储库以及您的提交、问题、拉取请求等等的问题。以下是如何使用 @github 参与者的示例:

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

扩展贡献的聊天参与者

您可以从 Visual Studio Code Marketplace 或 GitHub Marketplace 安装其他聊天参与者。

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

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

注意:
为了保护您的隐私,除非您选择“允许所有工作区”,否则您与 GitHub App 的聊天参与者共享编辑器上下文的偏好设置将按每个工作区保存。

斜杠命令

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

例如,@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 Chat 的性能

当 Copilot 拥有足够的上下文来了解您正在做什么以及您需要什么帮助时,它的效果最佳。就像您在请求同事帮助完成特定编程任务时会向同事提供上下文一样,您也可以对 Copilot 做同样的事情。

您可以通过使用回复右上角的向上和向下拇指图标为回复点赞或点踩来帮助 Copilot 提供更好的答案。这会向 Copilot 提供反馈,说明它在多大程度上帮助您完成了您的场景,以便它将来可以更好地帮助您。

使用聊天变量

通过在聊天提示中使用聊天变量,您可以更具体地说明您提供给 Copilot 的上下文。例如,提示“使用了哪种排序算法 #selection”会将聊天请求集中在所选代码片段上。

使用聊天参与者和命令

聊天参与者(例如 @workspace)可能在其内部关联了上下文。例如,@vscode 了解 VS Code 设置及其 API。当您在聊天提示中包含聊天参与者时,您本质上是在向提示添加上下文。同样,通过使用斜杠命令,您可以进一步集中聊天请求的意图。

对话历史记录

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

例如,当您首先询问“TypeScript 中的数字数据类型是什么?”,然后询问“它也可以用于十进制数吗?”时,Copilot 知道您仍在引用数字数据类型。

Chat view with multiple prompts, where Copilot understands that 'it' refers to the first prompt.

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

Chat view with multiple prompts, highlighting the 'x' control to delete a chat prompt and response.

您可以使用命令面板中的“聊天:导出聊天...”命令将聊天会话的所有提示和回复导出到 JSON 文件中。

内联聊天中的上下文

如果您正在使用内联聊天,并且在编辑器中选择了代码,则 Copilot 会将您的问题范围限定到所选内容。

忽略文件

当您使用 @workspace 提出与 VS Code 工作区相关的疑问时,您可以使用 .gitignore 文件明确忽略工作区中的特定文件。@workspace 在决定要编入工作区索引的文件时会遵守 .gitignore。

使用语音交互

借助 VS Code 中由 VS Code 语音扩展提供的语音控制功能,您可以使用语音启动聊天对话:

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

隐私和透明度

我们强调负责任地使用 AI,尤其是在涉及源代码时。默认情况下启用的 inlineChat.acceptedOrDiscardBeforeSave 设置会在保存 Copilot 生成的代码之前询问您是否确认。

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

Inline Chat save consent message.

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

Modal window asking for additional authentication for a private repository.


常见问题解答

如何选择内联聊天、聊天视图和快速聊天?

下表比较了每个界面的功能。

功能聊天视图内联聊天快速聊天
询问一般技术问题
接收代码建议
在编辑器中查看代码建议
多个文件的代码建议
生成新项目
附加上下文
使用聊天参与者
使用命令✅*
聊天历史记录

* 内联聊天中仅提供有限的命令集