diff --git a/knowledge/collection.py b/knowledge/collection.py index ae06685..26b3ee1 100644 --- a/knowledge/collection.py +++ b/knowledge/collection.py @@ -348,6 +348,8 @@ class CollectionMixin: - department: 所属部门 - description: 描述 """ + # 从磁盘重新加载元数据,确保多 worker 进程间状态一致 + self._metadata = self._load_metadata() result = [] # 扫描 base_path 下的所有子目录作为向量库 @@ -382,16 +384,31 @@ class CollectionMixin: self._save_metadata() + stale_collections = [] + for name, info in self._metadata.get("collections", {}).items(): - collection = self.get_collection(name) - result.append(CollectionInfo( - name=name, - display_name=info.get("display_name", name), - document_count=collection.count() if collection else 0, - created_at=info.get("created_at", ""), - department=info.get("department", ""), - description=info.get("description", "") - )) + try: + collection = self.get_collection(name) + result.append(CollectionInfo( + name=name, + display_name=info.get("display_name", name), + document_count=collection.count() if collection else 0, + created_at=info.get("created_at", ""), + department=info.get("department", ""), + description=info.get("description", "") + )) + except Exception as e: + logger.warning( + f"跳过异常向量库 '{name}': {e},可能是 ChromaDB 数据目录已丢失" + ) + stale_collections.append(name) + + # 清理元数据中指向已失效集合的条目 + if stale_collections: + for name in stale_collections: + self._metadata.get("collections", {}).pop(name, None) + logger.info(f"清理失效向量库元数据: {name}") + self._save_metadata() return result