GPT知识库浅析

一、引言

上篇文章《GPT简介及应用》介绍了GPT的应用场景,里面提到GPT bot的基本使用:基于GPT训练好的数据,回答用户的问题。

但在使用过程中,如果用户的问题里面出现最新的术语,就会出现这种提示:

截至我最后更新的时间(2023年4月),"llama_index"这个术语并不是广泛认知或者在特定领域内公认的一个概念,因此我无法直接提供关于"llama_index"的具体信息。这个术语可能是指某个特定项目、工具、指标或者是某个领域内的专有名词。

这时候我们自然会想到,有没有办法将最新的/私有的数据提供给GPT,让GPT基于这些数据来回答问题呢?答案当然是有的,那就是:GPT知识库。

二、简介

GPT 知识库,就像是一个包含了各种武功秘籍的宝库。GPT Bot 像是一位可以通过阅读和理解这些秘籍,来不断提高自己的武功水平的修炼者。

武功大师会将自身的武术经验沉淀升华,编撰成绝世的武功秘籍。

以往武功大师想要把这些武功秘籍传承下去,需要经过层层选拔,挑选出最合适的徒弟,辅以精心指导,日夜打磨,才可能培养出下一代的武功大师。

但现在只需要将武功秘籍给GPT Bot,它就可以快速理解,并且吸收为自身内力,为不同级别的人员提供指导。

这就是GPT知识库+GPT Bot的威力:

GPT Bot 利用 GPT 知识库中的信息,来回答用户的问题,提供帮助和建议,从而更好地满足用户的需求。

三、知识库构建

GPT的核心原理,就是基于大量的数据进行学习,然后根据用户提出的问题,将关联性最高的内容,组装成自然语言作为答案(当然实际的实现要复杂得多)。

GPT知识库的核心逻辑也是差不多:学习用户提供的文档,然后经过算法识别,得到文档内容的关联性。

当用户提供问题时,就可以根据关联性,获取对应的文档内容。然后组装成自然语言,返回给用户。

市面上比较出名的工具有 LangChainLlamaIndex 等,工具间各有优点,它们的核心功能都是:对大量语言相关的数据进行分析和处理,以提供最佳的搜索结果和答案。

下文均以LlamaIndex为例。

3.1 demo

使用这些工具来构建知识库也相对简单,只需几行代码即可构建成功(前提是有OpenAI的账号)。

from llama_index import VectorStoreIndexindex = VectorStoreIndex.from_documents(documents=documents
)

VectorStoreIndexLlamaIndex提供的API,只需要将文档documents(如何生成documents在下文中介绍)传入,即可自动解析,根据默认的embedding算法,构建成一个有关联性的索引数据。

然后,将这些索引数据,转换为内置的搜索引擎,即可用自然语言进行问答。

query_engine = index.as_query_engine()
response = query_engine.query("武林第一是谁?")
print(response)

四、文档读取

在构建知识库时,需要将用户文档,转换为LlamaIndex的参数documentsLlamaIndex提供了各式各样的文档读取器 Reader:Llama Hub

4.1 内置文档读取器

LlamaIndex内置了许多文档读取器,可以读取不同格式的文件,如Markdown、PDF、Word、PPT、图片视频等。

from llama_index.core import SimpleDirectoryReaderdocuments = SimpleDirectoryReader("./data").load_data()

4.2 Hive读取器

很多业务数据都存放在大数据仓库Hive中,LlamaIndex也提供了HiveReader快速读取数据:Hive Loader (llamahub.ai)。

但这个读取器,只能读取非安全的Hive,若Hive启用了Kerberos认证则会连接失败。

查看源码,很容易发现这个Reader只是对pyhive的简单封装,没有适配Kerberos认证:

        """Initialize with parameters."""try:from pyhive import hiveexcept ImportError:raise ImportError("`hive` package not found, please run `pip install pyhive`")self.con = hive.Connection(host=host,port=port,username=username,database=database,auth=auth,password=password,)

因此若Hive启用了Kerberos,则需要自定义实现:

