在聊天中使用工具

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

有关工具类型的背景信息以及工具如何在智能体循环中工作,请参阅 工具概念

本文介绍如何在聊天提示词中使用工具以及如何管理工具调用。若要控制智能体如何请求批准工具调用及其拥有的自主权,请参阅 管理批准和权限

为聊天启用工具

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

提示

仅选择与你的提示词相关的工具,以改善结果。

若要访问工具选择器

  1. 打开“聊天”视图,并从智能体选择器中选择 Agent

  2. 选择聊天输入框中的 Configure Tools 按钮。

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

  3. 选择或取消选择工具,以控制哪些工具可用于当前请求。

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

当你使用提示词文件自定义智能体自定义聊天时,你可以指定哪些工具可用于给定的提示词或模式。了解有关工具列表优先级顺序的更多信息。

在提示词中使用工具

使用智能体时,智能体会根据你的提示词和请求的上下文,自动从已启用的工具中确定要使用的工具。智能体会根据需要自主选择和调用相关工具来完成任务。

你还可以在提示词中显式引用工具,方法是键入 #,后跟工具名称。当你想要确保使用特定工具时,这非常有用。在聊天输入框中键入 # 即可查看可用工具的列表,包括内置工具、来自已安装服务器的 MCP 工具、扩展工具和工具集。

显式工具引用的示例

  • "Node.js 的最新版本是什么 #web"
  • "Next.js 中的路由是如何工作的? #web"
  • "修复 #problems 中的问题"
  • "解释身份验证流程 #codebase"
提示

默认情况下,工具调用详细信息在聊天对话中是折叠的。你可以通过在聊天中选择工具摘要行来展开它们,或者通过 chat.agent.thinking.collapsedTools 在 VS Code 中打开 在 VS Code Insiders 中打开 (实验性功能)更改分组行为:使用 off 保持工具调用分离,使用 withThinking 在可用时与思考过程一起分组,或者使用 always 始终分组。当 chat.agent.thinkingStyle 在 VS Code 中打开 在 VS Code Insiders 中打开 collapsed 时,推理和分组的工具调用可以显示在单独的可折叠部分中。

编辑工具参数

你可以在工具运行之前检查和编辑输入参数

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

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

  3. 选择 Allow 以使用修改后的参数运行工具。

使用工具集组合工具

工具集是一组工具的集合,你可以在提示词中将其作为单个实体进行引用。工具集可帮助你组织相关工具,并使它们在聊天提示词、提示词文件自定义聊天智能体中更易于使用。某些内置工具是预定义工具集的一部分,例如 #edit#search

创建工具集

若要创建工具集

  1. 从命令面板运行 Chat: Configure Tool Sets 命令,并选择 Create new tool sets file

    或者,选择“聊天”视图中的省略号(...)菜单,选择 Tool Sets,然后选择 Create new tool sets file

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

    工具集具有以下结构

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

    工具集属性

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

使用工具集

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

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

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

运行终端命令

在所有内置工具中,终端工具是最常用的工具之一。智能体在其工作流程中使用它来运行命令,例如安装依赖项、运行构建或执行测试。由于终端命令可能会更改你的环境,因此 VS Code 在前面描述的批准行为的基础上,提供了用于审查、运行和监视它们的额外控制项。

当智能体决定运行命令时,它会使用内置的终端工具在 VS Code 的集成终端中执行该命令。

在聊天对话中,智能体会显示它运行的命令。你可以通过选择命令旁边的 Show Output>)在聊天中内联查看命令的输出。你还可以通过选择 Show Terminal 在集成终端中查看完整输出。

Screenshot showing terminal command output in chat.

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

在后台继续终端命令

当智能体运行长时间运行的终端命令(例如启动开发服务器或在监视模式下运行构建)时,你可以将该命令推送到后台。这允许智能体继续处理其他任务,而无需等待命令完成。

在命令运行期间,聊天对话中的终端命令旁会显示一个 Continue in Background 按钮。选择此按钮可将命令移至后台。命令继续运行,智能体可以稍后检查其输出或将终端用于其他任务。

智能体还可以在运行终端命令时指定超时时间。当到达超时时间时,智能体会停止等待命令并返回迄今收集到的输出。使用 chat.tools.terminal.enforceTimeoutFromModel 在 VS Code 中打开 在 VS Code Insiders 中打开 设置来控制是否强制执行智能体指定的超时值。

智能体还可以选择直接在后台运行命令,而无需用户交互。你未显示的后台终端在其命令完成时会自动清理,这可以防止在长时间会话中累积陈旧的终端。若要显示后台终端并在命令完成后保持其打开状态,请选择聊天工具调用标头中的 Show 链接。即使清理了终端,终端输出在聊天对话中仍然可见。

提示

若要自动批准终端命令或限制智能体命令的文件系统和网络访问权限,请参阅 管理批准和权限

常见问题

如何知道哪些工具可用?

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

我收到了错误消息:“每个请求不能拥有超过 128 个工具。”

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

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

  • 或者,通过 github.copilot.chat.virtualTools.threshold 在 VS Code 中打开 在 VS Code Insiders 中打开 设置启用虚拟工具,以自动管理大型工具集。

为什么智能体没有使用我配置的终端 Shell?

智能体使用你配置为终端默认值的 Shell,Windows 上的 cmd(命令提示符)和 macOS/Linux 上的 sh 除外。这是因为这些 Shell 不支持Shell 集成,这意味着智能体对终端内部发生的事情的可见性非常有限。智能体无法直接获得命令正在运行或运行完成的信号,而是需要依赖超时和监视终端空闲来继续。这会导致体验缓慢且不稳定。

你仍然可以使用终端配置文件设置将智能体配置为使用这些 Shell,但这会导致与在 Windows 上使用 PowerShell 或在 macOS/Linux 上使用 bash/zsh 相比较差的体验。

  • chat.tools.terminal.terminalProfile.windows 在 VS Code 中打开 在 VS Code Insiders 中打开 - 覆盖 Windows 上的 Shell
  • chat.tools.terminal.terminalProfile.osx 在 VS Code 中打开 在 VS Code Insiders 中打开 - 覆盖 macOS 上的 Shell
  • chat.tools.terminal.terminalProfile.linux 在 VS Code 中打开 在 VS Code Insiders 中打开 - 覆盖 Linux 上的 Shell
我可以创建自己的工具吗?

可以。你可以通过两种方式创建工具

English 한국어 中文(简体) 中文(繁體)
© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.