现已发布!阅读关于 11 月新增功能和修复的内容。

在聊天中使用工具

工具通过为完成特定任务(如搜索代码、运行命令、获取网页内容或调用 API)提供专业功能来扩展 Visual Studio Code 中的聊天功能。VS Code 支持三种类型的工具:内置工具、模型上下文协议 (MCP) 工具和扩展工具。

本文档介绍了 VS Code 中可用的不同工具类型、如何在聊天提示中使用它们,以及如何管理工具调用和审批。

工具类型

VS Code 在聊天中支持三种工具供您使用

内置工具

VS Code 提供了一套全面的内置工具,这些工具可在聊天中自动使用。这些工具涵盖了常见的开发任务,并针对在工作区内工作进行了优化。

内置工具无需任何安装或配置,只要您开始使用聊天即可使用。

有关内置工具及其描述的完整列表,请参阅 聊天工具参考

MCP 工具

模型上下文协议 (MCP) 是一种开放标准,它使 AI 模型能够通过统一的接口使用外部工具和服务。MCP 服务器提供工具,您可以将这些工具添加到 VS Code 以扩展聊天的额外功能。

在使用 MCP 工具进行聊天之前,您需要安装并配置 MCP 服务器。MCP 服务器可以在您的计算机本地运行,也可以远程托管。

详细了解 在 VS Code 中配置 MCP 服务器

扩展工具

VS Code 扩展可以贡献工具,这些工具与编辑器深度集成。扩展工具使用语言模型工具 API 提供专业功能,同时访问 VS Code 扩展 API 的全部功能。

在安装了提供扩展工具的扩展后,这些扩展工具便会自动可用。用户除了安装扩展本身外,无需进行单独的安装或配置。

对于希望创建扩展工具的开发者,请参阅 语言模型工具 API 指南

为聊天启用工具

在聊天中使用工具之前,您需要在“聊天”视图中启用它们。您可以通过使用工具选择器来逐个请求启用或禁用工具。您可以通过 安装 MCP 服务器扩展(提供工具)来添加更多工具。

提示

仅选择与您的提示相关的工具,以提高结果质量。

访问工具选择器

  1. 打开“聊天”视图,然后从代理选择器中选择“**代理**”。

  2. 在聊天输入字段中选择“**配置工具**”按钮。

    Screenshot showing the Chat view, highlighting the Configure Tools button in the chat input.

  3. 选择或取消选择工具以控制当前请求可用的工具。

    使用搜索框过滤工具列表。

当您使用 提示文件自定义代理 来自定义聊天时,您可以指定为给定提示或模式可用的工具。详细了解 工具列表优先级顺序

在提示中使用工具

在使用 代理时,代理会根据您的提示和请求的上下文,自动确定要从启用的工具中选择哪些工具。代理会自动选择并按需调用相关工具以完成任务。

您也可以通过输入 # 后跟工具名称来显式引用提示中的工具。当您希望确保使用特定工具时,此方法非常有用。在聊天输入字段中输入 # 可查看可用工具列表,包括内置工具、已安装服务器提供的 MCP 工具、扩展工具和工具集。

显式工具引用的示例

  • "总结 #fetch https://vscode.js.cn/updates 的内容"
  • "Next.js 中的路由是如何工作的? #githubRepo vercel/next.js"
  • "修复 #problems 中的问题"
  • "解释身份验证流程 #codebase"

某些工具可以直接在提示中接受参数。例如,#fetch 需要一个 URL,而 #githubRepo 需要一个仓库名称。

提示

默认情况下,工具调用的详细信息在聊天会话中是折叠的。您可以通过选择聊天中的工具摘要行来展开它们,或者使用 chat.agent.thinking.collapsedTools 设置(实验性)来更改默认行为。

工具审批

某些工具在运行前需要您的批准。这是一项安全措施,因为工具可以执行修改文件、环境的操作,或尝试通过恶意工具输出来进行提示注入攻击。

当工具需要批准时,会出现一个显示工具详细信息的确认对话框。在批准工具之前,请仔细查看信息。您可以批准工具单次使用、当前会话、当前工作区或所有未来调用的使用。

Screenshot of a tool confirmation dialog showing tool details and approval options.

工具和代理操作可能会导致文件修改。了解如何防止在工作区中 意外编辑敏感文件

重要

在批准工具之前,请务必仔细检查工具参数,特别是对于修改文件、运行命令或访问外部服务的工具。有关在 VS Code 中使用 AI 的 安全注意事项

