php做网站的优势,网站建设暨检务公开自查报告,专业做网站制作的公司,本溪市住房和城乡建设局网站一、引言
上篇文章《GPT简介及应用》介绍了GPT的应用场景#xff0c;里面提到GPT bot的基本使用#xff1a;基于GPT训练好的数据#xff0c;回答用户的问题。
但在使用过程中#xff0c;如果用户的问题里面出现最新的术语#xff0c;就会出现这种提示#xff1a; 截至我…一、引言
上篇文章《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知识库的核心逻辑也是差不多学习用户提供的文档然后经过算法识别得到文档内容的关联性。
当用户提供问题时就可以根据关联性获取对应的文档内容。然后组装成自然语言返回给用户。
市面上比较出名的工具有 LangChain、LlamaIndex 等工具间各有优点它们的核心功能都是对大量语言相关的数据进行分析和处理以提供最佳的搜索结果和答案。
下文均以LlamaIndex为例。
3.1 demo
使用这些工具来构建知识库也相对简单只需几行代码即可构建成功前提是有OpenAI的账号。
from llama_index import VectorStoreIndexindex VectorStoreIndex.from_documents(documentsdocuments
)VectorStoreIndex是LlamaIndex提供的API只需要将文档documents如何生成documents在下文中介绍传入即可自动解析根据默认的embedding算法构建成一个有关联性的索引数据。
然后将这些索引数据转换为内置的搜索引擎即可用自然语言进行问答。
query_engine index.as_query_engine()
response query_engine.query(武林第一是谁)
print(response)四、文档读取
在构建知识库时需要将用户文档转换为LlamaIndex的参数documentsLlamaIndex提供了各式各样的文档读取器 ReaderLlama 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(hosthost,portport,usernameusername,databasedatabase,authauth,passwordpassword,)因此若Hive启用了Kerberos则需要自定义实现
from TCLIService.ttypes import TOperationState
from llama_index import (Document,
)from pyhive import hive# 注意此处的配置可能根据你的 Hive 配置或集群细节而有所不同
conn hive.Connection(hosthive_server2_host,port10000,authKERBEROS,kerberos_service_namehive,databasehive_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(textrow.__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(urlhttp://10.0.X.X,keyeC4bLRy2va******************************,collection_paramsCollectionParams(dimension1536, drop_existsTrue),
)注意
drop_exists默认为True即如果向量集合已存在会先删除再重建。dimension固定为1536因为LlamaIndex构建索引数据时固定维度为1536。若不相同在上传数据时会出现数据不兼容报错。
上传数据
storage_context StorageContext.from_defaults(vector_storevector_store)index VectorStoreIndex.from_documents(documents,storage_contextstorage_context
)这样即可将构建好的索引数据同步保存到腾讯云VectorDB。
5.3 复用数据
GPT查询腾讯云VectorDB初始化连接时需要将drop_exists参数设置为False并且去掉documents即可。
import tcvectordbvector_store TencentVectorDB(urlhttp://10.0.X.X,keyeC4bLRy2va******************************,collection_paramsCollectionParams(dimension1536, drop_existsFalse),
)storage_context StorageContext.from_defaults(vector_storevector_store)index VectorStoreIndex.from_documents(storage_contextstorage_context
)到这里GPT知识库基本构建成功。
接下来就是让GPT去查询索引数据组装成自然语言返回给用户。
待续。