首页 > 后端开发 > Python教程 > 使用 OpenAI 和 Streamlit 构建文档检索和问答系统

使用 OpenAI 和 Streamlit 构建文档检索和问答系统

Susan Sarandon
发布: 2024-11-07 15:50:03
原创
513 人浏览过

您好,开发社区! ?

今天,我很高兴向您介绍我的项目:EzioDevIo RAG(检索增强生成)。该系统允许用户上传 PDF 文档,根据其内容提出问题,并接收由 OpenAI 的 GPT-3.5 Turbo 模型生成的实时答案。这对于导航大型文档或快速提取相关信息特别有用。 ??

Building a Document Retrieval & Q&A System with OpenAI and Streamlit

您可以在我的 GitHub 上找到完整的代码:EzioDevIo RAG 项目。让我们深入研究该项目并分解每个步骤!

?深入了解 EzioDevIo RAG 项目 GitHub 存储库中的完整代码库和设置说明!

项目概览

你将学到什么

  1. 如何将 OpenAI 的语言模型与 PDF 文档检索集成。
  2. 如何使用 Streamlit 创建用户友好的界面。
  3. 如何使用 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 容器

  1. 构建 Docker 镜像:
git clone https://github.com/EzioDEVio/RAG-project.git
cd RAG-project

登录后复制
登录后复制
登录后复制
  1. 运行容器:
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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板