issue: Tool calls silently dropped and thought_signature lost with Google’s OpenAI-compatible endpoint

当你在 Open WebUI 中通过 Google 的 OpenAI 兼容端点( https://generativelanguage.googleapis.com/v1beta/openai )接入 Gemini 模型,并开启原生函数调用(native function calling)时,模型一

快速结论:当你在 Open WebUI 中通过 Google 的 OpenAI 兼容端点(https://generativelanguage.googleapis.com/v1beta/openai)接入 Gemini 模型,并开启原生函数调用(native function calling)时,模型一旦决定调用工具,助手消息就变为空、日志无任何输出。优先确认你用的是否是 Google 的“伪 OpenAI 兼容”端点,并检查是否为该兼容性缺陷。

适用环境:Open WebUI 版本 dev(Git Clone 安装);操作系统 all;使用 Google OpenAI 兼容端点 base URL https://generativelanguage.googleapis.com/v1beta/openai + Gemini API Key;模型如 models/gemini-3.6-flash;function_calling 保持默认 native;启用了内置工具与 memory。Issue 未提供 Python、CUDA、PyTorch、显卡、Ollama 版本信息。

最快修复方案:暂无确认的一步修复方案。该 Issue 最终以“won’t fix / duplicate”关闭,理由是 Google 的 OpenAI 端点并不真正兼容 OpenAI Completions schema。可优先尝试的方式是:按 Issue 评论区提供的函数(Google 与 OpenAI 语法互转)在 Settings | Functions 中配置,把 function calling 设为 Native,并用该函数派生模型来使用。

注意事项:官方明确表示不会修复,因为该行为违反 OpenAI Completions schema。这不是 Open WebUI 单方面能修的问题。在未使用转换函数前,工具调用可能被静默丢弃、thought_signature 丢失,导致空回答;且由于 memory 工具默认开启,用户可能在无提示情况下频繁遇到空回复。评论区提供的 Gemma4NativeTools.py 属于社区方案,未被官方验证,需自担风险。

问题场景

用户在 Open WebUI 中新增一个 OpenAI 连接,base URL 填 https://generativelanguage.googleapis.com/v1beta/openai,配合 Gemini API Key;启用如 models/gemini-3.6-flash 的模型;在该模型能力中开启 builtin tools 和 memory,function_calling 保持默认的 native。在新对话中发送“Oi”并重复几次,当模型自行决定调用工具(例如内置 memory 的 list_memories)时触发问题。表现为助手消息内容为空,存储在 content ''、output: [],而 provider 报告已消耗 output tokens,说明模型确实产生了内容但未到达 UI。日志在任何级别都没有记录。

报错原文

Tool calls silently dropped and thought_signature lost with Google's OpenAI-compatible endpoint

HTTP 400 INVALID_ARGUMENT - Function call is missing a thought_signature in
functionCall parts. This is required for tools to work correctly. Additional
data, function call `default_api:list_memories`, position 2.

原因分析

根据 Issue 分析,存在两个相互独立、且有先后依赖关系的原因:

  1. 工具调用在运行前就被丢弃。流式累积循环读取 delta_tool_call.get('index'),且所有处理逻辑都包在 if tool_call_index is not None: 里,没有 else 分支。Google 会把每个工具调用完整放在一个 chunk 里发送并省略 index,而 OpenAI 流式规范始终包含 index,因此该调用在无任何痕迹的情况下被丢弃。
  2. Gemini 3 的 thought_signature 没有被回传。它随工具调用出现在 extra_content 中,必须在其对应的 functionCall 上重放。但有三处在逐字段重建工具调用时丢弃了它,导致后续请求失败并返回 HTTP 400 INVALID_ARGUMENT - Function call is missing a thought_signature in functionCall parts...。在这种情况下工具确实运行了、结果显示出来了,但模型始终不产出最终答案,消息仍为空。

官方在 Issue 中确认,根因是 Google 的“OpenAI 兼容”端点事实上并不兼容 OpenAI 规范,因此标记为 duplicate 并 won’t fix。

环境排查

  • 确认 Open WebUI 安装方式与版本:Issue 中为 Git Clone、dev 分支。
  • 确认接入方式:base URL 是否为 https://generativelanguage.googleapis.com/v1beta/openai,并使用 Gemini API Key。
  • 确认模型名称,例如 models/gemini-3.6-flash。
  • 确认模型的 function_calling 是否设为 native(默认值)。
  • 确认是否开启了 builtin tools 与 memory(memory 默认开启,会主动调用 list_memories)。
  • 确认操作系统:Issue 标注为 all。
  • Issue 未提供 Python、CUDA、PyTorch、显卡、Ollama 版本,无需强行核对。

解决步骤

  1. 先确认问题是否由 Google OpenAI 兼容端点引起:如果你正使用该 base URL + Gemini 模型 + native function calling,且助手消息为空、日志无输出,基本可判定命中此问题。
  2. 查看 Issue 评论中官方说明的“Google 的 OpenAI 端点并不真正兼容 OpenAI 规范”,理解官方不会修复该兼容性问题。
  3. 可优先尝试社区方案:在 Settings | Functions 中粘贴评论区提供的 Gemma4NativeTools.py(Google 与 OpenAI 语法互转函数),基于该函数配置一个模型,并将其高级参数中 function calling 设为 Native。
  4. 如果你只是需要避免空回答,可以关闭 memory 工具或避免使用会触发工具调用的对话轮次,以减少命中该缺陷的概率。
  5. 若需要官方层面的改进(例如至少记录缺少 tool_call_index 的工具调用、或直接向用户报错而非空回答),可参考 Issue 中用户建议,等待或参与 docs 更新。

验证方法

在新对话中发送会触发工具调用的消息(例如“Oi”并重复多次,或直接触发 list_memories)。若助手能返回最终自然语言回答、且消息 content 非空、日志中有正常的工具调用记录,则说明已绕开该问题。若仍出现 content '' 且 output: [],说明仍命中原始缺陷或所用函数未生效。

参考来源

open-webui/open-webui #28492

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 28824

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注