尝试以扩展 VS Code 中的代理模式!

在 VS Code 中使用聊天

在 Visual Studio Code 中使用聊天功能,通过自然语言提问有关代码库的问题或在整个项目中进行编辑。聊天功能可以在不同模式下运行,针对您的使用场景进行了优化,从提问到进行多文件编辑或启动自主编码工作流。

您可能需要在 VS Code 中使用聊天功能,当您需要:

  • 理解代码 - “解释此身份验证中间件的工作原理”
  • 调试问题 - “为什么此循环中会出现空引用?”
  • 获取代码建议 - “向我展示如何在 Python 中实现二叉搜索树”
  • 优化性能 - “帮助我提高此数据库查询的效率”
  • 学习最佳实践 - “异步函数中处理错误的推荐方法是什么?”
  • 获取 VS Code 提示 - “如何自定义键盘快捷方式?”

先决条件

在 VS Code 中访问聊天

您可以在 VS Code 中以不同的方式使用自然语言聊天功能,每种方式都针对特定的使用场景和任务进行了优化。

体验 使用场景 用户体验
聊天视图
⌃⌘I (Windows、Linux Ctrl+Alt+I)
在侧边专用视图中进行持续的多轮聊天对话。在不同的聊天模式之间切换,以提问、跨文件进行代码编辑或启动自主编码工作流。 Screenshot of the Chat view
行内聊天
⌘I (Windows、Linux Ctrl+I)
直接从编辑器(编辑器行内聊天)或集成终端(终端行内聊天)开始聊天对话,以获取即时建议。 Screenshot of the Inline chat
快速聊天
⇧⌥⌘L (Windows、Linux Ctrl+Shift+Alt+L)
快速提问并回到您正在做的事情。 Screenshot of the Quick Chat

通过使用相应的键盘快捷方式或通过 VS Code 标题栏中的 Copilot 菜单访问每种聊天体验。

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

选择聊天模式

聊天模式是预定义的配置,用于在 VS Code 中针对特定任务自定义聊天,例如提问、进行代码编辑或执行自主编码任务。VS Code 附带三种内置聊天模式:提问编辑代理。您还可以为特定场景定义自己的聊天模式,例如规划新功能或研究实现选项。

要在聊天模式之间切换,请打开聊天视图 (⌃⌘I (Windows、Linux Ctrl+Alt+I)),然后从聊天模式下拉列表中选择所需的模式。

Screenshot showing the Chat view, highlighting the chat mode dropdown list.

了解更多关于 VS Code 中的聊天模式

更改语言模型

VS Code 提供了不同的内置语言模型供选择。有些模型针对快速编码任务进行了优化,而另一些则更适合较慢的规划和推理任务。使用聊天输入字段中的模型选择器来更改 Copilot 用于生成响应的模型。

Screenshot of the chat model picker in the Chat view, showing a dropdown list of available models.

您还可以添加来自其他模型提供商的模型(预览版)并在聊天中使用它们。获取有关如何使用其他提供商的模型的更多详细信息。

注意

可用模型列表可能因您的 Copilot 订阅而异,并可能随时间而变化。有关可用语言模型的更多信息,请参阅 GitHub Copilot 文档。

提交聊天提示

在 VS Code 中使用自然语言发起聊天请求。根据聊天模式,您可以提问有关代码库的问题、获取代码建议,或者在项目中的多个文件中进行代码编辑并调用专用工具。

聊天响应可能包含富内容组合,例如 Markdown 文本、代码块、按钮、文件树等等。

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

为了获得更相关的响应或引用工作区中的特定文件或工件(例如测试失败或终端输出),请通过 #-提及相关上下文项来为您的聊天提示添加上下文

添加聊天上下文

VS Code 会根据您的自然语言提示尝试确定聊天请求的意图和范围。为了获得更相关的响应,请在聊天提示中提供额外的上下文,例如文件、测试结果、终端输出等。

使用聊天视图中的添加上下文按钮或键入 #-提及项来为您的聊天提示添加上下文。例如,#codebase 指代整个代码库,或者 #<file | folder | symbol> 指代工作区中的特定文件、文件夹或符号。在聊天输入字段中键入 # 以查看上下文项列表。

Screenshot of the Chat view with the context menu open

