快速结论:此报错发生在 Open WebUI 管理面板中模型自定义设置(如系统提示词、内置工具开关、工具服务器分配)保存成功但运行时完全不生效的场景。优先检查模型数据中 base_model_id 是否与 id 相同,以及 backend/open_webui/utils/models.py 中 get_all_models() 函数的合并逻辑。
适用环境:Open WebUI 0.11.0(Issue 确认版本);OpenAI 兼容 API 提供商(如 Ollama、vLLM、vLLM-MLX);浏览器为 Safari(iOS/macOS)。操作系统、Python、CUDA、显卡等未在 Issue 中提供证据,不做补充。
最快修复方案:修改 backend/open_webui/utils/models.py 第 158 行,将合并分支条件从 if custom_model.base_model_id is None: 改为 if custom_model.base_model_id is None or custom_model.base_model_id == custom_model.id:。该单行修复已在 Issue 评论中通过 py_compile 和 ruff format --diff 验证,但尚未合并到官方分支。
注意事项:Issue 评论指出 base_model_id == id 本身不应是合法状态——正常管理面板编辑路径会强制 base_model_id: null,克隆路径会改写 id 为 ${model.id}-clone。因此该修复是运行时兜底方案,根本治理应将此类脏数据规范化(写入/导入时强制置为 None),但该规范化方案仅为评论推测,未经验证。
问题场景
用户在 Open WebUI 管理面板中点击已有模型(如 qwen3.6、gpt-4o),修改任意设置(系统提示词、启用/禁用内置工具、分配工具服务器、切换 function calling 等),保存后新建聊天时发现自定义设置完全没有生效。检查 /api/models 响应,info.meta 中缺少已保存的字段。
报错原文
Model workspace overrides silently skipped when base_model_id equals model id
In get_all_models(), the merge logic has two branches:
1. if custom_model.base_model_id is None: — treats it as a direct override of a base model
2. elif custom_model.is_active: — treats it as a separate custom model
When base_model_id == id (e.g., both are "gpt-4o" or "qwen3.6-uncensored"),
the first branch doesn't match (base_model_id is not None),
and the second branch skips it (id in existing_ids). The DB overrides are never applied.
原因分析
可能原因:get_all_models() 函数中合并数据库自定义配置的逻辑存在分支缺陷。当某个模型的 base_model_id 与 id 值相同(例如都是 "gpt-4o")时:
- 第一个分支要求
base_model_id is None,此情况不满足,不会走“直接覆盖基础模型”的路径; - 第二个分支会先执行
if custom_model.id in existing_ids: continue,由于该 ID 已经被 API 提供商的基线模型占用,会被直接跳过。
结果是:数据库中的自定义覆盖(builtinTools、toolIds、defaultFeatureIds、system、function_calling 等)在运行时完全丢失,用户界面看起来保存成功但实际没有任何效果。base_model_id == id 这种自引用状态可能来自导入、API、历史遗留数据或边缘创建流程,而非正常管理面板操作产生。
环境排查
- 确认 Open WebUI 版本是否为 0.11.0(或其他存在同样逻辑的版本)
- 在管理面板中检查目标模型的
base_model_id是否与id完全相同 - 确认模型来自 API 提供商(OpenAI 兼容接口、Ollama、vLLM 等),而非本地直接加载
- 通过
/api/models接口检查响应中info.meta是否包含已保存的自定义字段 - 查看
backend/open_webui/utils/models.py中get_all_models()函数的合并分支逻辑
解决步骤
- 打开
backend/open_webui/utils/models.py,定位到get_all_models()函数中处理自定义模型的合并逻辑(Issue 描述为第 158 行附近)。 - 将合并分支条件从
if custom_model.base_model_id is None:修改为:if custom_model.base_model_id is None or custom_model.base_model_id == custom_model.id: - 执行语法检查确认修改无误:
py_compile和ruff format --diff(Issue 评论已用此方式验证,无其他格式变更)。 - 重启 Open WebUI 服务,使修改后的 Python 代码生效。
- 若您不打算修改代码,可优先尝试在管理面板中重新编辑该模型,检查保存时
base_model_id是否被置为null(Issue 评论指出正常 UI 编辑路径会提交base_model_id: null),或通过 API/数据库手动将异常的base_model_id修正为null——但此方法未在 Issue 中验证,仅作为替代方案。 - 如需彻底修复脏数据,可考虑在写库/导入时规范化
base_model_id,将自引用值强制置为None(此建议仅为评论推测,未经实测)。
验证方法
修改代码并重启服务后,回到管理面板编辑该模型,修改一个易观察的设置(如系统提示词或内置工具开关),保存后新建聊天验证自定义是否生效。同时检查 /api/models 响应中 info.meta 是否包含刚保存的字段。若字段出现且运行时行为符合预期,说明修复生效。若仍有问题,请继续检查是否存在其他数据源导致的 base_model_id == id 状态。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug]: vllm: error: unrecognized arguments: --task embedding](https://www.chat-gpts.plus/wp-content/uploads/2026/08/35603-f55775b0-768x403.jpg)