停止条件 核心概念

循环回答「什么时候停」的规则,两类缺一不可:模型不再要求工具(`tool_calls` 为空,正常结束),或达到 `maxIterations`(保险丝,模型失控时的兜底)。判断继续与否只看有没有工具调用,不依赖厂商的 `stop_reason`。

它是什么

停止条件回答循环最关键的问题:「什么时候停」。两类缺一不可:

  • 模型不再要求工具:某一轮 toolCalls 为空,模型认为目标已达成——正常结束;
  • 达到 maxIterations:轮数达到上限——保险丝,模型失控(持续要工具)时的兜底,防止 token 烧穿、请求打到厂商限流。

判断只看 tool_calls,不看 stop_reason

判断「要不要继续」只看有没有 tool_calls,不依赖厂商的 finish_reason / stop_reason:一是两个厂商的枚举语义本就不同('tool_calls' vs 'tool_use'),统一判断多一层翻译;二是流式响应里 stop_reason 可能还没更新、内容里却已经带了工具调用。「有没有工具调用」比「厂商说它为什么停」更可靠、更可移植。

截断后的兜底

maxIterations 截断时,用户必须拿到点什么:最小循环的兜底是「最后一轮 assistant 文本」,更成熟的方案(第 20 章)会在截断时返回明确的错误信号。不要让用户面对一个空的 finalText。完整实现见第 07 章

相关词条

出现在这些章节