
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 列,布尔值在写入时序列化为 JSONfalse/true,读取时反序列化为 PythonFalse/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.py或config.py等文件
解决步骤
- 使用数据库客户端直接查询 config 表中对应行的 value 字段类型,确认其是布尔值(
false)而非字符串('false')。例如在 SQLite 中:
SELECT key, value, typeof(value) FROM config WHERE key = 'memories.system_context.enable'; - 如果希望环境变量始终覆盖持久化配置,设置
ENABLE_PERSISTENT_CONFIG=False环境变量。 - 如果在升级后遇到此问题,尝试完全重建 Docker 容器(删除旧容器和卷)再部署最新版本。
- 若仍能复现,请提供完整的系统提示输出(system prompt)以及 config 表中相关行的完整内容,以便进一步排查。
验证方法
在 Admin 面板中将 Memory System Context 设为 OFF 并保存后,重新发起会话,检查模型 system prompt 中是否仍然存在 <memory_context> 块。如果不存在,说明问题已解决。同时可通过数据库查询确认 value 字段为布尔 false(而不是字符串 'false')。



