知识库的创建(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,一经查实,立即删除!

相关文章

数据赋能(124)——体系:数据格式化——影响因素、直接作用、主要特征

影响因素 数据格式化过程中需要考虑的一些影响因素: 数据质量和准确性: 数据清洗:在格式化之前,应确保数据的质量和准确性。这包括去除重复数据、处理缺失值、纠正错误数据等。数据验证:在格式化过程中,应…

P1656 炸铁路

题目描述 A 国派出将军 uim,对 B 国进行战略性措施,以解救涂炭的生灵。 B 国有 n 个城市,这些城市以铁路相连。任意两个城市都可以通过铁路直接或者间接到达。 uim 发现有些铁路被毁坏之后,某两个城市无法互相通过铁路到达。这…

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

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

leetcode刷题(46-50)

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

【机器学习】 第1章 概述

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

TCP/UDP协议传输

TCP 客户端 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <string.h>//宏定义错误输出格式>>>>类比封装函数#…

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

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

ansible 模块进阶及变量

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

shell脚本之数组及冒泡排序

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

IPV6配置二

IV6 的单播路由协议-----在使用路由协议前一定需要开启 IPV6的单播路由功能&#xff0c;否则不转发IPV6的流量 【1】IPV6 静态路由协议&#xff1a; (1)普通静态路由 rl(config)#ipv6 route 2::/64 serial 1/1 rl(config)#ipv6 route 2::/64 12:2 &#xff1f; …

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

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

kotlin函数

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

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

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

选择江苏显卡服务器租用的优势有哪些?

显卡服务器有着强大的计算功能&#xff0c;可以使用图形处理器进行计算与运算&#xff0c;十分适用于对计算性能需求比较高的企业和组织&#xff0c;本文主要来介绍选择江苏显卡服务器租用的优势有哪些吧&#xff01; 江苏显卡服务器使用了先进的实时高速的并行计算技术和浮点计…

【docker安装rabbitmq】

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

Go中的channel是同步还是异步

Go语言中的channel可以是异步也可以是同步&#xff0c;这取决与它是否是一个缓冲的channel。 同步channel 无缓冲的channel默认是同步的channel类型&#xff0c;即创建时没有执行缓冲大小。当数据被发送到无缓冲的channel中时&#xff0c;发送者会阻塞直到接受者收到数据。同…

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

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

胡说八道(24.6.18)——通信杂谈(科普知识)

既聊完中国和西方的通信历史之后&#xff0c;咱们继续来看看与有线通信相对应的无线通信&#xff0c;至于有线通信线的类型这里就不多说&#xff0c;像电话线&#xff0c;光纤&#xff0c;电缆(用于有线电视信号传输、早期的计算机网络)等&#xff0c;这些都是有线通信的范围。…

[面试题]消息队列

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

GPT4v和Gemini-Pro调用对比

要调用 GPT-4 Vision (GPT-4V) 和 Gemini-Pro&#xff0c;以下是详细的步骤分析&#xff0c;包括调用流程、API 使用方法和两者之间的区别&#xff0c;以及效果对比和示例。 GPT-4 Vision (GPT-4V) 调用步骤 GPT-4 Vision 主要通过 OpenAI 的 API 进行调用&#xff0c;用于处…