diff --git a/knowledge/collection.py b/knowledge/collection.py index ae06685..7ae9e5f 100644 --- a/knowledge/collection.py +++ b/knowledge/collection.py @@ -382,16 +382,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