TypeError: can only concatenate str (not “NoneType”) to str.

该报错发生在模型输出被 Open WebUI 误解析为工具调用时,工具名称为空(None)导致字符串拼接崩溃。优先排查上游模型服务(sglang 自定义构建)是否输出了畸形/损坏的工具调用字段,而不是 Open WebUI 的解析逻辑。

快速结论:该报错发生在模型输出被 Open WebUI 误解析为工具调用时,工具名称为空(None)导致字符串拼接崩溃。优先排查上游模型服务(sglang 自定义构建)是否输出了畸形/损坏的工具调用字段,而不是 Open WebUI 的解析逻辑。

适用环境:Open WebUI v0.11.3(Docker/Podman 容器),Fedora 44,GLM-5.3-Flash 通过自定义 sglang 构建(OpenAI 兼容接口)接入,流式输出开启,tool_choice 为 auto,temperature 为 1.0。

最快修复方案:暂无确认的一步修复方案。Issue 维护者明确判定根因在自定义 sglang 构建端(ormandj/sglang-glm53-flash-sm120#5),需要修复该构建中工具调用字段的生成逻辑。

注意事项:Open WebUI 端维护者确认工具调用只从接口返回的“结构化工具调用字段”中获取,不会从模型生成的文本内容中主动构建;脚本探测未复现问题,说明该缺陷仅在长会话中模型退化时触发。建议优先验证 sglang 端输出。

问题场景

用户在 Docker 容器中运行 Open WebUI v0.11.3,通过 OpenAI 兼容接口连接 GLM-5.3-Flash(由自定义 sglang 构建提供服务)。在长时间、工具密集的会话中(终端工具、多轮并行工具调用),模型开始在其内容或推理中输出原生工具调用标记语法(尖括号 XML 样式序列),Open WebUI 的工具调用提取器将这些文本误解析为真实工具调用,导致出现粘合/垃圾名称调用(非致命“Tool not found”错误)以及空名称调用(致命 TypeError 崩溃整个聊天响应)。重现实验表明,即使禁用所有用户过滤函数,让模型在回复中写出 GLM 工具调用标记语法并同时发起一个合法工具调用,也能触发 5 次误提取。

报错原文

TypeError: can only concatenate str (not "NoneType") to str.

Error: Tool "None" not found.
Error: Tool "delegate_task task=Check if godot and blender binaries work..." not found.

原因分析

维护者明确否定了 Open WebUI 端误解析的可能,理由如下:Open WebUI 不会从模型写入的文本内容中构建工具调用,工具调用仅取自接口返回的结构化工具调用字段;因此该错误只可能发生在接口端点(sglang 自定义构建)返回了函数名中已经包含参数内容、甚至名称为空的畸形工具调用时。脚本探测无法复现,说明畸形调用只在长会话中模型退化时出现,属于上游 sglang 构建的问题(对应 ormandj/sglang-glm53-flash-sm120#5)。

可能原因还包括:sglang 构建在长上下文、高温度(1.0)下出现解码漂移,将原生工具调用标记写入内容字段后又同时发出损坏的结构化工具调用;或自定义构建的 chat template 与工具调用解析逻辑存在边界条件缺陷。

环境排查

  • 确认 Open WebUI 版本:Docker/Podman 容器镜像 ghcr.io/open-webui/open-webui,tag v0.11.3
  • 确认操作系统:Fedora 44(浏览器无关,故障发生在服务端响应生成阶段)
  • 确认模型服务:GLM-5.3-Flash 通过自定义 sglang 构建(OpenAI 兼容端点)接入,启用流式输出、tool_choice=auto、temperature=1.0
  • 对照测试:同一 Open WebUI 接入 DeepSeek v4 Flash(vLLM 服务)未出现此现象,可用于排除 Open WebUI 通用解析问题
  • 建议检查 sglang 构建版本对应的上游 issue:ormandj/sglang-glm53-flash-sm120#5

解决步骤

  1. 优先检查 sglang 自定义构建的版本,确认是否已包含 ormandj/sglang-glm53-flash-sm120 对应修复;如未修复,请升级或应用该补丁。
  2. 如果无法立即升级 sglang,可用控制模型(如 DeepSeek v4 Flash / vLLM)作为临时替代,确认问题是否随模型服务切换而消失。
  3. 若需在 Open WebUI 端缓解崩溃,可等待官方针对“空名称工具调用被保留并进入分发”的子问题修复(Issue 维护者已建议单独建 issue 跟踪,当前版本未处理)。
  4. 可优先尝试:在长会话中主动简短化工具调用频率,或降低 temperature 以减少模型漂移;但此方法未经 Issue 验证,仅为缓解手段。
  5. 如需在 Open WebUI 代码层面防御:可在分发前丢弃名称为空(None)的工具调用,并避免将此类调用写入聊天历史;该修改为推测性方案,未在 Issue 中验证。

验证方法

使用控制模型(DeepSeek v4 Flash 经 vLLM)连接同一 Open WebUI 实例,进行同等长度的工具密集会话,确认不再出现粘合/空名称调用即可基本排除 Open WebUI 端;若问题仍然存在,则 Open WebUI 端存在未被识别的解析路径。若需确认 sglang 端已修复,可在修复后的构建上重复长时间工具会话,观察是否仍有 Error: Tool "None" not found. 及 TypeError 崩溃。

参考来源

open-webui/open-webui #29686

open-webui/open-webui #29323 adjacent tool-call crash

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22011

发表回复

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