bug: include_user_info_headers crashes on chat-path user objects (‘UserModel’ object has no attribute ‘name’) — breaks hybrid search with EN

当启用 ENABLE_FORWARD_USER_INFO_HEADERS=true 且使用外部 embedding/reranking 后端时,从聊天界面(而非 API 路由)发起的 RAG 混合检索查询会因 UserModel 对象缺少 name 属性而崩溃。优先检查 backend/open_w

快速结论:当启用 ENABLE_FORWARD_USER_INFO_HEADERS=true 且使用外部 embedding/reranking 后端时,从聊天界面(而非 API 路由)发起的 RAG 混合检索查询会因 UserModel 对象缺少 name 属性而崩溃。优先检查 backend/open_webui/utils/headers.pyinclude_user_info_headers 对用户属性的访问是否缺少防御性判断。

适用环境:Open WebUI v0.11.0,启用了 ENABLE_FORWARD_USER_INFO_HEADERS=trueENABLE_RAG_HYBRID_SEARCH=true,并配置 OpenAI 兼容的外部 embedding 引擎。

最快修复方案:暂无官方确认的一步修复方案。Issue 作者提供了一种构建时补丁方案——在 include_user_info_headers 中用 getattr(..., '') or '' 保护所有用户属性访问(可优先尝试)。根治方案需要让聊天路径构造与 get_verified_user 相同字段的完整用户对象(参考 #27641)。

注意事项:防御性 getattr 补丁只能掩盖症状,不能解决用户对象构造不完整这一根本缺陷;该补丁尚未经过官方验证,且需要手动修改源码并每次升级后重新应用。

问题场景

在 Open WebUI v0.11.0 中,配置了 ENABLE_FORWARD_USER_INFO_HEADERS=true 和外部 embedding/reranking 后端后,从聊天界面针对知识库集合发起 RAG 查询时触发崩溃。相同查询通过 /api/v1/retrieval/query/collection 接口调用却能正常返回,这使得问题不易察觉。

报错原文

bug: include_user_info_headers crashes on chat-path user objects ('UserModel' object has no attribute 'name') — breaks hybrid search with ENABLE_FORWARD_USER_INFO_HEADERS

'UserModel' object has no attribute 'name'

raised from backend/open_webui/utils/headers.py →
include_user_info_headers, which accesses user.name.strip() (and
user.email.strip()) unguarded:

return {
    **headers,
    FORWARD_USER_INFO_HEADER_USER_NAME: quote(user.name.strip(), safe=' '),
    ...
}

原因分析

聊天路径构造的 UserModel 对象没有设置 name 属性(可能也未设置 email 属性),而 include_user_info_headers 直接调用 user.name.strip()user.email.strip() 未做任何防护。API 路由请求通过 get_verified_user 携带的是完整填充的 UserModel,因此能正常工作。该缺陷与 #27641 报告的根本缺陷相同——内置检索工具也构造了不完整的 UserModel

此错误的间接影响被 ENABLE_RAG_HYBRID_SEARCH=true 的混合检索回退行为放大:原生混合检索失败后,系统会回退到旧版全集合 BM25 预取,在大集合上导致 OOM 崩溃。

环境排查

  • Open WebUI 版本(确认是否为 v0.11.0)
  • 确认设置了 ENABLE_FORWARD_USER_INFO_HEADERS=true
  • 确认设置了 ENABLE_RAG_HYBRID_SEARCH=true
  • 确认使用 OpenAI 兼容的外部 embedding 引擎
  • 排查时注意:从聊天 UI 发起查询(而非 retrieval API)
  • 日志级别需调至 debug 才能看到具体的 AttributeError 堆栈

解决步骤

  1. 临时缓解——构建时补丁(可优先尝试):修改 backend/open_webui/utils/headers.pyinclude_user_info_headers,将所有用户属性访问改为 getattr(..., '') or '' 保护,包括 nameemail 及其他属性访问。
  2. 确认相关 Issue 状态:查看 #27641(内置检索工具构造不完整 UserModel)是否已有官方修复或合并方案,若已修复,更新到包含该修复的版本。
  3. 跟进官方修复:关注本 Issue 及 #27641 的后续进展,等待官方从用户对象构造层面根治,而不是依赖补丁。
  4. 升级前验证补丁兼容性:每次升级 Open WebUI 后,重新检查源码补丁是否需要重新应用。

验证方法

应用补丁后,从聊天 UI 重新对知识库集合发起 RAG 查询,确认不再出现 'UserModel' object has no attribute 'name' 报错,且大集合的混合检索不会触发旧版回退导致的 OOM。检查调试日志确认原生混合检索路径不再被 AttributeError 中断。

参考来源

open-webui/open-webui #28678

open-webui/open-webui #27641(相关:内置检索工具的不完整用户对象)

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18927

发表回复

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