TypeError: ‘>’ not supported between instances of ‘NoneType’ and ‘int’`. The exception is swallowed and `index_file` takes its “vector chunks are missing” repair path even though the chunks e

当 Open WebUI 使用 Milvus 作为向量库,并把文件加入知识库时,异步查询没有传 limit ,导致 limit=None 被传给 Milvus,触发 TypeError: '>' not supported between instances of 'NoneType' and 'i

快速结论:当 Open WebUI 使用 Milvus 作为向量库,并把文件加入知识库时,异步查询没有传 limit,导致 limit=None 被传给 Milvus,触发 TypeError: '>' not supported between instances of 'NoneType' and 'int';该异常被吞掉后,index_file 误判“向量块缺失”,进入修复分支,对文件重复嵌入并产生重复 chunk。优先排查 Milvus 路径下知识库添加文件时的查询参数与后端日志。

适用环境:Open WebUI v0.13.0(Docker,镜像 ghcr.io/open-webui/open-webui);应用数据库为 Postgres;VECTOR_DB=milvus,Milvus standalone v2.4.17;pymilvus 2.6.14(Issue 称其为固定版本);宿主机 macOS 26,Docker Desktop,容器为 Linux。Issue 提到 dev 分支相关两处代码路径与 v0.13.0 一致,但未实际运行 dev 构建。

最快修复方案:暂无确认的一步修复方案。Issue 中未提供已验证的临时规避或配置修改,仅关联了 PR #33745 作为修复方向;在修复合入前,可优先尝试避免通过 Milvus 路径对同一文件执行“加入知识库”操作,以减少重复嵌入与重复 chunk。

注意事项:重复插入不会因集合已存在而自动停止:日志会出现 “collection file-<id> already exists”,但因 add=True 仍继续写入。Issue 未给出清理重复 chunk 的正式步骤,操作前应先备份 Milvus 数据;修复是否完全覆盖检索与知识库添加的其它路径,需以实际合入版本验证。

问题场景

在 Open WebUI v0.13.0 中,使用 Milvus 作为向量数据库(VECTOR_DB=milvus),从知识库页面上传文档,或先上传文件再执行“add to knowledge”。上传阶段会正常写入 file-<id> 集合;但在知识库添加阶段,后端查询 file-<id> 时未传 limit,从而触发异常并进入错误的修复路径。

报错原文

TypeError: '>' not supported between instances of 'NoneType' and 'int'

ERROR | open_webui.retrieval.vector.dbs.milvus:query:542 - Error querying collection open_webui_file_bc4b146e_... with filter 'metadata["file_id"] == "bc4b146e-..."' and limit None: '>' not supported between instances of 'NoneType' and 'int'

原因分析

最可能的原因是:ASYNC_VECTOR_DB_CLIENT.query() 在知识库添加文件的查询路径中没有传入 limit,而 async_client.py 将 limit=None 继续传给 Milvus 客户端;milvus.py 中执行类似 limit if limit > 0 else -1 的判断时,对 None 与 int 做比较,抛出 TypeError。

随后 query() 记录异常并返回 None,使 has_vector_results() 为 False。index_file 因此误判 file-<id> 的向量块缺失,进入 elif stored_content is not None 的修复分支:重新切分已存储文本,并把 file-<id> 追加到 collection_names,导致文件再次嵌入知识库集合,同时再次写入 file-<id>。Issue 给出的 1,076 chunk 文档结果中,file-<id> 有 2,152 行,知识库集合有 1,076 行,即同一文件发生三次完整嵌入。

环境排查

  • 确认 Open WebUI 版本为 v0.13.0,并确认是否使用 Docker 镜像 ghcr.io/open-webui/open-webui。
  • 确认 VECTOR_DB=milvus,Milvus 为 standalone 版本(Issue 为 v2.4.17),pymilvus 为 2.6.14。
  • 确认应用数据库为 Postgres,避免把其它数据库或部署差异混入问题判断。
  • 查看后端日志中是否出现 “Querying collection … limit: None” 以及上述 TypeError traceback。
  • 检查上传后是否出现两次 “generating embeddings for file-<id>”,以及一次 “generating embeddings for <knowledge id>”。
  • 用 Issue 提供的 Milvus 查询统计 metadata["file_id"] 对应行数,确认是否为 chunk 数的 2 倍。

解决步骤

  1. 复现并确认问题:在 Milvus 向量库环境下,从知识库页面上传一个文档,观察后端日志是否出现 limit: None 与 TypeError。
  2. 检查重复写入:对 open_webui_file_<id> 集合按 metadata["file_id"] == "<id>" 统计行数,确认是否约为原始 chunk 数的 2 倍。
  3. 可优先尝试规避:在修复发布前,避免对同一文件重复执行“add to knowledge”,并避免对已产生重复 chunk 的文件再次触发知识库添加。
  4. 关注修复进展:Issue 关联 PR #33745;待包含修复的版本发布后,再重新执行知识库添加流程并验证。
  5. 如需清理已产生的重复 chunk,Issue 未提供正式清理命令或脚本;应先备份 Milvus 集合数据,再按实际集合结构谨慎处理,避免误删正常向量。

验证方法

修复后重新执行“上传文件并加入知识库”,确认后端日志中不再出现 limit: None 导致的 TypeError;确认文件不再被重复嵌入 file-<id> 集合,且知识库集合只保留一份预期 chunk。用 Milvus 查询 metadata["file_id"] 的计数,结果应等于文档实际 chunk 数,而不是 2 倍;同时确认不会出现 “collection file-<id> already exists” 后仍插入的情况。

参考来源

open-webui/open-webui #33744

关联修复方向:open-webui/open-webui PR #33745

相关历史 Issue:#17088、#18485、#27987

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 33066

发表回复

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