from TCLIService.ttypes import TOperationState
from llama_index import (Document,
)from pyhive import hive# 注意此处的配置可能根据你的 Hive 配置或集群细节而有所不同
conn = hive.Connection(host=hive_server2_host,port=10000,auth='KERBEROS',kerberos_service_name='hive',database=hive_database
)
cursor = None
try:# 创建游标cursor = conn.cursor()# 执行查询cursor.execute(hive_query_sql)# 以防查询是异步的,等待它完成status = cursor.poll().operationStatewhile status in (TOperationState.INITIALIZED_STATE,TOperationState.RUNNING_STATE):status = cursor.poll().operationState# 获取结果rows = cursor.fetchall()# 处理结果documents = []for row in rows:document = Document(text=row.__str__())documents.append(document)logger.info(document)
finally:# 无论是否遇到异常,始终关闭游标和连接if cursor:cursor.close()conn.close()

这样将用户文档转换为LlamaIndex的文档格式document,即可快速构建成GPT知识库。

五、文档存储

通过以上示例可以看到,GPT知识库只保存在程序的内存中,退出程序就会被丢弃掉,下次再使用就需要重新构建。为了避免重复构建,需要将构建好的索引数据保存下来。

为了存储这些索引数据,业界一般会使用向量数据库

5.1 向量数据库

向量数据库与常规数据库的不同点,主要在于向量数据库是一种基于向量空间模型的数据库系统,它将数据存储为向量,并利用向量之间的相似度来进行查询和分类。在大模型模型训练中,可以提供更高效的数据存储及查询能力。

各大厂商都提供了自身的向量数据库,如阿里、腾讯、华为等。

以下以腾讯云VectorDB为例。

5.2 上传数据

LlamaIndex集成了腾讯云VectorDB的SDK,二次封装功能接口,简化使用。

Tencent Cloud VectorDB - LlamaIndex

初始化连接:

import tcvectordbvector_store = TencentVectorDB(url="http://10.0.X.X",key="eC4bLRy2va******************************",collection_params=CollectionParams(dimension=1536, drop_exists=True),
)

注意:

  • drop_exists默认为True,即如果向量集合已存在,会先删除再重建。
  • dimension固定为1536,因为LlamaIndex构建索引数据时,固定维度为1536。若不相同,在上传数据时会出现数据不兼容报错。

上传数据:

storage_context = StorageContext.from_defaults(vector_store=vector_store)index = VectorStoreIndex.from_documents(documents,storage_context=storage_context
)

这样,即可将构建好的索引数据,同步保存到腾讯云VectorDB。

5.3 复用数据

GPT查询腾讯云VectorDB,初始化连接时需要将drop_exists参数设置为False,并且去掉documents即可。

import tcvectordbvector_store = TencentVectorDB(url="http://10.0.X.X",key="eC4bLRy2va******************************",collection_params=CollectionParams(dimension=1536, drop_exists=False),
)storage_context = StorageContext.from_defaults(vector_store=vector_store)index = VectorStoreIndex.from_documents(storage_context=storage_context
)

到这里,GPT知识库基本构建成功。

接下来就是让GPT去查询索引数据,组装成自然语言,返回给用户。

待续。

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

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

相关文章

queryWrapper and和or嵌套查询

在使用MyBatis-Plus时,我们可以通过QueryWrapper来构建复杂的查询条件,其中可以使用and和or来嵌套条件。以下是一个使用and和or嵌套条件的例子: 1. and ( ... or ... or...) 格式 import com.baomidou.mybatisplus.core.conditions.query.Q…

基于SpringBoot的“酒店管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“酒店管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统结构图 系统首页界面图 用户注册界面图 个人…

SaaS在线客服系统

随着互联网技术的飞速发展,企业与客户之间的沟通方式也在不断地演进。在这个信息爆炸的时代,如何快速、高效地响应客户需求,提供卓越的客户服务,成为企业竞争力的重要体现。在线客服系统作为连接企业与客户的桥梁,扮演…

亚远景科技-ASPICE 4.0 二级通用实践GP2.1.1 识别目标和定义过程实施策略

ASPICE 4.0 二级通用实践 GP 2.1.1 识别目标并定义过程执行策略。 确定过程活动的范围,包括过程实施管理和工作产品的管理。 判定要实现的相应结果。 识别过程执行的目标和相关准则。 注1:预算目标和客户交付日期、测试覆盖率目标及交付时间都是过程…

政安晨:【深度学习神经网络基础】(六)—— 前馈神经网络

目录 简述 前馈神经网络结构 计算输出 初始化权重 径向基函数神经网络 径向基函数 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎…

System.currentTimeMillis()

