大数跨境
0
0

localGPT: 100%私有本地文档的GPT检索(附 WebUI 实现)

localGPT: 100%私有本地文档的GPT检索(附 WebUI 实现) 数翼
2023-06-06
1
导读:localGPT 是一个 100% 私有的开源 AI 问答系统, 使用 LLM 的强大功能, 同时无需联网,所有数据都没有离开您的执行环境。借助大语言模型,你可以对本地的文档进行检索问答,支持 txt

localGPT 是一个 100% 私有的开源 AI 问答系统, 使用 LLM 的强大功能, 同时无需联网,所有数据都没有离开您的执行环境。借助大语言模型,你可以对本地的文档进行检索问答, 支持 txt, pdf, csv 等文档格式。作者希望搭建一个开源信息检索系统,并持续加入更多的功能。

预览

作者实现了一个命令行的 Promp 程序,

我习惯用 UI,用 Gradio 实现了一个简单的问答机器人,效果如下:

localGPT WebUI 预览

背景

世界各地的企业都在竞相利用大型语言模型 (LLM) 的能力, 例如 OpenAIchatGPT 类似的功能,以推动他们的数据计划并提高生产力。然而,对保护敏感公司数据的安全需求怎么强调也不为过, 之前发生了三星员工在使用 ChatGPT 进行工作协助时意外共享机密信息等事件, 很明显企业需要一个安全可控的替代解决方案。

当然,对于大部分公司来说包括费用,或者对于国内的公司,网络以及合规等也都是一个挑战。

localGPT 就可以在本地安全的环境中无缝集成类似 GPT 的大语言模型,并且针对本地文档进行问答, 集成企业数据的同时,保证了数据的合规性和安全性。

原理

作者录制了一个 YouTube 视频来解释这个项目,这个这个项目的架构图。

localGPT项目架构

整个过程非常简单,第一步讲文档(PDF、DOC、TXT 等)加载之后向量化,丢在向量数据库里, 这个过程通过 ingest.py 这个程序来完成。

第二步就是和用户交互,检索数据并通过 LLM 生成文本答案。

这个项目的灵感来自 privateGPT 项目, 不过作者使用 Vicuna-7B 模型替换了 GPT4ALL 模型,以及 InstructorEmbeddings 替换了 privateGPT 中使用的 LlamaEmbeddings。Embeddings 和 LLM 都将在 GPU 而不是 CPU 上运行。如果您没有 GPU 也想运行 localGPT,它也有 CPU 支持(请参阅下面的说明)。

安装

下载项目:

git clone https://github.com/alanland/localGPT.git
cd localGPT

安装依赖:

pip install -r requirements.txt

准备数据集

作者项目默认放了美国宪法的 PDF 文档。你可以准备自己的文档数据,默认放置在 SOURCE_DOCUMENTS 目录。

可以修改 constants.py 文件的配置来改变文档目录的位置:

# Define the folder for storing database
SOURCE_DIRECTORY = f"{ROOT_DIRECTORY}/SOURCE_DOCUMENTS"

如果你有多个文档,把所有文档都丢在目录中就可以了(支持.txt.pdf、 .xlsx 或 .csv 文件) 。

然后执行以下命令提取数据:

python ingest.py

它将创建一个包含本地 vectorstore 的索引。这个命令执行需要时间,具体取决于文档的大小。您可以摄取任意数量的文档,所有文档都将累积在本地嵌入数据库中。如果要从空数据库开始,删除 index 即可。

注意:当您第一次运行它时,下载需要时间,因为它必须下载嵌入模型。在后续运行中,没有数据会离开您的本地环境,并且可以在没有互联网连接的情况下运行。

在本地对您的文件提问

要提出问题,请运行如下命令:

python run_localGPT.py

并等待脚本要求您输入。

Enter a query:

输入问题回车,等待 LLM 模型使用提示并准备答案。完成后,它将打印答案和用作文档上下文的 4 个来源;然后您可以问另一个问题而无需重新运行脚本,只需再次等待提示即可。

如果需要退出,输入 exit 即可。

注意:第一次运行时,需要连接互联网才能下载 vicuna-7B 模型。之后您可以关闭互联网连接,脚本推理仍然有效。没有数据会从您的本地环境中泄露出来。

使用 Web UI

我使用 Gradio 实现了一个简单的而 UI,执行以下命令即可:

python run_localGPT_web.py

你可以在 Web UI 中更简单的进行问答。

localGPT WebUI 预览

代码实现可以参考我的 Github 项目,也可以参考下面代码:

with gr.Blocks() as demo:
    gr.HTML("""<h1 align="center">localGPT</h1>""")
    chatbot = gr.Chatbot()
    msg = gr.Textbox()
    clear = gr.Button("Clear")

    def respond(message, chat_history):
        # Get the answer from the chain
        res = qa(message)
        answer, docs = res['result'], res['source_documents']

        # # Print the relevant sources used for the answer
        print("----------------------------------SOURCE DOCUMENTS---------------------------")
        for document in docs:
            print("\n> " + document.metadata["source"] + ":")
            print(document.page_content)
        print("----------------------------------SOURCE DOCUMENTS---------------------------")

        chat_history.append((message, answer))
        return "", chat_history


    msg.submit(respond, [msg, chatbot], [msg, chatbot])
    clear.click(lambdaNoneNone, chatbot, queue=False)

demo.launch(share=True, inbrowser=True)

项目地址

项目的 Github 地址是(带 WebUI):

  • • https://github.com/alanland/localGPT

原始项目地址:

  • • https://github.com/PromtEngineer/localGPT


【声明】内容源于网络
0
0
数翼
专注 AIGC 人工智能知识传播和实践
内容 228
粉丝 0
数翼 专注 AIGC 人工智能知识传播和实践
总阅读61
粉丝0
内容228