并行工具调用 工具与循环

别名: 并行调用

模型在同一轮返回多个 `tool_calls`,这些调用之间相互独立。执行时可用 `Promise.all` 并发跑,但回填必须按 `tool_calls` 数组的原始顺序排列结果、按 `id` 一一配对 `tool_call_id`,否则第二轮模型看到的结果与它请求的顺序对不上。

它是什么

模型可以在同一轮返回多个 tool_calls——比如用户问「北京和上海天气怎么样」,模型一次请求两个 get_weather,参数分别是北京和上海。前提是这些调用之间相互独立:不需要任何一方的结果才能执行另一方。OpenAI 接口里可用 parallel_tool_calls 参数控制:默认允许(false 则强制每轮至多一个工具调用)。

执行与回填的纪律

并发执行用 Promise.all 即可,但有两条硬纪律:

  • 顺序由数组决定:结果必须按 tool_calls 数组的原始顺序排列,不能按「谁先跑完」排——Promise.all 的结果数组本身保序,直接用下标对齐即可;
  • 配对由 id 决定:每条 role: 'tool' 消息的 tool_call_id 与对应的 tool_calls[].id 一一配对,配错或漏配,第二轮模型就无法把结果与请求对上。

什么时候该禁用

并行调用省掉了几乎所有的等待时间(「一次问 5 个城市」靠的就是它),但同一工具的多次并行调用在某些模型/快照上可能不稳,官方文档对此有专门提醒。需要严格确定性(测试、判题)时,可以显式关掉并行退化为串行——串行永远可行,只是慢。完整实现见第 06 章

相关词条

出现在这些章节