Claude 新推出高级工具使用功能

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Claude 新推出高级工具使用功能

最近 Anthropic 给 Claude 的开发者平台加了三个新功能,专门解决 AI “使用工具” 时的痛点。
原文地址:https://www.anthropic.com/engineering/advanced-tool-use

Tool Search Tool

问题

MCP 服务的工具上下文过多: MCP 服务的工具定义提供了重要的上下文,但随着连接的服务器越来越多,这些 Token 会累积起来,比如配置 github、slack、jira、chrome-devtools 等,这几个 MCP 服务提供的工具就有几十个,所以这几十个工具在对话开始前就消耗了几十K 的 token

当工具名称比较相似的时候,可能会选择错误。 比如 notification-send-usernotification-send-channel,就有可能存在工具调用错误的场景

解决方案

所以 Claude 提供了 Tool Search Tool 工具,它不是预先加载所有工具定义,而是按需发现工具,让 Claude 只看到它当前任务实际需要的工具。

原理

这个功能就是工具调用之前增加了一个搜索步骤,当 Claude 需要特定功能时,它会搜索相关工具。Tool Search Tool 返回匹配工具的引用,这些引用会在 Claude 的上下文中扩展为完整的定义。

例如,如果 Claude 需要与 GitHub 交互,它会搜索与 “github” 相关的工具,然后获取到如 github.createPullRequestgithub.listIssues 等 github 相关的工具的引用,这样既能知道这些工具的完整定义,并且 Slack、Jira 的其他几十个工具则不会进入上下文。

如何启用这个功能
  • tools 参数上添加这个 tool_search_tool_regex_20251119 这个工具
  • 给按需加载的 tool 设置 defer_loading = false 字段

如:

 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"
	},
	{
		"name": "get_weather",
		"description": "Get the weather at a specific location",
		"defer_loading": true
	},
		...
	]
)

现在 tool 加了 defer_loading 的字段,Claude 只会看到 Tool Search Tool 本身以及任何 defer_loading: false 的工具
那些设置 defer_loading: true,这些工具就是按需加载的,所以这些按需加载的工具最开始不会在上下文中。

具体流程
  • 在工具列表中添加工具搜索工具(例如,tool_search_tool_regex_20251119 或 tool_search_tool_bm25_20251119)
// 当我们调用 api 时
 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"
	},
	{
		"name": "get_weather",
		"description": "Get the weather at a specific location",
		"defer_loading": true
	},
		...
	]
)
  • Claude 最初只看到 tool_search_tool_regex_20251119 和其他非延迟加载的 tool (defer_loading = false)
  • Claude 内置了 tool_search_tool 工具,它识别到你要开启这个 tool
  • 当 Claude 需要其他工具时,它使用 tool_search_tool 进行搜索
  • API 返回3-5个最相关的 tool 的引用,这些引用会自动扩展为完整的工具定义
  • Claude 从发现的工具中选择并调用它们

技术文档:https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool

程序化工具调用 (PTC技术 Programmatic Tool Calling)

先来看个例子

举个例子

用户问 Claude:“帮我查一下团队里里所有前端开发一共有多少个 Jira Ticket?”

服务端提供了可用工具

  1. get_team_members(team_name): 获取团队成员 ID 列表。
  2. get_member_info(user_id): 获取成员详细信息(包含职位 Role)。
  3. get_jira_tickets(user_id): 获取成员的 Jira Ticket 列表。

假设产品组有 10 名员工,其中 3 名是前端。

模式一:传统工具调用 (Traditional Tool Calling)

流程步骤:

Claude 首先调用 get_team_members 获取所有成员 ID,然后必须逐个遍历这 10 个 ID。对于每个 ID,它先调用 get_member_info 检查职位,如果是前端,再调用 get_jira_tickets 获取 Ticket 列表。这个过程需要 Claude 反复发起 20 多次 工具调用,然后每次调用的结果,包括无关的职位信息和 Ticket 详情都会塞进上下文给 Claude LLM,直到查完所有人。

简单来说就是:Claude 先调用一个工具,拿到结果看一眼,再决定下一步调用什么工具。为了查完所有人的信息,它需要反复进行几十次“思考-调用-接收结果”的循环,所有中间数据(比如每个人的职位、每个 Ticket 的详情)都会塞进它的上下文里。

问题

从上面的例子可以看到两个问题:

中间结果造成的上下文污染:当 Claude 调用一个工具获取结果数据时,假如是一个 10MB 的日志文件,那这10MB 的日志文件都会进入其上下文窗口,即使 Claude 只需要这其中部分信息的摘要。当跨多个表获取数据时,每条记录都会在上下文中累积,无论是否相关。这些中间结果消耗大量的 Token 预算,并可能将重要信息完全挤出上下文窗口。

