issue: XML spit-out in openweb-ui

在 Open WebUI 中以非 thinking 模式调用模型并要求工具调用时,正文中会直接出现 形式的 XML 文本,而不是结构化的 tool_calls 。问题通常不在 Open WebUI 前端,而在于后端(本次为 Halogen)没有把模型输出的工具调用格式解析为

快速结论:在 Open WebUI 中以非 thinking 模式调用模型并要求工具调用时,正文中会直接出现 <tool_call> 形式的 XML 文本,而不是结构化的 tool_calls。问题通常不在 Open WebUI 前端,而在于后端(本次为 Halogen)没有把模型输出的工具调用格式解析为 tool_calls 字段。

适用环境:Open WebUI v0.13.3、Docker 安装、Ubuntu 26.04、Halogen 0.20.1(Issue 中另提及 0.18.x),模型为 qwen3.8-flash-next,工具调用走 Open WebUI 原生方式,thinking 关闭(enable_thinking: false)。Ollama 版本未填写。

最快修复方案:暂无确认的一步修复方案;Issue 中给出的确认结论是修复位于 Halogen 服务端,并已在其对应 Issue 中关闭。

注意事项:更换模型或开启 thinking 模式只是绕过现象,不能证明 Open WebUI 侧有问题;根因定位依赖服务端日志或解析器行为,Issue 中日志无报错,只能看到输出的异常 XML 文本。

问题场景

用户通过 Docker 运行 Open WebUI v0.13.3,使用 OpenAI 兼容接口连接 Halogen flash server(/v1/chat/completions),模型为 qwen3.8-flash-next。在关闭 thinking 后发出需要工具调用的请求(例如抓取 URL、搜索工具),经过若干次正常工具调用后,最终回复中混入了模型的原始工具调用 XML 块。

报错原文

<tool_call> <function=call_tool> <parameter=calls> [{"tool_name": "fetch_url", "params": "{\"url\":\"https://apt.armbian.com/dists/resolute/Release\"}"}, {"tool_name": "fetch_url", "params": "{\"url\":\"https://apt.armbian.com/dists/noble/main/binary-arm64/Packages.gz\"}"}] </parameter> </function> </tool_call>

<tool_call>
<function=search_tools>
<parameter=query> fetch_url web_page scrape_html </parameter>
<parameter=count> 10 </parameter>
</function>
</tool_call>

原因分析

该 XML 块是模型自身的工具调用文本格式,被服务端作为普通 message.content 返回,而不是放进结构化的 tool_calls 字段。Open WebUI 只能执行服务端以 tool_calls 交付的工具调用;出现在正文中的文本只会被当作普通文本显示。

把模型文本转换为 tool_calls 是服务端工具调用解析器的职责。在非 thinking 模式下,模型书写工具调用的形式可能与解析器预期不一致,导致解析器漏识别。Issue 讨论中已确认该问题属于 Halogen 侧,并由 Halogen 团队修复。

环境排查

  • 确认 Open WebUI 版本为 v0.13.3,或至少在最新 release / dev 分支上复现。
  • 确认 Halogen 版本(Issue 中为 0.20.1,另提及 0.18.x 亦可复现)。
  • 确认请求体中 thinking 是否关闭(enable_thinking: false 或等价设置)。
  • 确认使用的模型,例如 qwen3.8-flash-next,并检查其工具调用输出格式。
  • 检查服务端是否返回 tool_calls 字段;若只返回正文 XML,则应继续查服务端解析器。
  • 查看 Open WebUI 与服务端日志;Issue 中日志无报错,不能依赖日志定位。

解决步骤

  1. 在 Open WebUI 中记录触发异常的模型、thinking 开关状态和工具调用流程,确认症状是 XML 出现在正文而非 tool_calls。
  2. 对比开启 thinking 的同一请求;若开启后不再出现,说明与模型输出格式及服务端解析路径相关,而不是 Open WebUI 前端渲染问题。
  3. 检查后端服务(本次为 Halogen)版本,并关注其对应 Issue 的修复进展。
  4. 按照 Halogen 议题中的修复更新或重新部署服务端,然后重复相同工具调用请求进行验证。
  5. 若暂时无法更新服务端,可优先尝试开启 thinking 模式作为临时绕过,但需注意这会改变模型行为,并非根因修复。

验证方法

用相同的非 thinking 请求和需要工具调用的提示词重新执行,确认返回结果中不再出现原始 <tool_call> XML 文本,而是由服务端正常返回结构化 tool_calls,Open WebUI 能按工具调用展示和执行。验证时应同时检查正文是否干净、工具调用是否真正触发。

参考来源

open-webui/open-webui #34070

peonist-ai/halogen-flash-server #253

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 34549

发表回复

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