您还可以通过键入 # 后跟工具名称来直接在提示中引用代理模式工具。您可以在所有聊天模式(提问、编辑和代理模式)中执行此操作。例如,使用 #fetch 工具将网页内容作为上下文添加到您的聊天提示中,或使用 #githubRepo 在 GitHub 存储库中执行代码搜索。

获取有关为聊天提示添加上下文的更多详细信息。

提示示例

询问一般技术主题
  • “什么是链表?”
  • “十大流行的 Web 框架”
理解代码库
  • “解释 #codebase 中身份验证的工作原理”
  • “数据库连接字符串在哪里配置?#codebase”
  • “如何构建此 #codebase?”
  • “#getUser 在哪里使用?#usages”
为您的应用程序添加新功能
  • “创建一个关于页面并将其包含在导航栏中 #codebase”
  • “添加一个用于更新地址信息的新 API 路由 #codebase”
  • “添加一个登录按钮并根据 #styles.css 设置其样式”
修复工作区中的问题
  • “修复 #problems 中的问题”
  • “修复失败的测试 #testFailure”
引用 Web 内容
  • “如何在 React 18 中使用 'useState' 钩子?#fetch https://18.reactjs.ac.cn/reference/react/useState#usage”
  • “构建一个 API 终结点来获取地址信息,使用 #githubRepo contoso/api-templates 中的模板”

有关更多提示示例,请参阅 GitHub 文档中的Copilot 聊天手册

提示

在聊天输入字段中键入 /help 以获取有关 Copilot 以及如何与聊天交互的帮助。

视觉功能

聊天支持视觉功能,这意味着您可以将图像作为上下文附加到您的聊天提示中并询问有关它的问题。例如,附加一段代码的屏幕截图并要求解释它,或者附加一个 UI 草图并要求代理模式实现它。

提示

您可以将图像从网页浏览器拖放到聊天视图中以将其添加为上下文。

聊天历史记录

当您在聊天会话中迭代并发送多个聊天提示时,VS Code 会将聊天提示和响应的历史记录用作当前聊天提示的上下文。这意味着您可以提出后续问题或澄清您之前的问题,而无需重复上下文。例如,您可以问“与...有何不同”、“现在添加一个测试用例”、“解释更详细一些”等等。

任何时候,您都可以使用聊天视图中的新建聊天 (+) 按钮 (⌘N (Windows、Linux Ctrl+N)) 创建新的聊天会话。如果您想切换到不同的主题并避免之前的上下文和历史记录,这会很有用。

要查看聊天会话的历史记录,请在聊天视图中选择显示聊天...按钮,或使用命令面板中的聊天:显示聊天...命令。选择一个历史条目以在聊天视图中打开该聊天会话并继续对话。

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

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

编辑聊天请求(实验性)

注意

从 VS Code 1.102 版本开始提供编辑聊天请求的功能,目前是一个实验性功能。

您可以在当前活动的聊天会话中编辑之前的聊天请求。如果您想完善提示或纠正错误,这会很有用。当您编辑之前的聊天请求时,会执行以下步骤:

  1. 编辑后的请求以及所有后续请求和响应都会从对话历史记录中删除。
  2. 这些请求所做的任何编辑都将恢复到请求执行之前的状态。
  3. 编辑后的请求将添加到对话历史记录中,并提交给语言模型以获取新的响应。

编辑聊天请求等同于撤销请求,然后使用编辑后的提示提交新的请求。

Screenshot of the Chat view with a chat request being edited in-place.

有多种编辑聊天请求的方式,通过 chat.editRequests 设置进行配置:

  • inline:在聊天视图中选择请求,使其可以原地编辑。使用 Escape 退出编辑模式。
  • hover:将鼠标悬停在聊天请求上并选择编辑图标(铅笔),使其可以原地编辑。使用 Escape 退出编辑模式。
  • input:将鼠标悬停在聊天请求上并选择编辑图标(铅笔),以在聊天输入字段中编辑请求。
  • none:禁用聊天视图中聊天请求的编辑功能。

撤销聊天请求

您可以在当前活动的聊天会话中撤销(撤消)聊天请求。当您撤销聊天请求时,也会从对话历史记录中删除相应的响应。

如果您想从该会话的对话历史记录中删除特定的提示和响应,撤销请求会很有用。例如,如果您注意到语言模型没有提供相关响应或正在走向不希望的方向。

