Skip to content

Claude 开发者平台推出高级工具使用功能

发布日期: 2025年11月24日

作者: Bin Wu 撰稿,Adam Jones、Artur Renault、Henry Tay、Jake Noble、Noah Picard、Sam Jiang 及 Claude 开发者平台团队参与贡献。


概述

本文介绍了 Claude 开发者平台的三项新 Beta 功能,使 Claude 能够"动态地发现、学习和执行工具"。这些功能解决了构建 AI Agent 时面临的一个核心挑战:如何在可能涉及数千个工具的场景下工作,同时不耗尽 Context Window。

文中描绘的愿景是:Agent 能够在庞大的工具库中无缝运作——IDE 助手集成 git、文件操作、包管理器、测试和部署;运维协调器连接 Slack、GitHub、Google Drive、Jira、数据库和 MCP 服务器。

三项功能

1. Tool Search Tool(工具搜索工具)

问题: 预先加载所有工具定义会消耗大量 Context。一个包含五个服务器(GitHub、Slack、Sentry、Grafana、Splunk)的配置,在对话开始前就会占用约 55K Token(涵盖 58 个工具)。在 Anthropic 内部,他们曾见过工具定义在优化前消耗 134K Token 的情况。除了成本问题,最常见的故障是当工具名称相似时,选择了错误的工具或传递了错误的参数。

解决方案: Tool Search Tool 支持按需发现,而非预先加载所有内容。你将工具标记为 defer_loading: true,初始时只加载 Tool Search Tool 本身(约 500 Token)。当 Claude 需要特定能力时进行搜索,只有匹配的工具才会被展开到 Context 中。

文章报告称"Token 使用量减少了 85%,同时仍可访问完整的工具库"。内部测试显示 MCP 评估的准确率有所提升——Opus 4 从 49% 提升到 74%,Opus 4.5 从 79.5% 提升到 88.1%。

实现方式是在 tools 数组中添加一个工具搜索工具(支持正则表达式、BM25 或自定义方式),并将可发现的工具标记为 defer_loading: true。对于 MCP 服务器,可以延迟加载整个服务器,同时保持高频使用的工具常驻加载。

Prompt 缓存得以保留,因为延迟加载的工具会从初始 Prompt 中完全排除。

适用场景: 工具定义消耗超过 10K Token、工具选择准确率存在问题、使用多个 MCP 服务器的系统、或有 10 个以上可用工具时。对于少于 10 个工具的小型工具库、所有工具都高频使用、或定义较为紧凑的场景,收益较小。


2. Programmatic Tool Calling(编程式工具调用)

问题: 传统的工具调用会产生 Context 污染(来自中间结果)和推理开销。每次工具调用都需要一次完整的模型推理,所有中间结果无论是否相关都会累积在 Context 中。

解决方案: Programmatic Tool Calling 使 Claude 能够通过代码编排工具,而非逐个进行 API 往返调用。Claude 编写 Python 代码来调用多个工具、处理输出,并控制哪些内容进入 Context Window。文章指出"循环、条件判断、数据转换和错误处理都在代码中显式表达"。

示例:预算合规检查

文章演示了一个场景:使用三个工具(get_team_membersget_expensesget_budget_by_level)检查哪些团队成员超出了 Q3 差旅预算。

在传统方式中,获取 20 人的数据会生成数千条费用明细(约 50 KB+),全部进入 Claude 的 Context。使用 Programmatic Tool Calling,Claude 编写 Python 脚本,利用 asyncio.gather 进行并行执行。只有最终结果(超出预算的 2-3 人)进入 Context——从 200KB 的原始数据缩减到约 1KB 的结果。

报告的改进效果:

  • 复杂研究任务的 Token 节省 37%(从平均约 43,588 降至约 27,297 Token)
  • 通过消除 20 个工具工作流中的 19+ 次推理来降低延迟
  • 准确率提升:知识检索从 25.6% 提升到 28.5%;GIA 基准测试从 46.5% 提升到 51.2%

