快速结论:在 Open WebUI 聊天输入框中输入 $ 或 / 触发技能选择器时,已被关闭(Inactive)的技能仍会出现在列表里;选中后消息会带着原始技能标签发出,后端不会注入该技能指令,看起来像是“选了但没生效”。优先排查 Workspace → Skills 中该技能的启用状态,以及前端选择器是否过滤了 disabled 技能。
适用环境:Open WebUI dev 分支 commit bbfa876af;Git Clone 安装;Linux;Firefox;Ollama 0.34.3;默认配置。Issue 未提供 Python、CUDA、显卡或依赖版本信息。
最快修复方案:暂无确认的一步修复方案。Issue 中确认的临时规避方式是:如果确实需要使用某个技能,先在 Workspace → Skills 中把它重新打开,再从 $ 或 / 选择器里选用。
注意事项:直接把技能重新打开只是绕过 UI 过滤缺失的问题,并不能修复选择器列出 disabled 技能、以及选中后标签残留的行为。Issue 关闭时讨论串中未包含具体的代码修复提交或配置变更,因此不要依赖本页给出补丁级别的结论。
问题场景
用户在 Open WebUI 的聊天输入框中输入 $ 或 / 来调用 Workspace → Skills 中创建的技能。复现示例是创建名为 Rules、内容为 “Always answer only in French.” 的技能,然后通过技能开关把它关闭,状态显示为 Inactive。此时在聊天中输入 $rul 或 /rul,Rules 仍然出现在选择器里,可以被选中并发送。发送后模型不会收到技能指令,而是收到原始标签文本,回复仍是英文并反问用户指的是哪些规则。
同样这些技能在 Integrations 菜单、模型编辑器的技能列表、以及模型默认启用的技能列表中都不会出现。Issue 还提到 #29978 单独报告了即使技能处于开启状态,从 / 菜单选择后也不会被应用的问题,两者表现不同但相关。
报错原文
issue: disabled skills are still offered in the $ and / pickers, and picking one does nothing
实际行为描述:
Disabled skills are listed and can be picked. The message is sent with the skill's tag left in it, and the skill's instructions are not used. The model answers the tag itself, for example asking which rules are meant.
Issue 说明默认配置下没有任何日志输出(Nothing is logged.)。
原因分析
根据 Issue 的附加说明,最可能的原因是 $ 和 / 两个选择器在列出技能时,会把当前用户可见的所有技能都列出来,没有过滤掉 disabled 状态的技能;而服务端只会应用处于开启状态的技能。两端状态判断不一致,导致 UI 允许选择一个后端不会处理的技能,标签因此原样留在消息中,模型只能看到标签文本本身。
Issue 同时指出,Integrations 菜单、模型编辑器的技能列表以及模型启动时自带的技能列表已经正确排除了 disabled 技能,说明“过滤 disabled 技能”的逻辑在其他入口是存在的,只是没有覆盖 $ 和 / 这两个选择器。由于技能名称会随残留标签一起到达模型,如果技能名本身描述了指令内容,可能让问题看起来像是技能已生效;使用 Rules 这类中性名字更容易区分两种情况。
环境排查
- 确认 Open WebUI 版本或 commit:Issue 报告的是
dev分支 commitbbfa876af,测试前先确认自己的版本是否一致或更新。 - 确认安装方式:Issue 为 Git Clone;不同安装方式可能影响具体文件位置和更新方式。
- 确认浏览器与环境:Firefox、Linux;Issue 未提供 Python、CUDA、PyTorch、显卡或依赖版本,不需要在排查中假设这些值。
- 确认 Ollama 版本:Issue 为 0.34.3,仅作为环境记录,没有证据表明它与此问题直接相关。
- 确认技能状态:在 Workspace → Skills 中检查目标技能是开启还是 Inactive,并留意 Issue #30184 提到的“从编辑器保存技能会重新启用已禁用技能”的相邻问题。
- 确认日志:Issue 报告默认配置下无日志输出,因此不要把“没有日志”当作未复现的依据。
解决步骤
- 先在 Workspace → Skills 中定位目标技能,确认它的开关处于关闭(Inactive)状态。
- 在聊天输入框中分别输入
$和/加技能名前缀,观察该 disabled 技能是否仍出现在选择器列表中。如果出现,即复现了本 Issue 描述的主要症状。 - 临时规避:如果该技能确实需要被使用,先在 Workspace → Skills 中把它重新打开,再从
$或/选择器中选择它。 - 重新打开技能后,输入
$rul,选择Rules,再输入hello并发送。根据 Issue 的复现记录,开启技能时回复应为法语,关闭技能时回复为英文且反问规则含义。 - 如果关注的是从
/菜单选择技能但后端不生效的相邻问题,可同时参考 Issue #29978;该问题在技能开启时也会出现,与本 Issue 的 disabled 状态过滤问题不是同一路径。 - 等待或检查 Open WebUI 官方仓库中该 Issue 的后续修复。本 Issue 标签为
bug、confirmed issue,但讨论串中没有给出可供直接执行的代码修复命令或配置项。
验证方法
保持目标技能为 Inactive,输入 $ 或 / 加技能名前缀,确认该技能不再出现在两个选择器的候选项中,即与 Integrations 菜单的行为一致。再选一个已开启的技能执行相同操作,确认技能指令被正确注入、消息中没有残留原始标签,且模型按技能内容回复。Issue 中给出的对照验证是:技能开启时问 hello 应得到法语回复,关闭时则得到英文且反问规则含义的回复。
参考来源
相关 Issue:open-webui/open-webui #29978、open-webui/open-webui #23950、open-webui/open-webui #30184
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug] Qwen4Exp QSA indexer: per-chunk logits buffer grows with max_seq_len, caching allocator keeps every size, device OOM/hang on unified-m](https://www.chat-gpts.plus/wp-content/uploads/2026/09/56457-d01dde83-768x403.jpg)
![[Bug]: Batch invariance is broken when sequence parallelism / async TP is enabled (`VLLM_BATCH_INVARIANT=1` + `pass_config.enable_sp`)](https://www.chat-gpts.plus/wp-content/uploads/2026/09/56370-536c0b3f-768x403.jpg)
![[Bug] V1 InputBatch condense can leak stale allowed_token_ids mask to recycled row](https://www.chat-gpts.plus/wp-content/uploads/2026/09/43894-a55fb008-768x403.jpg)