K2.3.2 Task 2.3

tool_choice:auto、any、tool、none

tool_choice 参数控制模型是否以及如何调用工具。四种模式,各有特定用途。

四种模式

auto(默认)— 模型自由决定是否调用工具、调用哪个,或者只用文本回复。最大灵活性。通用 agent 中模型应该选择最佳方案时用这个。

any — 模型必须调用工具但可以选择哪个。保证有工具调用但不指定哪个。需要工具执行但具体工具取决于上下文时用这个。

tool + name — 强制模型调用特定的命名工具。{"type": "tool", "name": "extract_metadata"} 保证 extract_metadata 运行。流水线中顺序重要的步骤用这个(“永远先提取元数据”)。

none — 阻止所有工具调用。模型只用文本回复。只需要分析/回复的步骤中应该阻止工具执行时用这个。

什么时候强制选择重要

在提取流水线中,第一步必须永远调用 extract_metadata 再做任何处理。用 auto 的话,模型可能跳过它或先调别的工具。用强制选择(type: "tool", name: "extract_metadata"),就有保证了。

强制的第一步之后,切回 auto 让模型在后续步骤中自由选择。

auto vs any

auto 允许纯文本回复——模型可能决定不需要工具。any 要求工具调用——模型必须选一个。如果你需要保证工具执行但不在意哪个工具,用 any。如果模型有时候应该不用工具直接回复,用 auto

跨轮次改变 tool_choice

tool_choice 可以在 agentic 循环的 API 调用之间改变。第一次调用:强制 extract_metadata。第二次调用:auto 自由选择。第三次调用:none 做纯文本摘要。这给了你逐轮控制工具使用的能力。


一句话总结: auto(模型决定)、any(必须调工具)、tool+name(强制特定工具)、none(纯文本)——流水线顺序用强制选择,通用灵活性用 auto。