Parallel Tool Calls
并行工具调用一轮里同时调多个工具,缩短总耗时。
详解
Parallel Tool Calls 指模型在一次响应里同时输出多个工具调用请求,让你可以并发执行它们,而不必等一个完成再触发下一个。以 OpenAI 为例,响应的 tool_calls 数组里会有多个条目;以 Claude 为例,content 数组里可同时出现多个 tool_use block。模型只在工具之间彼此独立时才会并行输出——如果 B 的输入依赖 A 的输出,模型会拆成两轮串行请求。你的代码可以用 asyncio.gather 并发执行这些调用,然后把所有 tool result 一次性追加到对话历史,再发起下一轮请求。相比逐个串行执行,多工具场景的总耗时可降低 50–80%。如需禁用并行(例如工具之间有隐含依赖),可在 tool_choice 中设 disable_parallel_tool_use: true。
一个类比
像同时派出多个外卖骑手:不需要等第一个骑手回来才派第二个——只要目的地互不依赖,同时出发总比排队出发快。
举个例子
import asyncio
import anthropic
client = anthropic.Anthropic()
# tools = [...] # 工具定义参见 tool-schema 词条,此处省略
async def execute_tool(tool_name: str, tool_input: dict) -> str:
"""模拟异步工具执行"""
await asyncio.sleep(0.5) # 实际是 API 调用
return f"{tool_input.get('city', tool_name)}:22°C,晴"
async def main():
# 第一轮:让模型决定调哪些工具
resp = await asyncio.to_thread(
client.messages.create,
model="claude-sonnet-4-6", max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "北京和上海今天天气怎样?"}]
)
tool_calls = [b for b in resp.content if b.type == "tool_use"]
# 并发执行所有工具,而不是逐个串行
results = await asyncio.gather(*[
execute_tool(tc.name, tc.input) for tc in tool_calls
])
print(results) # ['北京:22°C,晴', '上海:25°C,多云']
asyncio.run(main())PYTHON 示例
相关概念
- → Function Calling· 函数调用
- → Async / Concurrent· 异步并发