启用或禁用工具自动审批(实验性)

默认情况下,您可以选择自动批准任何工具。为防止意外批准,您可以使用 chat.tools.eligibleForAutoApproval 设置来禁用对特定工具的自动批准。将该值设置为 false 以始终要求手动批准该工具。

组织也可以使用设备管理策略来强制对特定工具进行手动批准。详细信息请参阅 企业文档

URL 审批

当工具尝试访问 URL(例如使用 fetch 工具)时,会采用两步审批流程来保护您免受恶意或意外内容的侵害。VS Code 会在聊天视图中显示一个包含 URL 详细信息的确认对话框供您审阅。

  • 预审批:批准对 URL 的请求

    此步骤可确保您信任正在联系的域,并可防止敏感数据发送到不受信任的站点。

    Screenshot of a URL approval dialog showing URL details and approval options.

    您可以选择一次性批准或自动批准将来对特定 URL 或域的请求。选择自动批准不会影响审查结果的必要性。当您选择“**允许请求至**”时,可以选择配置 URL 或域的预审批和后审批。

    注意

    预审批尊重 “受信任的域”功能。如果某个域列在那里,您将被自动批准向该域发出请求,并推迟响应审查步骤。

  • 后审批:批准从 URL 获取的响应内容

    此步骤可确保在将获取的内容添加到聊天或传递给其他工具之前进行审查,从而防止潜在的提示注入攻击。

    例如,您可能批准从某个知名网站(如 GitHub.com)获取内容的请求。但由于内容(如问题描述或评论)是用户生成的,其中可能包含可能操纵模型行为的有害内容。

    您可以选择一次性批准或自动批准将来来自特定 URL 或域的响应。

    重要

    后审批步骤与“受信任的域”功能无关,始终需要您的审查。这是一项安全措施,用于防止您信任的域上出现不受信任的内容问题。

chat.tools.urls.autoApprove 设置用于存储您的自动审批 URL 模式。设置值为布尔值,用于启用或禁用请求和响应的自动审批,或者为具有 approveRequestapproveResponse 属性的对象,以便进行精细控制。您可以使用精确 URL、glob 模式或通配符。

URL 自动审批示例