1纳秒0.000001毫秒 1纳秒0.000000001秒 Java中System.nanoTime()返回的是纳秒,nanoTime返回的可能是任意时间,甚至可能是负数 Java中System.currentTimeMillis()返回的毫秒,这个毫秒其实就是自1970年1月1日时起的毫秒数 System.nanoTime()是…

.NET MAUI Android Emulator运行错误 APT2000 系统找不到指定的文件

前言 本地.NET MAUI项目使用Android Emulator(安卓模拟器)调试运行,提示异常:严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 APT2000 系统找不到指定的文件。 错误原因 文件目录中不能…

无监督学习~clustering

什么是clustering? 聚类算法查看多个数据点,并自动找到彼此相关或相似的数据点。 K-means clustering 示例 循环:再次分配每个点到离它最近的质心,重新计算质心。 K-means algorithm 注意: k-means的初始化质心Mu有…

大话设计模式之单例模式

单例模式是一种创建型设计模式,它确保类只有一个实例,并提供一个全局访问点来访问该实例。 单例模式通常在以下情况下使用: 当一个类只能有一个实例,并且客户端需要访问该实例时。当该唯一实例需要被公开访问,以便在…

微服务-2 Eureka

Eureka 启动页面: 同理再注册完order-service后,刷新启动页面: userservice 启动多台服务: [ 代码 ]:orderService.java(用 RestTemplate 调其他服务,用 userservice 代替 localhost:8081&…

CUDA10安装与卸载,CUDA10.2与MMSEG安装

安装CUDA10 1、因为要用到tensorflow1.15.5的GPU版本,所以想安装cuda10来进行加速,通过nvidia-smi检查本机上的CUDA版本 2、下载的cuda10版本,cuda_10.0.130_411.31_win10.exe 下载的cudnn版本,cudnn-10.0-windows10-x64-v7.6.4…

Spring 面试题(十二)

1. 解释一下Spring 中的 Enable* 注解的原理? Spring中的Enable*注解原理主要涉及到Spring的IoC容器和条件化配置。这些注解通过特定的机制来启用或激活Spring框架中的某些功能或特性。 以下是Enable*注解原理的主要方面: Import机制: Enable*注解通常…

B站广告推广操作教程及费用?

哔哩哔哩(B站)作为国内极具影响力的年轻人文化社区,已成为众多品牌与企业触达目标受众、提升品牌影响力的重要阵地。然而,面对B站复杂的广告系统与精细化运营需求,许多广告主可能对如何高效开展B站广告推广感到困惑。云…

备战蓝桥杯---数学刷题3

话不多说,直接看题: 1. 我们可以得到大致一个思路,就是先枚举1-1e6的质数,然后看看有几个即可。 我们怎么知道个数呢? 首先我们知道1---n中有n/p的下取整个为p的倍数。 因此,p的个数至少是n/p的下取整个…

typescript中的type关键字和interface关键字区别

Type又叫类型别名(type alias),作用是给一个类型起一个新名字,不仅支持interface定义的对象结构,还支持基本类型、联合类型、交叉类型、元组等任何你需要手写的类型。 type num number; // 基本类型 type stringOrNum string |…

安装 FFmpeg

安装 FFmpeg 1. Install FFmpeg On Ubuntu2. Install FFmpeg On Ubuntu 16.042.1. First add the repository2.2. Update the newly added repository2.3. Now install the ffmpeg2.4. For opening the ffmpeg for that type ffpmeg on the terminal 3. Uninstall ffmpegRefere…

信息系统项目管理师——第5章信息系统工程(三)

近几期的考情来看,本章选择题稳定考4分,考案例的可能性有,需要重点学习。本章节专业知识点特别多。但是,只考课本原话,大家一定要把本章至少通读一遍,还要多刷题,巩固重点知识。 3 系统集成 3…

Web刷题记录——购物车

一、代码及解题思路 1、添加方法 (1)逻辑 a、需要判断本次添加的商品是否存在于购物车中【根据id值是否相等判断】 b、如果不存在,即设置num1,并追加本次商品 c、如果存在,即只需设置数值1 【注意】 :这里…

【Keil5-调试】

Keil5-调试 ■ 好的链接■ watch窗口中,变量值不会刷新■ 当选择了非0级优化时■■ ■ 好的链接 参考地址: debug ■ watch窗口中,变量值不会刷新 有时候在watch窗口中,变量值不会刷新,这时候就需要查看一下"V…

2820: 【算法思想】【双指针】长按键入

题目描述 你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按&#xff…