10.The batch tool
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
在使用Claude的工具调用功能时,你可能会注意到Claude可以在单个助手消息中包含多个工具使用块。这使得Claude能够并行运行多个工具,而不是为每个工具单独发送请求。然而,在实际应用中,让Claude始终如一地这样做可能具有挑战性。

例如,如果你要求Claude为同一日期设置两个提醒,理想情况下它应该返回一个包含两个工具使用块的单一响应。但通常情况下,Claude会先进行第一个工具调用,等待你的响应,然后在单独的往返中进行第二个工具调用。

当这些操作本可以同时执行时,这就造成了不必要的来回通信。解决方案是实现一个批处理工具,鼓励Claude一次性请求多个工具调用。
批处理工具的工作原理
批处理工具是一个额外的工具,它接受对其他工具的调用列表。Claude不是直接调用多个工具,而是调用批处理工具并提供描述它想要运行哪些工具的参数。

批处理工具接收一个调用列表,其中每个调用指定:
- 要调用的工具名称
- 传递给该工具的参数
当你收到批处理工具调用时,你的代码会遍历调用列表并执行每个请求的工具调用。
实现批处理工具模式
首先,您需要定义批处理工具的模式。以下是其结构:
batch_tool_schema = {
"name": "batch_tool",
"description": "Invoke multiple other tool calls simultaneously",
"input_schema": {
"type": "object",
"properties": {
"invocations": {
"type": "array",
"description": "The tool calls to invoke",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "要调用的工具名称"
},
"arguments": {
"type": "object",
"description": "传递给工具的参数"
}
}
}
}
}
}
}
实现批处理函数
接下来,你需要创建处理批量工具调用的函数:
def run_batch(invocations=[]):
batch_output = []
for invocation in invocations:
name = invocation["name"]
args = json.loads(invocation["arguments"])
tool_output = run_tool(name, args)
batch_output.append({
"tool_name": name,
"output": tool_output
})
return batch_output
This function:
- 遍历列表中的每个调用
- 提取工具名称和参数
- 使用您现有的 run_tool 函数调用相应的工具
- 将所有结果收集到批处理输出列表中
您还需要更新主要的工具路由函数来处理批处理工具:
def run_tool(tool_name, tool_input):
if tool_name == "get_current_datetime":
return get_current_datetime(**tool_input)
elif tool_name == "add_duration_to_datetime":
return add_duration_to_datetime(**tool_input)
elif tool_name == "set_reminder":
return set_reminder(**tool_input)
elif tool_name == "batch_tool":
return run_batch(**tool_input)
Results
一旦实现后,当Claude识别到多个操作可以并行执行时,它将更倾向于使用批处理工具。Claude不会发起单独的请求,而是会调用批处理工具,并传入它想要执行的所有操作的列表。
批处理工具本质上是一个变通方案,为Claude提供了并行工具执行的更高级抽象。虽然这种方法可能看起来不太寻常,但它是鼓励Claude将相关操作批量处理的有效技术,减少了API往返次数并提高了整体效率。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org