现象
在FastGPT v4.15.2的工作流工具调用节点中,当连续工具调用次数超过5次后,系统会将下一次请求的toolchoice参数设为none。此时若上游兼容OpenAI接口的模型返回finishreason为toolcalls,但无有效toolCalls、answerText为空、reasoningText非空,会触发chat:LLMmodelresponseempty报错,工作流异常终止。该问题仅出现在强制收尾的工具调用请求中,模型配置页面测试、普通对话均能正常运行。
可能原因
FastGPT的Agent Loop逻辑中,设置了连续工具调用次数阈值:当consecutiveRequestToolTimes >5时,会强制将toolchoice设为none,以终止工具调用流程。部分兼容OpenAI接口的模型在toolchoice设为none时,仍返回finishreason为toolcalls,且未生成有效工具调用内容,导致FastGPT无法识别有效响应,触发通用的空响应报错。
排查步骤
- 确认FastGPT版本为v4.15.2,且通过AIProxy v0.6.5接入兼容reasoning和tool calling的OpenAI-compatible模型。
- 检查目标工作流的工具调用节点配置,确认系统提示词要求模型连续调用工具获取证据。
- 触发连续5次以上仅返回工具调用的对话流程,观察第6次及之后的请求参数。
- 查看上游模型的原始响应,确认是否存在finishreason为toolcalls、无有效toolCalls、answerText为空、reasoningText非空的情况。
- 检查FastGPT运行日志,确认报错信息为chat:LLMmodelresponse_empty。
解决与验证
针对该异常,可通过以下方式处理与验证:
- 为toolchoice设为none,但返回finishreason为tool_calls且无有效toolCalls的场景,添加明确的异常识别逻辑,替换通用报错信息。
- 可增加自动重试机制,使用tool_choice为none重新发起请求,明确要求模型输出最终文本。
- 在日志中补充记录请求的toolchoice、返回的finishreason、有效toolCalls状态、answerText和reasoningText的长度等信息,便于问题定位。
验证时,触发相同的连续工具调用流程,确认异常报错被替换为明确的协议异常提示,或工作流正常终止,未再出现chat:LLMmodelresponse_empty报错。