question: Function is switched to inactive after a load error

当 Open WebUI 的 Function(函数/过滤器)在加载执行时抛错,系统会自动把该 Function 的 is_active 置为 False (切换为停用),这是官方设计行为而非 Bug。优先排查:修复 Function 代码中的依赖或语法错误后,前往“管理面板 → Functions

快速结论:当 Open WebUI 的 Function(函数/过滤器)在加载执行时抛错,系统会自动把该 Function 的 is_active 置为 False(切换为停用),这是官方设计行为而非 Bug。优先排查:修复 Function 代码中的依赖或语法错误后,前往“管理面板 → Functions”手动重新开启开关。

适用环境:Open WebUI(问题验证于 2a960a5 提交版本);涉及全局安全过滤器(is_global=True)、Python 环境及 Function 导入的第三方依赖。未提供具体的操作系统、CUDA、显卡等硬件环境证据。

最快修复方案:暂无“不修改代码即可恢复”的一步方案;修复代码错误后需手动重新启用:在管理面板 Functions 页面将对应开关拨回开启状态(对应 API:POST /api/v1/functions/id/{id}/toggle)。

注意事项:触发错误的请求会失败(fail closed),但后续请求会因过滤器被自动停用而不再被拦截——对于全局安全过滤器,这相当于静默绕过,需及时修复并重新启用。该自动停用机制是官方有意设计(2024 年 9 月引入),并非缺陷。

问题场景

在 Open WebUI 中,用户配置了自定义 Function(典型场景为全局安全检查过滤器)。当该 Function 的存储代码在加载执行时抛出异常(例如:所依赖的第三方库被移除/升级、Python 版本变化导致可选导入失败、代码编辑保存不完整等),系统会触发自动停用逻辑。此后该 Function 对所有模型、所有用户均不再生效,且管理界面无自动恢复机制。

报错原文

Error loading module: <function_id>: <the error>
# Functions.update_function_by_id(function_id, {'is_active': False})

原因分析

这是官方设计行为。核心逻辑位于 backend/open_webui/utils/plugin.pyload_function_module_by_id:当执行 Function 存储代码抛出异常时,系统会捕获异常、从 sys.modules 中移除模块,并将数据库中该 Function 的 is_active 置为 False 后重新抛出异常。该设计的目的是避免一个已损坏的 Function 在每次请求时反复报错。仅返回 is_active=True 的过滤器(get_active_filter_ids),因此自动停用后 Function 不再参与任何后续请求。此行为在官方文档“When a Function Fails to Load”一节中有明确描述。

环境排查

  • 确认 Open WebUI 版本(问题报告于 2a960a5,自动停用机制自 2024 年 9 月 cf86ba778 起引入)。
  • 检查 Function 代码中导入的所有第三方依赖是否仍可用、版本是否兼容。
  • 确认 Python 版本变动是否导致某些可选导入失败。
  • 查看 Open WebUI 服务端日志,定位 Error loading module: <function_id> 的完整堆栈。

解决步骤

  1. 查看 Open WebUI 服务端日志,找到 Error loading module 对应的 Function ID 及具体 Python 异常堆栈。
  2. 根据堆栈信息修复 Function 代码:恢复缺失的依赖、调整 import 语句或修正语法错误。
  3. 进入“管理面板(Admin Panel)→ Functions”页面,找到对应条目。
  4. 手动将开关拨回“开启”状态(或调用 POST /api/v1/functions/id/{id}/toggle)。
  5. 发起测试请求,确认 Function 恢复正常工作。

验证方法

修复代码并重新启用后,发送一个会触发该 Function 逻辑的测试请求,观察:1) 服务端不再出现 Error loading module 日志;2) Function 的预期行为(如安全过滤器拦截特定内容)恢复正常;3) 管理面板中该 Function 开关保持“开启”状态。

参考来源

open-webui/open-webui #29681

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22077

发表回复

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