使用 OpenAI 和 Streamlit 构建文档检索和问答系统
您好,开发社区! ?
今天,我很高兴向您介绍我的项目:EzioDevIo RAG(检索增强生成)。该系统允许用户上传 PDF 文档,根据其内容提出问题,并接收由 OpenAI 的 GPT-3.5 Turbo 模型生成的实时答案。这对于导航大型文档或快速提取相关信息特别有用。 ??
您可以在我的 GitHub 上找到完整的代码:EzioDevIo RAG 项目。让我们深入研究该项目并分解每个步骤!
?深入了解 EzioDevIo RAG 项目 GitHub 存储库中的完整代码库和设置说明!
项目概览
你将学到什么
- 如何将 OpenAI 的语言模型与 PDF 文档检索集成。
- 如何使用 Streamlit 创建用户友好的界面。
- 如何使用 Docker 将应用程序容器化以方便部署。 项目特色
- 上传 PDF 并从中获取信息。
- 根据上传的PDF内容提问。
- OpenAI 的 gpt-3.5-turbo 模型生成的实时响应。
- 使用 Docker 轻松部署以实现可扩展性。
*这是我们项目目录的最终结构:*
RAG-project/ ├── .env # Environment variables (API key) ├── app.py # Streamlit app for the RAG system ├── document_loader.py # Code for loading and processing PDF documents ├── retriever.py # Code for indexing and retrieving documents ├── main.py # Main script for RAG pipeline ├── requirements.txt # List of required libraries ├── Dockerfile # Dockerfile for containerizing the app ├── .gitignore # Ignore sensitive and unnecessary files ├── data/ │ └── uploaded_pdfs/ # Folder to store uploaded PDFs └── images/ └── openai_api_setup.png # Example image for OpenAI API setup instructions
第 1 步:设置项目
先决条件
确保您拥有以下内容:
- Python 3.8:本地运行应用程序。
- OpenAI API 密钥:您需要它来访问 OpenAI 的模型。在 OpenAI API 上注册以获取您的密钥。
- Docker:可选,但建议将应用程序容器化以进行部署。
第 2 步:克隆存储库并设置虚拟环境
2.1。克隆存储库
首先从 GitHub 克隆项目存储库并导航到项目目录。
git clone https://github.com/EzioDEVio/RAG-project.git cd RAG-project
2.2。设置虚拟环境
要隔离项目依赖性,请创建并激活虚拟环境。这有助于防止与其他项目的包发生冲突。
python -m venv venv source venv/bin/activate # On Windows, use `venv\Scripts\activate`
2.3。安装依赖项
安装requirements.txt中列出的所需Python库。其中包括用于语言模型的 OpenAI、用于 UI 的 Streamlit、用于 PDF 处理的 PyMuPDF 以及用于高效相似性搜索的 FAISS。
pip install -r requirements.txt
2.4。配置您的 OpenAI API 密钥
在项目根目录下创建.env文件。该文件将安全地存储您的 OpenAI API 密钥。将以下行添加到文件中,将 your_openai_api_key_here 替换为您的实际 API 密钥:
RAG-project/ ├── .env # Environment variables (API key) ├── app.py # Streamlit app for the RAG system ├── document_loader.py # Code for loading and processing PDF documents ├── retriever.py # Code for indexing and retrieving documents ├── main.py # Main script for RAG pipeline ├── requirements.txt # List of required libraries ├── Dockerfile # Dockerfile for containerizing the app ├── .gitignore # Ignore sensitive and unnecessary files ├── data/ │ └── uploaded_pdfs/ # Folder to store uploaded PDFs └── images/ └── openai_api_setup.png # Example image for OpenAI API setup instructions
?提示:确保将 .env 添加到您的 .gitignore 文件中,以避免在将项目推送到公共存储库时暴露您的 API 密钥。
第 3 步:了解项目结构
以下是目录结构的快速概述,可帮助您浏览代码:
以下是目录结构的快速概述,可帮助您浏览代码:
git clone https://github.com/EzioDEVio/RAG-project.git cd RAG-project
每个文件都有特定的作用:
- app.py:管理 Streamlit 界面,允许用户上传文件和提问。
- document_loader.py:使用 PyMuPDF 处理 PDF 的加载和处理。
- retriever.py:使用 FAISS 索引文档文本并根据用户查询检索相关部分。
- main.py:将所有内容联系在一起,包括调用 OpenAI 的 API 来生成响应。
第 4 步:构建核心代码
现在,让我们深入了解该项目的主要组成部分。
4.1。加载文档 (document_loader.py)
document_loader.py 文件负责从 PDF 中提取文本。在这里,我们使用 PyMuPDF 库来处理 PDF 中的每个页面并存储文本。
python -m venv venv source venv/bin/activate # On Windows, use `venv\Scripts\activate`
说明:该函数读取指定文件夹中的所有PDF文件,提取每个页面的文本,并将文本添加到字典列表中。每个字典代表一个文档及其文本和文件名。
4.2。文档索引和检索 (retriever.py)
FAISS(Facebook AI相似性搜索)帮助我们执行相似性搜索。我们用它来创建文档嵌入的索引,这使我们能够在用户提出问题时检索相关部分。
pip install -r requirements.txt
说明:
create_index:使用 OpenAIEmbeddings 将文档文本转换为嵌入,并使用 FAISS 创建索引。
retrieve_documents:根据用户查询搜索相关文档部分。
4.3。生成响应 (main.py)
该模块处理用户查询、检索相关文档并使用 OpenAI 的语言模型生成答案。
OPENAI_API_KEY=your_openai_api_key_here
说明:
generate_response:使用检索到的文档和用户查询的上下文创建提示,然后将其发送到 OpenAI 的 API。然后将响应作为答案返回。
第 5 步:创建 Streamlit 界面 (app.py)
Streamlit 提供了一个交互式前端,使用户可以轻松上传文件和提问。
RAG-project/ ├── .env # Environment variables (API key) ├── app.py # Streamlit app for the RAG system ├── document_loader.py # Code for loading and processing PDF documents ├── retriever.py # Code for indexing and retrieving documents ├── main.py # Main script for RAG pipeline ├── requirements.txt # List of required libraries ├── Dockerfile # Dockerfile for containerizing the app ├── .gitignore # Ignore sensitive and unnecessary files ├── data/ │ └── uploaded_pdfs/ # Folder to store uploaded PDFs └── images/ └── openai_api_setup.png # Example image for OpenAI API setup instructions
说明:
- 此代码使用 Streamlit 创建一个简单的 UI,允许用户上传 PDF 并输入问题。
- 当用户点击“获取答案”时,应用程序会检索相关文档并生成答案。
第 6 步:对应用程序进行 Docker 化
Docker 允许您将应用程序打包到容器中,从而轻松部署。
Dockerfile
RAG-project/ ├── .env # Environment variables (API key) ├── app.py # Streamlit app for the RAG system ├── document_loader.py # Code for loading and processing PDF documents ├── retriever.py # Code for indexing and retrieving documents ├── main.py # Main script for RAG pipeline ├── requirements.txt # List of required libraries ├── Dockerfile # Dockerfile for containerizing the app ├── .gitignore # Ignore sensitive and unnecessary files ├── data/ │ └── uploaded_pdfs/ # Folder to store uploaded PDFs └── images/ └── openai_api_setup.png # Example image for OpenAI API setup instructions
说明:
我们使用多阶段构建来保持最终图像的精简。
为了安全起见,应用程序以非 root 用户身份运行。
运行 Docker 容器
- 构建 Docker 镜像:
git clone https://github.com/EzioDEVio/RAG-project.git cd RAG-project
- 运行容器:
python -m venv venv source venv/bin/activate # On Windows, use `venv\Scripts\activate`
第 7 步:使用 GitHub Actions 设置 CI/CD
为了做好生产准备,请添加 CI/CD 管道来构建、测试和扫描 Docker 映像。您可以在存储库中找到此设置的 .github/workflows 文件。
最后的想法
该项目将 OpenAI 的语言模型功能与文档检索相结合,创建一个功能性的交互式工具。如果您喜欢这个项目,请在 GitHub 存储库上加注星标,并在开发社区上关注我。让我们一起打造更多精彩的项目! ?
?查看 GitHub 存储库? EzioDevIo RAG 项目 GitHub 存储库!
以上是使用 OpenAI 和 Streamlit 构建文档检索和问答系统的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。