工作原理(四个步骤):

  1. 将工具标记为可通过代码调用:在 tools 中添加 code_execution,并将 allowed_callers 设置为需要加入的工具
  2. Claude 用 Python 编写编排代码
  3. 工具在 Code Execution 环境中执行,不会触及 Claude 的 Context——工具请求包含一个 caller 字段,链接回代码执行会话
  4. 只有最终输出(stdout)进入 Claude 的 Context

适用场景: 只需要聚合结果的大数据集处理、包含 3 个以上依赖工具调用的多步骤工作流、在 Claude 看到结果前进行过滤/排序/转换、并行操作。对于简单的单工具调用、Claude 需要推理所有中间结果的任务、或响应数据量小的快速查询,收益较小。


3. Tool Use Examples(工具使用示例)

问题: JSON Schema 定义了结构,但无法表达使用模式。文章以工单 API(create_ticket)为例,指出日期格式、ID 约定、嵌套结构用法和参数关联等方面存在歧义,仅靠 Schema 无法解决。

解决方案: Tool Use Examples 允许你在工具定义中通过 input_examples 字段直接提供示例工具调用。文章展示了 create_ticket 的三个示例:

  • 一个包含完整联系信息和升级机制的严重 Bug 报告
  • 一个包含报告人但无联系信息/升级机制的功能请求
  • 一个仅有标题的内部任务

通过这些示例,Claude 学会了格式约定(YYYY-MM-DD 日期、USR-XXXXX ID、kebab-case 标签)、嵌套结构模式和可选参数的关联关系。

内部测试显示"复杂参数处理的准确率从 72% 提升到 90%"。

适用场景: 复杂嵌套结构、具有大量可选参数的工具、包含领域特定约定的 API、需要消歧的相似工具。对于简单的单参数工具、Claude 已经理解的标准格式、或更适合用 JSON Schema 处理的验证场景,收益较小。


最佳实践

文章建议根据你最大的瓶颈来分层组合这些功能:

  • 工具定义导致的 Context 膨胀 → Tool Search Tool
  • 大量中间结果污染 Context → Programmatic Tool Calling
  • 参数错误和格式不正确的调用 → Tool Use Examples

Tool Search Tool 建议: 使用清晰、描述性的名称和说明。在系统提示中添加关于可用工具类别的指导。保持 3-5 个最常用的工具常驻加载,其余延迟加载。

Programmatic Tool Calling 建议: 清晰记录返回格式,因为 Claude 需要编写解析代码。适合加入编程式编排的工具包括可并行运行的工具和幂等操作。

Tool Use Examples 建议: 使用真实数据,展示多样性(最小/部分/完整模式),每个工具保持 1-5 个示例,聚焦于 Schema 无法明确表达正确用法的歧义之处。


开始使用

这些功能以 Beta 版本提供,需要使用 Header advanced-tool-use-2025-11-20。文章提供了通过 Python SDK 启用这些功能的代码片段:

python
client.beta.messages.create(
    betas=["advanced-tool-use-2025-11-20"],
    model="claude-sonnet-4-5-20250929",
    max_tokens=4096,
    tools=[
        {"type": "tool_search_tool_regex_20251119", "name": "tool_search_tool_regex"},
        {"type": "code_execution_20250825", "name": "code_execution"},
        # 你的工具,配置 defer_loading、allowed_callers 和 input_examples
    ]
)

致谢

基础研究由 Chris Gorgolewski、Daniel Jiang、Jeremy Fox 和 Mike Lambert 贡献。本项工作受到 Joel Pobar 的 LLMVM、Cloudflare 的 Code Mode 以及 Anthropic 自身的 Code Execution as MCP 启发。特别感谢 Andy Schumeister、Hamish Kerr、Keir Bradwell、Matt Bleifer 和 Molly Vorwerck。

AI 落地咨询
艾维禾砺数字科技

企业 AI 落地全链路服务

Agent 开发工作流搭建Claude Code 集成
微信咨询
d187l8801b6124
访问官网 ivheli.com