的主要缺点是它的训练数据不是最新的,最新的数据截止到2021年9月之前的数据。因此,无法回答与当前事件相关的问题。不过,可以通过提供插件来解决这个问题,实现与最新的实际数据集成在一起。
另一个非常热门的需求是让能够回答某些领域特定的问题。例如,你们公司产品的产品信息,通常可能没有你们公司产品的详细信息。又如,你是一个有影响力的自媒体大V,通过日积月累你建立了大量关于某一领域的知识库分享给你的粉丝。你想把你这些知识库通过数字助理的方式继续分享给其他粉丝,这时你会想到, 但它并没有太多关于你在某个领域分享的知识。这时就需要打造建立将与你的知识库数据关联起来。
不过,需要注意的是,在本文中所使用的方法中,你的训练数据将会暴露给。需要你仔细评估你的数据是否合适与共享。
贴士:不要将任何私密和机密的文件喂给。作为可自由使用共享的数据是你们公司已经公开可用的产品手册信息,或你已经公开的知识库数据。
接下来,我们将使用的软件包来构建你的知识库数据的关联。是一个旨在轻松连接LLM与外部数据的工具包。
是一个库的项目,提供了一个中央接口,用于连接LLM与外部数据。
是基于大语言模型开发应用程序的链式开发框架。
pypdf是用于读取PDF文件的软件包。
第一步:安装依赖工具包
pip install llama_index
pip install langchain
pip install pypdf
第二步:设置的API密钥
import os
os.environ["OPENAI_API_KEY"] = "OPENAI_API_KEY" # 在这里替换成你的Openai密钥
第三步:准备你的知识库训练数据文件,如PDF等格式的文件
创建一个知识库数据目录。该目录下存放你的知识信息。如目录。该目录下可以存放多个知识文件,文件格式可以为PDF,也可以为txt格式。
请注意,你的训练知识文档将被上传到用于索引目的。但不会将你的数据用于训练他们的模型。
第四步:建立你的知识库文档内容索引
from llama_index import SimpleDirectoryReader, GPTVectorStoreIndex,
LLMPredictor, PromptHelper
from langchain.chat_models import ChatOpenAI
# 建立知识库文档内容的索引
def index_documents(folder):
# 以下参数可以根据自己的项目需要调整
max_input_size = 4096 # 每块输入文档内容大小
num_outputs = 512 # 文本输出最大值的限制
max_chunk_overlap = 20 # 文档之间内容的重叠大小
chunk_size_limit = 600 # 每个切块文档内容的最大值
prompt_helper = PromptHelper(max_input_size,
num_outputs,
max_chunk_overlap,
chunk_size_limit = chunk_size_limit)
llm_predictor = LLMPredictor(
llm = ChatOpenAI(temperature = 0.7,
model_name = "gpt-3.5-turbo",
max_tokens = num_outputs)
)
documents = SimpleDirectoryReader(folder).load_data()
index = GPTVectorStoreIndex.from_documents(
documents,
llm_predictor = llm_predictor,
prompt_helper = prompt_helper)
index.storage_context.persist(persist_dir=".") # 索引建立好以后保存在当前目录下
在以上代码中,类帮助我们建立提示文本,将文本拆分,并根据必要的标记限制填充上下文信息。
创建了类的实例,它是中的包装器。这里使用的是的”gpt-3.5-turbo”模型。
r类从指定的训练文档文件夹中加载文档,并使用这些文档执行索引操作。
的()函数对放置在训练文档文件夹中的文档进行索引操作。
完成索引后,使用.()函数将其持久化到存储中。持久化索引使得你在以后的查询LLM时,无需再次执行索引操作。默认情况下,索引保存为名为.json的文件。
第五步:向你的知识库数据提问
from llama_index import StorageContext, load_index_from_storage
def my_chatGPT_bot(input_text):
# 从文件中vector_store.json读取索引数据
storage_context = StorageContext.from_defaults(persist_dir=".")
index = load_index_from_storage(storage_context)
# 创建一个问答引擎并提交问题,返回回复
query_engine = index.as_query_engine()
response = query_engine.query(input_text)
return response.response
建立好以上的函数以后,你可以直接利用该函数调用,发出问题。
my_chatGPT_bot('从上海出发,有哪些高铁可以直达南通?')
至此,一个利用的接口实现的个性化知识库就完成了。当然,为了使你的数字助理回答效果更好,你还需要不断地调试相应的参数或代码。