issue: Knowledge collection attached to a model is not retrieved on chat completions (only `#`-reference works) → model answers ungrounded

当 Knowledge 集合(type: collection)已挂到模型上,聊天补全却只出现 statusHistory = ["knowledge_search"] 、 sources = [] ,回答变成无依据的编造内容时,通常说明模型级挂载知识没有触发自动检索。优先排查两件事:模型 meta

快速结论:当 Knowledge 集合(type: collection)已挂到模型上,聊天补全却只出现 statusHistory = ["knowledge_search"]、sources = [],回答变成无依据的编造内容时,通常说明模型级挂载知识没有触发自动检索。优先排查两件事:模型 meta 里挂载的 collection_names 是否被正确保存,以及该挂载路径是否真的调用了检索。

适用环境:Issue 报告者使用 Pip 安装的 Open WebUI v0.12.5 与 v0.13.0,macOS Golden Gate 27.2,Safari v27.2,Ollama v0.40.14;评论中复测者使用 v0.13.3,原生安装(非 Docker)。问题在 Qwen3 和 Nemotron 两个基座模型上都可复现,与具体模型无关。

最快修复方案:暂无确认的一步修复方案。Issue 中唯一被报告者确认恢复正常的处理,是卸载 Ollama 与 Open WebUI、删除残留文件与配置后原生重装,并在重装后重新导入 KB;但报告者本人也未能定位根本原因。

注意事项:完全重装会清掉配置和本地数据,属于代价很高的兜底做法,而且评论里也未说明到底是哪一项残留状态导致的,所以重装后仍不保证不复现。不建议在未备份的情况下直接操作。

问题场景

在 Open WebUI 中创建一个 Knowledge 集合(type: collection),通过 meta.knowledge 挂到一个自定义模型上(原生工具 / builtin_tools 关闭,Function Calling = Default),然后用该模型在聊天里提问。问题出在聊天补全链路:模型级挂载的知识没有被检索,助手消息只走到 knowledge_search,没有进入 sources_retrieved,也没有注入任何来源,最终模型凭训练数据作答,甚至编造出知识库里并不存在的笔记名。同一个集合如果在普通聊天中用 #<collection> 显式引用,检索正常;直接调用检索接口 POST /api/v1/retrieval/query/collection 也能返回正确分块(相关性约 0.85)。

报错方通过 API 复现时,服务端日志在 POST /api/chat/completions 与响应完成之间没有任何 open_webui.retrieval 或 hybrid-search 记录,只有后续的会话列表轮询。

报错原文

statusHistory = ["knowledge_search"]
sources       = []
done          = true
error         = null

CONTRAST — the same collection works via other paths:
  • Referenced explicitly with #<collection> in a plain chat:
      statusHistory = ["queries_generated", "sources_retrieved"]  -> grounded answer
  • Direct POST /api/v1/retrieval/query/collection
      -> returns the correct chunks (relevance scores ~0.85)

原因分析

从 Issue 给出的证据看,向量索引和检索引擎本身是健康的(# 引用与直接查询接口都能出结果),问题出在“模型级挂载知识”的自动检索触发环节:状态停在 knowledge_search,没有执行集合查询,也没有生成来源。可能原因包括:模型 meta 中保存的 collection_names 在保存或读取时被丢弃(关联 Issue #26035 报告过 ModelEditor 保存时丢掉 collection id 的情况),导致聊天时挂载关系为空;或者聊天补全路径没有真正调用检索逻辑(关联 Issue #31839 报告过模型级知识绑定与 # 快捷引用都不触发检索、日志无检索活动)。Issue 正文没有给出代码级定位,上述均为可能原因。

环境排查

  • 确认 Open WebUI 版本:v0.12.5、v0.13.0 均复现,评论中 v0.13.3 重装后暂时正常,但版本差异与问题之间没有明确因果关系。
  • 确认安装方式:Issue 报告为 Pip 安装,评论中为原生安装(非 Docker),两种方式都出现过该现象。
  • 确认 Ollama 版本:Ollama v0.40.14;问题与基座模型无关(Qwen3、Nemotron 均复现)。
  • 确认模型配置:Knowledge 集合是否仍以 collection 身份挂在模型 meta 中,保存后 collection_names 是否仍包含该集合 id。
  • 确认模型设置:原生工具 / builtin_tools 是否关闭,Function Calling 是否保持 Default,是否与报告环境一致。
  • 确认检索面健康:用 #<collection> 引用或直接调用 POST /api/v1/retrieval/query/collection 能否返回分块;能返回说明索引侧正常,问题在触发侧。

解决步骤

  1. 先建立对照基线:在普通聊天中用 #<collection> 引用同一集合提问,并直接调用 POST /api/v1/retrieval/query/collection 传入集合 id 与查询。若两者都能返回正确分块,可先排除向量索引故障。
  2. 检查模型保存后的挂载状态:打开模型编辑器,确认 Knowledge 集合仍然挂载;保存后再次查看模型的 collection_names 是否仍包含该集合 id(对应关联 Issue #26035 的可能原因)。
  3. 复现时检查服务端日志:在 POST /api/chat/completions 与响应完成之间查找是否存在 open_webui.retrieval 或 hybrid-search 日志。若完全没有,说明检索未被调用。
  4. 检查助手消息状态:通过 GET /api/v1/chats/{id} 查看 history.messages,确认 statusHistory 是否停留在 knowledge_search,sources 是否为空。
  5. 可优先尝试在干净的配置状态下重装:Issue 报告者的做法是卸载 Ollama 与 Open WebUI、删除能找到的残留文件与配置,再原生分步重装(不使用 Docker),最后重新导入 KB。该方案未经根本原因确认,仅作为兜底尝试。
  6. 若重装后仍复现,将日志缺失情况、挂载的 collection_names 截图与两个对照路径的结果补充到 Issue 中,便于维护者定位触发逻辑。

验证方法

用挂载了该集合的模型在聊天中提问,然后通过 GET /api/v1/chats/{id} 检查助手消息:statusHistory 应出现 sources_retrieved(而不仅是 knowledge_search),sources 非空;同时服务端日志应能看到检索相关记录;回答内容应能对应到集合中真实存在的文档,而不是虚构的笔记名。若以上任一项仍未满足,则问题未解决。

参考来源

open-webui/open-webui #33772

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 35203

发表回复

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