用ChatGPT+LangChain做一个专属私有知识库问答系统

如何将自己的私有数据搭建一个专属的问答系统,例如企业的客服机器人、企业的内部文档等知识库,今天我们就用python结合chatgpt来打造一个专属私有知识库问答系统,效果如下:

用ChatGPT+LangChain做一个专属私有知识库问答系统

步骤讲解如下:

首先,需要安装python环境及几个Python库:

pip install llama-indexpip install langchainpip install gradiopip install openaipip install PyPDF2

如果安装过程中出现错误,请根据错误信息安装相应的缺失库,可能是由于网络问题导致安装失败,或缺少自带库。

新建一个目录,在此目录下新建一个python脚本文件叫app.py,代码如下:

from llama_index import SimpleDirectoryReader, LangchainEmbedding, GPTListIndex,GPTSimpleVectorIndex, PromptHelper, LLMPredictor, ServiceContext
from langchain import OpenAI
import gradio as gr
import sys
import os
os.environ["OPENAI_API_KEY"] = 'openaikey'
def construct_index(directory_path):
    #max_input_size = 4096
    num_outputs = 2000  
    #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=OpenAI(temperature=0.7, model_name="gpt-3.5-turbo", max_tokens=num_outputs))
    documents = SimpleDirectoryReader(directory_path).load_data()
    
    service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)
    index = GPTSimpleVectorIndex.from_documents(documents,service_context=service_context)
    index.save_to_disk('index3.json')
    return index
def chatbot(input_text):
    index = GPTSimpleVectorIndex.load_from_disk('index.json')
    response = index.query(input_text, response_mode="compact")
    return response.response
iface = gr.Interface(fn=chatbot,
                     inputs=gr.inputs.Textbox(lines=7, label="输入您的文本"),
                     outputs="text",
                     title="AI 知识库聊天机器人")


if os.path.exists("index3.json"):
    print("所以存在,无需重新索引!")
else:
    index = construct_index("docs")

iface.launch(share=True)

这段代码的主要功能是:

1. 构建一个知识图谱索引,通过读取docs文件夹下的文档。它使用GPT模型来构建这个索引。2. 定义了一个chatbot函数,可以传入文本,并利用步骤1构建的索引来生成响应。3. 使用gradio构建了一个web界面,可以让用户输入文本,并显示chatbot函数生成的响应。4. 调用construct_index函数构建索引,并启动web界面。

代码中填写你的open ai API密钥,这个可以去官网申请

同时,在项目文件夹下创建docs子文件夹,用于存储需要训练的文本,这里面就可以放一下你自己的私有文件,支持pdf、word、TXT、md等文本文件。

用ChatGPT+LangChain做一个专属私有知识库问答系统

将你的知识库以md格式、txt格式或pdf格式放入docs文件夹。

目录如下

用ChatGPT+LangChain做一个专属私有知识库问答系统

一切准备完成后,使用cmd命令运行,输入python app.py。

运行时间根据计算机性能和训练文本量不同。运行完成后,会有一个本地域名,在浏览器中打开,输入下面的网址:

用ChatGPT+LangChain做一个专属私有知识库问答系统

用ChatGPT+LangChain做一个专属私有知识库问答系统

用ChatGPT+LangChain做一个专属私有知识库问答系统

要关闭运行,在终端输入ctrl+c。

用ChatGPT+LangChain做一个专属私有知识库问答系统

如果有新增的文档,可以重新生成索引,但是消耗tokens,建议进行增量索引,index.extend()

示例代码

from llama_index import GPTSimpleVectorIndex

# 加载已有索引
index = GPTSimpleVectorIndex.load("index.pkl")  

# 读取新文档
new_docs = []  
for file in os.listdir("new_docs"):
    with open(os.path.join("new_docs", file), "r") as f:
        new_docs.append(f.read())

# 扩展索引 
index.extend(new_docs)

# 保存索引
index.save("index.pkl")

{{collectdata}}

网友评论0