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

在聊天中使用工具

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

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

工具类型

VS Code 支持三种可在聊天中使用的工具类型

内置工具

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

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

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

MCP 工具

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

您需要先安装和配置 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 工具、扩展工具和工具集。

明确工具引用的示例

  • "Summarize the content from #fetch https://vscode.js.cn/updates"
  • "How does routing work in Next.js? #githubRepo vercel/next.js"
  • "Fix the issues in #problems"
  • "Explain the authentication flow #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. 当出现工具确认对话框时,选择工具名称旁边的 V 形符号以展开其详细信息。

  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: 工具集的图标(请参阅产品图标参考

使用工具集

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

  • "Analyze the codebase for security issues #reader"
  • "Where is the DB connection string defined? #search"

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

常见问题

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

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

我收到一条错误消息,显示“每个请求不能有超过 128 个工具。”

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

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

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

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

代理使用您配置为终端默认 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.