您有两种选项可以撤销聊天请求:

  • 撤消上次聊天请求:使用聊天视图工具栏中的撤消上次请求按钮。

    Screenshot of the Chat view with the Undo Last Request button highlighted.

  • 撤消特定的聊天请求:将鼠标悬停在聊天视图中的聊天请求上,然后选择请求旁边的撤消请求(删除) (x) 按钮(或按 ⌘Backspace (Windows、Linux Delete))。当您撤消一个请求时,它也会撤消聊天会话中所有后续的请求和响应。

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

在编辑器选项卡或单独窗口中打开聊天

您可以将聊天会话作为单独的编辑器选项卡打开,甚至作为单独的浮动窗口打开。此功能使您能够同时打开多个聊天会话。

在聊天视图中,选择右上角的 ... 图标,然后选择在编辑器中打开聊天在新窗口中打开聊天

Screenshot of the Chat view, highlighting the three-dot menu that contains the Open in Editor and Open in New Window options.

以下屏幕截图显示了在浮动窗口中运行的聊天视图:

Screenshot of the Chat view, highlighting the three-dot menu that contains the Open in Editor and Open in New Window options. The desktop shows a floating window with a chat session.

默认情况下,聊天会话以紧凑模式打开,该模式会隐藏标题栏和其他 UI 元素。在浮动窗口标题栏中选择紧凑模式图标,以在紧凑模式和正常模式之间切换。

(可选)启用始终置顶模式,以始终将聊天视图置于其他窗口的顶部。

了解更多关于 VS Code 中的浮动窗口

使用语音交互

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

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

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

聊天调试视图

聊天调试视图是一个专用视图,您可以在其中查看 AI 请求和响应的详细信息。对于每个聊天请求,您都可以看到系统提示、用户提示以及发送到语言模型的上下文的详细信息。您可以查看语言模型的详细响应,以及作为聊天请求一部分调用的工具的响应。

要打开聊天调试视图,请从命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 运行开发人员:显示聊天调试视图命令。

Screenshot of the Chat Debug view, showing the details of a chat request and response.

从命令行启动聊天

您可以使用 VS Code CLI 中的 chat 子命令直接从命令行启动聊天会话。这使您能够在当前工作目录中打开一个带有所提供提示的聊天会话。

例如,以下命令将为当前目录打开聊天并询问“查找并修复所有未类型化的变量”

code chat Find and fix all untyped variables

chat 子命令具有以下命令行选项:

  • -m, --mode <mode>:用于聊天会话的聊天模式。可用选项:ask(提问)、edit(编辑)、agent(代理),或自定义模式的标识符。默认为 agent
  • -a, --add-file <path>:将文件作为上下文添加到聊天会话。
  • --maximize:最大化聊天会话视图。
  • -r, --reuse-window:将上次活动的窗口用于聊天会话。
  • -n, --new-window:为聊天会话打开一个空窗口。

chat 子命令还支持通过在命令末尾传递 -stdin 管道输入。例如:

python app.py | code chat why does it fail -

隐私与透明度

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

Modal window asking for additional authentication for a private repository.

了解更多关于 GitHub Copilot 信任中心的安全、隐私和透明度信息。

常见问题

我如何在不同的聊天模式之间进行选择?

不同的聊天模式针对不同的使用场景进行了优化:

  • 使用编辑器行内聊天直接在活动编辑器中提问或进行编辑。这对于进行代码更改或提问与活动文件相关的问题很有用。

  • 使用提问模式来提问有关代码库或技术概念的问题。响应可能包含代码建议,您可以手动将其单独应用于代码库。更改不会自动应用于您的代码库。

  • 使用编辑模式根据您的聊天提示直接在代码库中的多个文件上应用编辑。您为提示提供相关上下文和文件。

  • 使用代理模式启动自主编码工作流,AI 在其中自主确定相关上下文和文件,确定需要执行哪些任务来完成请求。然后,它独立迭代以实现所需结果,并修复出现的任何问题。代理模式可以调用扩展或 MCP 服务器中的工具来执行专业任务,例如运行终端命令、验证测试用例或访问 API。

其他资源

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

或者在 YouTube 上查看 VS Code Copilot 系列,您可以在其中找到更多入门内容和特定于编程的视频,了解如何将 Copilot 与 PythonC#JavaPowerShellC++ 等一起使用。

后续步骤