{
"chat.tools.urls.autoApprove": {
    "https://www.example.com": false,
    "https://*.contoso.com/*": true,
    "https://example.com/api/*": {
        "approveRequest": true,
        "approveResponse": false
    }
}

重置工具确认

要清除所有已保存的工具审批,请使用命令面板中的“**聊天:重置工具确认**”命令(⇧⌘P (Windows, Linux Ctrl+Shift+P))。

编辑工具参数

您可以在工具运行前审查和编辑输入参数

  1. 当工具确认对话框出现时,选择工具名称旁边的箭头以展开其详细信息。

  2. 根据需要编辑任何工具输入参数。

  3. 选择“**允许**”以使用修改后的参数运行工具。

终端命令

代理可能会在其工作流程中使用终端命令来完成任务。当代理决定运行终端命令时,它会使用内置终端工具在 VS Code 中的集成终端中执行它们。

在聊天会话中,代理会显示它运行的命令。您可以选择命令旁边的“**显示输出**”(>)以在聊天中内联查看命令的输出。您还可以通过选择“**显示终端**”在集成终端中查看完整输出。

Screenshot showing terminal command output in chat.

使用实验性的 chat.tools.terminal.outputLocation 设置来配置终端命令输出显示的位置:在聊天中内联显示,或在集成终端中显示。

在终端窗格中,您可以查看代理在聊天会话中使用的终端列表。您还可以通过终端列表中终端旁边的聊天图标来区分代理终端。

Screenshot showing the integrated terminal with multiple agent terminals.

自动批准终端命令

您可以使用 chat.tools.terminal.autoApprove 设置来配置要自动批准的终端命令。您可以指定允许和拒绝的命令。

  • 将命令设置为 true 以自动批准它们
  • 将命令设置为 false 以始终要求批准
  • 使用正则表达式,通过将模式包装在 / 字符中

例如

{
  // Allow the `mkdir` command
  "mkdir": true,
  // Allow `git status` and commands starting with `git show`
  "/^git (status|show\\b.*)$/": true,

  // Block the `del` command
  "del": false,
  // Block any command containing "dangerous"
  "/dangerous/": false
}

默认情况下,模式会针对单个子命令进行匹配。要自动批准一个命令,所有子命令都必须匹配一个 true 条目,并且不能匹配一个 false 条目。

对于高级场景,可以使用带有 matchCommandLine 属性的对象语法来匹配整个命令行而不是单个子命令。

相关设置

注意

自动批准终端命令提供的是“*尽力而为*”的保护,并假设代理没有恶意行为。启用终端自动审批时,保护自己免受提示注入攻击非常重要,因为某些命令可能会绕过检测。以下是一些检测可能失效的示例:

  • VS Code 使用 PowerShell 和 bash 的 tree sitter 语法来提取子命令,因此如果这些语法无法检测到模式,则不会被识别。
  • VS Code 使用 bash 语法,因为它没有 zsh 或 fish 语法,所以某些子命令无法被检测到。
  • 文件写入检测目前是有限的,因此可能可以通过终端向文件写入,而使用文件编辑代理工具则无法做到这一点。

使用工具集组合工具

工具集是一组您可以作为单个实体在提示中引用的工具。工具集有助于您组织相关工具,并使它们更易于在聊天提示、提示文件自定义聊天代理中使用。一些内置工具属于预定义的工具集,例如 #edit#search

创建工具集

创建工具集

  1. 从命令面板运行“**聊天:配置工具集**”命令,然后选择“**创建新的工具集文件**”。

    或者,在“聊天”视图 > “**工具集**” > “**创建新的工具集文件**”中选择“**配置聊天**”。

    Screenshot showing the Chat view and Configure Chat menu, highlighting the Configure Chat button.

  2. 在打开的 .jsonc 文件中定义您的工具集。

    工具集具有以下结构

    {
      "reader": {
        "tools": ["changes", "codebase", "problems", "usages"],
        "description": "Tools for reading and gathering context",
        "icon": "book"
      }
    }
    

    工具集属性

    • tools:工具名称数组(内置工具、MCP 工具或扩展工具)
    • description:显示在工具选择器中的简短描述
    • icon:工具集的图标(请参阅 产品图标参考

使用工具集

通过输入 # 后跟工具集名称来在您的提示中引用工具集

  • "分析代码库以查找安全问题 #reader"
  • "数据库连接字符串定义在哪里? #search"

在工具选择器中,工具集作为相关工具的可折叠组可用。您可以选择或取消选择整个工具集,以快速启用或禁用多个相关工具。

常见问题

我如何知道哪些工具可用?

在聊天输入字段中输入 # 可查看所有可用工具的列表。您还可以使用聊天中的工具选择器来查看和管理活动工具列表。

我收到了一个错误,说“每次请求最多只能有 128 个工具。”

一次聊天请求最多可以启用 128 个工具。如果您看到关于超出每次请求 128 个工具的错误:

  • 打开“聊天”视图中的工具选择器,并取消选择一些工具或整个 MCP 服务器以减少数量。

  • 或者,使用 github.copilot.chat.virtualTools.threshold 设置启用虚拟工具,以自动管理大型工具集。

为什么代理不使用命令提示符作为终端 shell?

代理使用您配置为终端默认值的 shell,除了 cmd。这是因为命令提示符不支持 shell 集成,这意味着代理对终端内部发生的情况的可见性非常有限。代理需要依赖超时并观察终端是否空闲才能继续,而不是直接获取命令何时运行或何时完成的信号。这会导致体验缓慢且不稳定。

您仍然可以使用 chat.tools.terminal.terminalProfile.windows 设置配置代理使用命令提示符,但这将比使用 PowerShell 带来较差的体验。

"chat.tools.terminal.terminalProfile.windows": {
  "path": "C:\\WINDOWS\\System32\\cmd.exe"
}

我可以自动批准所有工具和终端命令吗?

注意

此设置将禁用所有手动审批,包括潜在的破坏性操作。它消除了关键的安全保护,并使攻击者更容易危害计算机。只有在您了解其影响的情况下才启用此设置。有关更多详细信息,请参阅 安全文档

要允许所有工具和终端命令在不提示用户确认的情况下运行,请启用 chat.tools.global.autoApprove 设置。此设置适用于您所有工作区!

工具和聊天参与者之间有什么区别?

聊天参与者是专门的助手,它们使您能够在聊天中提出领域特定的问题。您可以将聊天参与者想象成一个领域专家,您将聊天请求交给它,然后它会处理其余的事情。

工具作为代理流程的一部分被调用,以贡献和执行特定任务。您可以在一个聊天请求中包含多个工具,但一次只能激活一个聊天参与者。

我可以创建自己的工具吗?

是的。您可以通过两种方式创建工具:

© . This site is unofficial and not affiliated with Microsoft.