SuperAPI AI 工具集

gemini3-thought-signature-tool-use-fix

智能体与模型

查看项目

更新于 10-16 09:56

技能介绍

用途:解决通过 OpenAI 兼容代理调用 Gemini 3 模型(如 gemini-3-flash-preview、gemini-3-pro)时,使用工具调用(function calling)后跟进回合返回空响应的问题。普通文本消息正常,涉及 web_fetch、exec、browser 等工具的消息会得到空响应,Google 会返回 400 错误:“Function call is missing a thought_signature”。

原因:Gemini 3 强制开启思考模式,会在工具调用响应中附带不透明的 thought_signature,且放在非标准字段 extra_content.google.thought_signature 中。标准 OpenAI 客户端在重建会话历史时会剥离该字段,导致后续提交工具结果时缺少签名,被 Google 拒绝,代理级联失败后返回空响应。官方文档称 Gemini 3 的推理无法关闭。

方案:在代理的 buildProviderBody() 中检测请求是否含 tools,若含则把模型替换为 gemini-2.5-flash。示例代码:if (provider.name === 'google') { delete clone.store; if (clone.tools && clone.tools.length > 0) { clone.model = 'gemini-2.5-flash'; console.log('[proxy] Tool use detected → downgrade to gemini-2.5-flash'); } }

验证:含工具的消息应既调用工具又返回非空文本;发送“Hello”应正常经 Gemini 3 回复;Google provider 的 failures 应为 0 且 lastSuccess 有值;日志出现降级提示;熔断器保持 CLOSED。

诊断:检查 provider-status 是否 lastSuccess 为 null;查看代理日志中带 thought_signature 的 400 错误;对比工具与非工具消息;确认模型是否为 Gemini 3。

限制:带工具请求使用较旧模型;签名注入方案复杂(需缓冲 SSE、解析流、按会话缓存);直接去除工具会丧失工具能力;仅用 2.5-flash 会损失 Gemini 3 文本质量;修复客户端为长期理想方案但客户端为闭源 npm 包。Gemini 2.5-flash 不需 thought signature,兼容标准 OpenAI tool_call 格式。未来 Gemini 版本可能改为可选。检查条件是 clone.tools && clone.tools.length > 0,覆盖已定义工具及提交工具结果两种场景。