文章目录
- 前言
- 一、 方法详解
- 1. get_service
- 2. get_service_by_name
- 3. get_default
- 二、 代码注释
- 总结
前言
上一篇我们在update_docs
里看到了 KBServiceFactory.get_service_by_name(knowledge_base_name)
,这一篇我们一起来看看KBServiceFactory
类
KBServiceFactory
是一个用于获取不同类型知识库服务的工厂类。该类提供了静态方法,根据传入的知识库名称和向量存储类型,返回对应的知识库服务实例。以下是对该类及其方法的详细介绍。
提示:以下是本篇文章正文内容,下面案例可供参考
一、 方法详解
1. get_service
@staticmethod
def get_service(kb_name: str,vector_store_type: Union[str, SupportedVSType],embed_model: str = EMBEDDING_MODEL,) -> KBService:
功能: 根据知识库名称和向量存储类型获取相应的知识库服务实例。
参数:
kb_name
(str): 知识库名称。vector_store_type
(Union[str, SupportedVSType]): 向量存储类型,可以是字符串或SupportedVSType
枚举类型。embed_model
(str): 嵌入模型名称,默认为EMBEDDING_MODEL
。
返回: 返回对应的知识库服务实例 KBService
。
实现逻辑:
- 如果
vector_store_type
是字符串,则将其转换为SupportedVSType
枚举类型。 - 根据
vector_store_type
的值,导入相应的知识库服务模块并返回其实例:FAISS
: 返回FaissKBService
实例。PG
: 返回PGKBService
实例。MILVUS
: 返回MilvusKBService
实例。ZILLIZ
: 返回ZillizKBService
实例。DEFAULT
: 返回默认的MilvusKBService
实例。ES
: 返回ESKBService
实例。CHROMADB
: 返回ChromaKBService
实例。- 再次判断
DEFAULT
,返回DefaultKBService
实例。
2. get_service_by_name
@staticmethod
def get_service_by_name(kb_name: str) -> KBService:
功能: 根据知识库名称从数据库中加载相应的知识库服务。
参数:
kb_name
(str): 知识库名称。
返回: 返回对应的知识库服务实例 KBService
,如果知识库不存在则返回 None
。
实现逻辑:
- 调用
load_kb_from_db
函数从数据库中加载知识库信息,获取向量存储类型和嵌入模型名称。 - 如果知识库不存在于数据库中,则返回
None
。 - 调用
get_service
方法获取相应的知识库服务实例并返回。
3. get_default
@staticmethod
def get_default():return KBServiceFactory.get_service("default", SupportedVSType.DEFAULT)
功能: 获取默认的知识库服务。
返回: 返回默认的知识库服务实例 KBService
。
实现逻辑: 调用 get_service
方法,传入默认的知识库名称 “default” 和向量存储类型 SupportedVSType.DEFAULT
,获取默认的知识库服务实例并返回。
二、 代码注释
class KBServiceFactory:@staticmethoddef get_service(kb_name: str,vector_store_type: Union[str, SupportedVSType],embed_model: str = EMBEDDING_MODEL,) -> KBService:# 如果vector_store_type是字符串,则将其转换为SupportedVSType枚举类型if isinstance(vector_store_type, str):vector_store_type = getattr(SupportedVSType, vector_store_type.upper())# 根据向量存储类型返回对应的知识库服务实例if SupportedVSType.FAISS == vector_store_type:from server.knowledge_base.kb_service.faiss_kb_service import FaissKBServicereturn FaissKBService(kb_name, embed_model=embed_model)elif SupportedVSType.PG == vector_store_type:from server.knowledge_base.kb_service.pg_kb_service import PGKBServicereturn PGKBService(kb_name, embed_model=embed_model)elif SupportedVSType.MILVUS == vector_store_type:from server.knowledge_base.kb_service.milvus_kb_service import MilvusKBServicereturn MilvusKBService(kb_name, embed_model=embed_model)elif SupportedVSType.ZILLIZ == vector_store_type:from server.knowledge_base.kb_service.zilliz_kb_service import ZillizKBServicereturn ZillizKBService(kb_name, embed_model=embed_model)elif SupportedVSType.DEFAULT == vector_store_type:from server.knowledge_base.kb_service.milvus_kb_service import MilvusKBServicereturn MilvusKBService(kb_name,embed_model=embed_model) # other milvus parameters are set in model_config.kbs_configelif SupportedVSType.ES == vector_store_type:from server.knowledge_base.kb_service.es_kb_service import ESKBServicereturn ESKBService(kb_name, embed_model=embed_model)elif SupportedVSType.CHROMADB == vector_store_type:from server.knowledge_base.kb_service.chromadb_kb_service import ChromaKBServicereturn ChromaKBService(kb_name, embed_model=embed_model)elif SupportedVSType.DEFAULT == vector_store_type: # kb_exists of default kbservice is False, to make validation easier.from server.knowledge_base.kb_service.default_kb_service import DefaultKBServicereturn DefaultKBService(kb_name)@staticmethoddef get_service_by_name(kb_name: str) -> KBService:# 从数据库中加载知识库信息_, vs_type, embed_model = load_kb_from_db(kb_name)# 如果知识库不存在于数据库中,返回Noneif _ is None: # kb not in db, just return Nonereturn None# 获取对应的知识库服务实例并返回return KBServiceFactory.get_service(kb_name, vs_type, embed_model)@staticmethoddef get_default():# 获取默认的知识库服务实例并返回return KBServiceFactory.get_service("default", SupportedVSType.DEFAULT)
总结
KBServiceFactory
类通过静态方法 get_service
、get_service_by_name
和 get_default
,提供了一种灵活且统一的方式来获取不同类型的知识库服务实例。根据向量存储类型和知识库名称,KBServiceFactory
可以创建并返回合适的知识库服务,为知识库的管理和使用提供了极大的便利。
另外,它实际的返回值是根据 vector_store_type 的不同而不同的,例如
if SupportedVSType.FAISS == vector_store_type:from server.knowledge_base.kb_service.faiss_kb_service import FaissKBServicereturn FaissKBService(kb_name, embed_model=embed_model)
下一节,我们会一起来看看FaissKBService