issue: Boolean config values may be silently ignored when retrieved from database

在 Open WebUI(Docker 或 pip 安装)的 Admin 面板中将某个布尔开关设为 OFF(例如 Memory System Context ),保存后该功能仍然生效。用户预期关闭的布尔开关应该阻止对应功能的执行。

issue: Boolean config values may be silently ignored when retrieved from database

issue: Boolean config values may be silently ignored when retrieved from database

快速结论:此问题在数据库层面不存在,因为 config 表使用 SQLAlchemy JSON 列,读写时能正确序列化布尔值。如果感觉布尔配置被忽略,优先检查数据库配置表中对应行的实际类型,以及环境变量与持久化配置的优先级关系。

问题场景

在 Open WebUI(Docker 或 pip 安装)的 Admin 面板中将某个布尔开关设为 OFF(例如 Memory System Context),保存后该功能仍然生效。用户预期关闭的布尔开关应该阻止对应功能的执行。

报错原文

# 用户观察到的现象,非实际报错输出:
Boolean configuration values retrieved from the database are evaluated incorrectly in truthiness checks, causing False settings to be silently ignored. Features toggled "off" via the admin UI remain active despite the toggle being disabled.

原因分析

Issue 讨论中开发者明确否定了最早的推测(数据库返回字符串 'false' 导致 bool('false') = True 的 bug),并给出以下关键事实:

  • config 表的 value 列是 SQLAlchemy JSON 列,布尔值在写入时序列化为 JSON false/true,读取时反序列化为 Python False/True,在所有支持的数据库后端上行为一致。
  • 读取已持久化的 False 时,其类型是 bool,而非字符串 'false'
  • 所有写入路径都保证了布尔类型:环境变量解析使用 os.getenv(...).lower() == 'true';Admin 端点通过 pydantic 模型的 bool 类型字段验证;per-key 迁移也会重新插入已存在的布尔值。
  • 如果环境中同时设置了环境变量(如 ENABLE_MEMORY_SYSTEM_CONTEXT=False)并存在数据库记录,持久化配置会优先于环境变量,这是 PersistentConfig 的设计行为,不是 bug。

报告者后续也承认无法稳定复现该问题。

环境排查

  • Open WebUI 版本(建议确认是否在最新版本上)
  • 安装方式:Docker / pip
  • 数据库类型(SQLite / PostgreSQL / MySQL 等)
  • 是否有设置 ENABLE_PERSISTENT_CONFIG 环境变量
  • 确认之前是否通过自定义过滤器或第三方脚本修改过 middleware.pyconfig.py 等文件

解决步骤

  1. 使用数据库客户端直接查询 config 表中对应行的 value 字段类型,确认其是布尔值(false)而非字符串('false')。例如在 SQLite 中:
    SELECT key, value, typeof(value) FROM config WHERE key = 'memories.system_context.enable';
  2. 如果希望环境变量始终覆盖持久化配置,设置 ENABLE_PERSISTENT_CONFIG=False 环境变量。
  3. 如果在升级后遇到此问题,尝试完全重建 Docker 容器(删除旧容器和卷)再部署最新版本。
  4. 若仍能复现,请提供完整的系统提示输出(system prompt)以及 config 表中相关行的完整内容,以便进一步排查。

验证方法

在 Admin 面板中将 Memory System Context 设为 OFF 并保存后,重新发起会话,检查模型 system prompt 中是否仍然存在 <memory_context> 块。如果不存在,说明问题已解决。同时可通过数据库查询确认 value 字段为布尔 false(而不是字符串 'false')。

参考来源

open-webui/open-webui #26761

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13834

发表回复

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