Skip to content

[Bug][数据一致性] 删除知识库文件时 Milvus 向量删除失败被吞,已删除文件的内容仍可被检索 #867

Description

@Alex-Fleet

标题: [Bug][数据一致性] 删除知识库文件时 Milvus 向量删除失败被吞,已删除文件的内容仍可被检索

正文:

问题

backend/package/yuxi/knowledge/implementations/milvus.pydelete_file_chunks_only(约 1234 行)删除文件时,删除 PostgreSQL 中的 chunks(chunk_repo.delete_by_file_id),_delete_file_chunks_from_milvus 删除 Milvus 向量——而后者整个包在 try/except 里,失败只 logger.error

await chunk_repo.delete_by_file_id(file_id)
collection = await self._get_milvus_collection(kb_id)
if collection:
    try:
        await self._delete_file_chunks_from_milvus(collection, file_id)
    except Exception as e:
        logger.error(f"Error checking file existence in Milvus: {e}")

若此时 Milvus 不可用/删除失败:PG 的 chunks 和文件记录已删除,但向量仍残留在 Milvus。而检索链路(aquery 纯向量检索)不校验 file_id 是否仍存在于 PG,结果就是——

文件已从知识库删除,其内容仍会出现在后续检索结果中,且无对账/清理机制自愈。

建议

  1. 调整删除顺序并改为"先删向量、后删 PG"(向量删除是删除是否成功的判定点),或使用"标记删除/墓碑"方案:PG 删除后,检索时校验 file_id 仍存在;
  2. Milvus 删除失败不应静默吞掉:至少抛错让上层把文件状态置为删除失败、可重试;或进入补偿队列重试;
  3. 增加定期对账任务(比对 PG file_id 与 Milvus 中残留向量)清理孤儿向量。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions