From 2838020580daab3245a3ca68e6f680466b9ad9e5 Mon Sep 17 00:00:00 2001 From: youhuanghe <1051233107@qq.com> Date: Sat, 18 Apr 2026 10:28:28 +0000 Subject: [PATCH] refactor(vector): use lazy imports for vector database backends Move imports from module-level to inside initialize() method to avoid loading unnecessary vector database dependencies at startup. --- src/langbot/pkg/vector/mgr.py | 19 ++++++++++++++----- src/langbot/pkg/vector/vdbs/__init__.py | 6 ------ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/langbot/pkg/vector/mgr.py b/src/langbot/pkg/vector/mgr.py index db3709d5..73ed5d74 100644 --- a/src/langbot/pkg/vector/mgr.py +++ b/src/langbot/pkg/vector/mgr.py @@ -2,11 +2,6 @@ from __future__ import annotations from ..core import app from .vdb import VectorDatabase, SearchType -from .vdbs.chroma import ChromaVectorDatabase -from .vdbs.qdrant import QdrantVectorDatabase -from .vdbs.seekdb import SeekDBVectorDatabase -from .vdbs.milvus import MilvusVectorDatabase -from .vdbs.pgvector_db import PgVectorDatabase class VectorDBManager: @@ -22,17 +17,25 @@ class VectorDBManager: vdb_type = kb_config.get('use') if vdb_type == 'chroma': + from .vdbs.chroma import ChromaVectorDatabase + self.vector_db = ChromaVectorDatabase(self.ap) self.ap.logger.info('Initialized Chroma vector database backend.') elif vdb_type == 'qdrant': + from .vdbs.qdrant import QdrantVectorDatabase + self.vector_db = QdrantVectorDatabase(self.ap) self.ap.logger.info('Initialized Qdrant vector database backend.') elif vdb_type == 'seekdb': + from .vdbs.seekdb import SeekDBVectorDatabase + self.vector_db = SeekDBVectorDatabase(self.ap) self.ap.logger.info('Initialized SeekDB vector database backend.') elif vdb_type == 'milvus': + from .vdbs.milvus import MilvusVectorDatabase + # Get Milvus configuration milvus_config = kb_config.get('milvus', {}) uri = milvus_config.get('uri', './data/milvus.db') @@ -42,6 +45,8 @@ class VectorDBManager: self.ap.logger.info('Initialized Milvus vector database backend.') elif vdb_type == 'pgvector': + from .vdbs.pgvector_db import PgVectorDatabase + # Get pgvector configuration pgvector_config = kb_config.get('pgvector', {}) connection_string = pgvector_config.get('connection_string') @@ -60,9 +65,13 @@ class VectorDBManager: self.ap.logger.info('Initialized pgvector database backend.') else: + from .vdbs.chroma import ChromaVectorDatabase + self.vector_db = ChromaVectorDatabase(self.ap) self.ap.logger.warning('No valid vector database backend configured, defaulting to Chroma.') else: + from .vdbs.chroma import ChromaVectorDatabase + self.vector_db = ChromaVectorDatabase(self.ap) self.ap.logger.warning('No vector database backend configured, defaulting to Chroma.') diff --git a/src/langbot/pkg/vector/vdbs/__init__.py b/src/langbot/pkg/vector/vdbs/__init__.py index 477724ca..1ec2dedc 100644 --- a/src/langbot/pkg/vector/vdbs/__init__.py +++ b/src/langbot/pkg/vector/vdbs/__init__.py @@ -1,7 +1 @@ """Vector database implementations for LangBot.""" - -from .chroma import ChromaVectorDatabase -from .qdrant import QdrantVectorDatabase -from .seekdb import SeekDBVectorDatabase - -__all__ = ['ChromaVectorDatabase', 'QdrantVectorDatabase', 'SeekDBVectorDatabase']