localGPT 是一个 100% 私有的开源 AI 问答系统, 使用 LLM 的强大功能, 同时无需联网,所有数据都没有离开您的执行环境。借助大语言模型,你可以对本地的文档进行检索问答, 支持 txt, pdf, csv 等文档格式。作者希望搭建一个开源信息检索系统,并持续加入更多的功能。
预览
作者实现了一个命令行的 Promp 程序,
我习惯用 UI,用 Gradio 实现了一个简单的问答机器人,效果如下:
背景
世界各地的企业都在竞相利用大型语言模型 (LLM) 的能力, 例如 OpenAI 的 chatGPT 类似的功能,以推动他们的数据计划并提高生产力。然而,对保护敏感公司数据的安全需求怎么强调也不为过, 之前发生了三星员工在使用 ChatGPT 进行工作协助时意外共享机密信息等事件, 很明显企业需要一个安全可控的替代解决方案。
当然,对于大部分公司来说包括费用,或者对于国内的公司,网络以及合规等也都是一个挑战。
localGPT 就可以在本地安全的环境中无缝集成类似 GPT 的大语言模型,并且针对本地文档进行问答, 集成企业数据的同时,保证了数据的合规性和安全性。
原理
作者录制了一个 YouTube 视频来解释这个项目,这个这个项目的架构图。
整个过程非常简单,第一步讲文档(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 中更简单的进行问答。
代码实现可以参考我的 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(lambda: None, None, chatbot, queue=False)
demo.launch(share=True, inbrowser=True)
项目地址
项目的 Github 地址是(带 WebUI):
• https://github.com/alanland/localGPT
原始项目地址:
• https://github.com/PromtEngineer/localGPT

