知识库的创建(4) - KBServiceFactory:获取不同类型知识库服务的工厂类

文章目录

  • 前言
  • 一、 方法详解
    • 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

实现逻辑:

  1. 如果 vector_store_type 是字符串,则将其转换为 SupportedVSType 枚举类型。
  2. 根据 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

实现逻辑:

  1. 调用 load_kb_from_db 函数从数据库中加载知识库信息,获取向量存储类型和嵌入模型名称。
  2. 如果知识库不存在于数据库中,则返回 None
  3. 调用 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_serviceget_service_by_nameget_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue--》从零开始打造交互体验一流的电商平台(三)

今天开始使用 vue3 + ts 搭建一个电商项目平台,因为文章会将项目的每处代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多…

leetcode刷题(46-50)

算法是码农的基本功,也是各个大厂必考察的重点,让我们一起坚持写题吧。 遇事不决,可问春风,春风不语,即是本心。 我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦…

【机器学习】 第1章 概述

一、概念 1.机器学习是一种通过先验信息来提升模型能力的方式。 即从数据中产生“模型”( model )的算法,然后对新的数据集进行预测。 2.数据集(Dataset):所有数据的集合称为数据集。 训练集:用来训练出一个适合模…

什么是无限铸币攻击?它是如何运作的?

一、无限铸币攻击解释 无限铸币攻击是指攻击者操纵合约代码不断铸造超出授权供应限制的新代币。 这种黑客行为在去中心化金融 (DeFi) 协议中最为常见。这种攻击通过创建无限数量的代币来损害加密货币或代币的完整性和价值。 例如,一名黑客利用了 Paid 网络的智能…

ansible 模块进阶及变量

yum 模块进阶 - name: install pkgs hosts: webservers tasks: - name: install web pkgs # 此任务通过yum安装三个包 yum: name: httpd,php,php-mysqlnd state: present # 根据功能等,可以将一系列软件放到一个组中,安装软件包组,将会把很…

shell脚本之数组及冒泡排序

1.数组定义:在集合当中指定多个元素,元素的类型可以是整数、字符串及浮点。 2.数组作用:一次性的定义多个元素,可以为变量赋值提供便利。 3.数组的定义方法: 数组名(a b c d) 数组名不能重复…

【速过】2024年9月三级数据库技术题库+知识点总结

24年3月已经考了一次数据库,实话,三级比二级简单一些,知识点都比较集中,50%-60%是题库里面的原题,考前只要好好的过一遍题库考到80以上完全没有问题,你实在不会答案背下来也是可以的,不过更多的…

kotlin函数

1、函数定义 // 下边定义了main函数 fun main() {} 2、函数的类型 // foo函数定义 fun foo () {} // 对应无参类型 () -> Unit fun foo (a: Int):String {} // 对应有参类型 (Int) -> String 3、函数的引用 函数的引用类似C语言中的函数指针,可用于函数传…

外包干了2年,彻底废了...

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近2年的点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的功能测试…

【docker安装rabbitmq】

docker安装rabbitmq 1.查阅rabbitmq的Dokcer Hub官方说明 rabbitmq地址,因为我们需要使用的是带管理界面的rabbitmq服务。所以我们需要下载的rabbitmq:management镜像 docker pull rabbitmq:management2.启动rabbitmq 2.1.快速启动 One of the important thing…

笔记本系统盘移植与windowsLinux双系统安装

目录 一、 前言二、 Windows系统移植二、 安装Linux三、 Windows分区配置 一、 前言 笔记本内存不够了,之前给笔记本添加了一个机械硬盘,也几乎爆满了,于是购置了1T的固态硬盘,打算用这个固态硬盘安装双系统,剩余空间…

[面试题]消息队列

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列 什么是…

喜讯!昂辉科技通过2024年度重点产业链企业(第一批)认定

日前,合肥市推进战略性新兴产业发展工作委员会办公室公布了 2024年度重点产业链企业(第一批)新入库名单(集成电路、新型显示、网络与信息安全、城市安全、空天信息、新能源汽车和智能网联汽车、生物医药、新材料、高端装备、节能环…

嵌入式学习——Linux高级编程复习(网络编程)——day42

1. 协议 通信双方约定的一套标准称为协议 2. OSI参考模型 OSI模型是由国际标准化组织(ISO)制定的一个概念性的网络通信模型,它将网络通信的功能分为七个层次,从下至上分别为: 物理层(Physical Layer&…

百度一下首页制作(HTML+CSS)

部分代码展示&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>百度一下&#xff0c;你就知道</title><style type"text/css">/*清除元素默认性质*/body { margin: 0;padding: 0;list-…

前端传进来的单选值是0,到了后端加了个逗号

如上图所示&#xff0c;标记的var的值org和id的值orgOrNot不能一样&#xff0c;如果一样&#xff0c;通过id获取&#xff08;#(“#orgOrNot”).find(“option:selected”).val()&#xff09;时候就会出现这种情况 改成如下情况&#xff0c;区别开id

BC-Linux 8.6最小化安装的服务器启用GNOME图形化界面

本文记录了BC-Linux 8.6最小化安装的服务器如何启用GNOME图形化界面的过程。 一、服务器环境 1、系统版本 [rootlocalhost ~]# cat /etc/os-release NAME"BigCloud Enterprise Linux" VERSION"8.6 (Core)" ID"bclinux" ID_LIKE"rhel fe…

在VScode中创建PHP环境

一、下载PHP Server 和 PHP Debug这两个扩展 二、下载完成之后&#xff0c;在VScode中&#xff0c;打开我们写代码的文件 这里是我事先创建好的一些文件&#xff0c;本次环境搭建只需要创建一个.php后缀的文件即可。 先选中.php文件&#xff0c;再点击文件。 点击首选项&#x…

【课程系列05】某心科技AI大模型微调实战营-应用篇

网盘链接 链接: https://pan.baidu.com/s/1oARULXsXn8frkqq4ZKHBLA --来自百度网盘超级会员v6的分享 课程收获 课程内容涉及大模型的介绍、Transformer、Encoder、高级微调技术、Alpaca、AdaLoRA、QLoRA、Prefix Tuning和Quantization等主题 课程截图

龙芯LS2K0300久久派上手体验

介绍 芯片 龙芯2K0300芯片是一款基于LA264处理器核的多功能SoC芯片&#xff0c;可广泛适用于工业控制、通信设备、信息家电和物联网等领域&#xff1b;该芯片采用高集成度设计&#xff0c;可提供丰富的功能接口&#xff0c;满足多场景应用需求&#xff0c;同时支持低功耗技术…