推理开销和手动合成:每个工具调用都需要一次完整的模型推理过程。收到结果后,Claude 必须“目测”数据以提取相关信息,推理各部分如何组合在一起,并决定下一步做什么——所有这些都通过自然语言处理完成。一个五个工具的工作流意味着五次推理过程,加上 Claude 解析每个结果、比较值并综合结论,这既慢又容易出错。

解决方案

Claude 不再将每个工具结果返回给模型,而是编写一个 Python 脚本来编排整个工作流。该脚本在代码执行工具(一个沙箱环境)中运行,当需要工具结果时暂停。当你通过 API (这里的API 指的是服务端提供的工具所调用的 API 借口) 返回工具结果时,它们由脚本处理,而不是由模型使用。脚本继续执行,Claude LLM 只会看到最终输出。

程序化工具调用 (Programmatic Tool Calling)的方式:
  1. 标记 tool 支持代码调用:添加 code_execution 到 tools 里面,并设置 allowed_callers 告诉 LLM 那些工具允许被代码环境调用
    tools = [
      // 添加工具代表启用 PTC 功能
      {
          "type": "code_execution_20250825",
          "name": "code_execution"
      },
      {
          "name": "get_team_members",
          "description": "Get all members of a department",
          "allowed_callers": ["code_execution_20250825"]  
          ...
      },
      {
          "name": "get_member_info",
          "allowed_callers": ["code_execution_20250825"]  
          ...
      }
      ...
  ]
  1. Claude 编写编排代码:Claude LLM 看到 code_execution_20250825 工具后,决定是否使用代码编排,查看有那些设置了 allowed_callers 权限的 tool,然后生成 Python代码,这段代码会在沙箱执行,执行完结果后再发送给 LLM
  2. Claude 回答:Claude LLM 接受到结果,在基于结果给用户回答,中间代码的执行数据、计算过程没有进入上下文

何时使用 PTC

建议使用场景:

  • 处理大数据集,只需要聚合或摘要
  • 运行具有三个或更多依赖工具调用的多步工作流
  • 在 Claude 看到结果之前过滤、排序或转换工具结果
  • 处理中间数据不应影响 Claude 推理的任务
  • 跨许多项目运行并行操作(例如检查 50 个端点)

技术文档:https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling

Tool Use Examples

问题

以前用 Json Schema 定义 tool ,AI 经常因为填错格式而报错。
比如日期是写 “2024-01-01” 还是 “Jan 1st”? 负责人ID 是写名字还是写工号?

解决

工具使用示例允许你在工具定义中直接提供示例工具调用, 向 Claude 展示具体的使用模式,而不是仅依赖 Schema。

{
  "name": "create_ticket",
  "input_schema": {...},
  // 使用示例
  "input_examples": [
    {
      "title": "Login page returns 500 error",
      "priority": "critical",
      "labels": ["bug", "authentication", "production"],
      "reporter": {
        "id": "USR-12345",
        "name": "Jane Smith",
        "contact": {
          "email": "jane@acme.com",
          "phone": "+1-555-0123"
        }
      },
      "due_date": "2024-11-06",
      "escalation": {
        "level": 2,
        "notify_manager": true,
        "sla_hours": 4
      }
    },
    {
      "title": "Add dark mode support",
      "labels": ["feature-request", "ui"],
      "reporter": {
        "id": "USR-67890",
        "name": "Alex Chen"
      }
    },
    {
      "title": "Update API documentation"
    }
  ]
}

何时使用 Tool Examples

建议使用场景:

  • 复杂的嵌套结构,其中有效的 JSON 并不意味着正确的使用
  • 具有许多可选参数且包含模式很重要的工具
  • Schema 中未捕获的具有特定领域约定的 API
  • 相似的工具,示例可以澄清使用哪一个(例如 create_ticket vs create_incident

最佳实践

策略性地使用这个几个功能

并非每个代理都需要针对给定任务使用所有三个功能。

  • 工具定义导致的上下文膨胀 → 工具搜索工具
  • 大型中间结果污染上下文 → 编程工具调用
  • 参数错误和格式错误的调用 → 工具使用示例

设置 Tool Search Tool 以获得更好的发现

工具搜索匹配名称和描述,因此清晰、描述性的定义可以提高发现准确性。添加系统提示指导,让 Claude 知道有哪些工具可用。保持 3-5 个最常用的工具始终加载,延迟加载其余工具。

设置 PTC 调用以正确执行

由于 Claude 编写代码来解析工具输出,请清楚地记录返回格式。这有助于 Claude 编写正确的解析逻辑。

设置 Tool Use Example 以提高参数准确性

制作示例以获得行为清晰度:使用真实数据,展示多样性,保持简洁(每个工具 1-5 个示例),专注于歧义。

如何启用新功能

这些功能处于 Beta 阶段。要启用它们,请添加 beta header 并包含你需要的工具:

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 的工具
    ]
)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值