Maison >développement back-end >Tutoriel Python >Création d'un système de récupération de documents et de questions-réponses avec OpenAI et Streamlit

Création d'un système de récupération de documents et de questions-réponses avec OpenAI et Streamlit

Susan Sarandon
Susan Sarandonoriginal
2024-11-07 15:50:03515parcourir

Bonjour, communauté des développeurs ! ?

Aujourd'hui, je suis ravi de vous présenter mon projet : EzioDevIo RAG (Retrieval-Augmented Generation). Ce système permet aux utilisateurs de télécharger des documents PDF, de poser des questions en fonction de leur contenu et de recevoir des réponses en temps réel générées par le modèle GPT-3.5 Turbo d'OpenAI. Ceci est particulièrement utile pour parcourir des documents volumineux ou extraire rapidement des informations pertinentes. ??

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

Vous pouvez retrouver le code complet sur mon GitHub : EzioDevIo RAG Project. Plongeons dans le projet et décomposons chaque étape !

? Plongez dans la base de code complète et les instructions de configuration dans le référentiel GitHub du projet EzioDevIo RAG !

Aperçu du projet

Ce que vous apprendrez

  1. Comment intégrer les modèles de langage d'OpenAI à la récupération de documents PDF.
  2. Comment créer une interface conviviale à l'aide de Streamlit.
  3. Comment conteneuriser l'application avec Docker pour un déploiement facile. Caractéristiques du projet
  • Téléchargez des PDF et obtenez des informations à leur sujet.
  • Posez des questions en fonction du contenu des PDF téléchargés.
  • Réponses en temps réel générées par le modèle gpt-3.5-turbo d'OpenAI.
  • Déploiement facile avec Docker pour l'évolutivité.

*Voici la structure finale de notre répertoire de projets : *

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

Étape 1 : Mise en place du projet

Prérequis

Assurez-vous d'avoir les éléments suivants :

  • Python 3.8 : Pour exécuter l'application localement.
  • Clé API OpenAI : vous en aurez besoin pour accéder aux modèles OpenAI. Inscrivez-vous à l'API OpenAI pour obtenir votre clé.
  • Docker : facultatif, mais recommandé pour conteneuriser l'application en vue du déploiement.

Étape 2 : Cloner le référentiel et configurer l'environnement virtuel

2.1. Cloner le référentiel
Commencez par cloner le référentiel du projet depuis GitHub et accédez au répertoire du projet.

git clone https://github.com/EzioDEVio/RAG-project.git
cd RAG-project

2.2. Configurer un environnement virtuel
Pour isoler les dépendances du projet, créez et activez un environnement virtuel. Cela permet d'éviter les conflits avec les packages d'autres projets.

python -m venv venv
source venv/bin/activate  # On Windows, use `venv\Scripts\activate`

2.3. Installer les dépendances
Installez les bibliothèques Python requises répertoriées dans Requirements.txt. Cela inclut OpenAI pour le modèle de langage, Streamlit pour l'interface utilisateur, PyMuPDF pour la gestion des PDF et FAISS pour une recherche efficace de similarité.

pip install -r requirements.txt

2.4. Configurez votre clé API OpenAI
Créez un fichier .env dans le répertoire racine du projet. Ce fichier stockera votre clé API OpenAI en toute sécurité. Ajoutez la ligne suivante au fichier, en remplaçant your_openai_api_key_here par votre clé API actuelle :

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

? Astuce : assurez-vous que .env est ajouté à votre fichier .gitignore pour éviter d'exposer votre clé API si vous transférez votre projet vers un référentiel public.

Étape 3 : Comprendre la structure du projet
Voici un aperçu rapide de la structure des répertoires pour vous aider à naviguer dans le code :
Voici un aperçu rapide de la structure des répertoires pour vous aider à naviguer dans le code :

git clone https://github.com/EzioDEVio/RAG-project.git
cd RAG-project

Chaque fichier a un rôle spécifique :

  • app.py : gère l'interface Streamlit, permettant aux utilisateurs de télécharger des fichiers et de poser des questions.
  • document_loader.py : gère le chargement et le traitement des PDF à l'aide de PyMuPDF.
  • retriever.py : utilise FAISS pour indexer le texte du document et récupérer les sections pertinentes en fonction des requêtes des utilisateurs.
  • main.py : relie tout ensemble, y compris l'appel de l'API d'OpenAI pour générer des réponses.

Étape 4 : Création du code de base
Passons maintenant aux principales composantes du projet.

4.1. Chargement de documents (document_loader.py)
Le fichier document_loader.py est responsable de l'extraction du texte des PDF. Ici, nous utilisons la bibliothèque PyMuPDF pour traiter chaque page du PDF et stocker le texte.

python -m venv venv
source venv/bin/activate  # On Windows, use `venv\Scripts\activate`

Explication : Cette fonction lit tous les fichiers PDF dans un dossier spécifié, extrait le texte de chaque page et ajoute le texte à une liste de dictionnaires. Chaque dictionnaire représente un document avec son texte et son nom de fichier.

4.2. Indexation et récupération de documents (retriever.py)
FAISS (Facebook AI Similarity Search) nous aide à effectuer des recherches de similarité. Nous l'utilisons pour créer un index des intégrations de documents, ce qui nous permet de récupérer les sections pertinentes lorsque les utilisateurs posent des questions.

pip install -r requirements.txt

Explication :

create_index : convertit le texte du document en intégrations à l'aide d'OpenAIEmbeddings et crée un index avec FAISS.
retrieve_documents : recherche les sections de document pertinentes en fonction de la requête de l'utilisateur.

4.3. Générer des réponses (main.py)
Ce module traite les requêtes des utilisateurs, récupère les documents pertinents et génère des réponses à l'aide du modèle de langage OpenAI.

OPENAI_API_KEY=your_openai_api_key_here

Explication :

generate_response : crée une invite avec le contexte à partir des documents récupérés et de la requête de l'utilisateur, puis l'envoie à l'API d'OpenAI. La réponse est ensuite renvoyée comme réponse.

Étape 5 : Création de l'interface Streamlit (app.py)
Streamlit fournit un frontal interactif, permettant aux utilisateurs de télécharger facilement des fichiers et de poser des questions.

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

Explication :

  • Ce code crée une interface utilisateur simple avec Streamlit, permettant aux utilisateurs de télécharger des PDF et de saisir des questions.
  • Lorsque les utilisateurs cliquent sur « Obtenir une réponse », l'application récupère les documents pertinents et génère une réponse.

Étape 6 : Dockeriser l'application
Docker vous permet de regrouper l'application dans un conteneur, ce qui la rend facile à déployer.

Fichier 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

Explication :

Nous utilisons une construction en plusieurs étapes pour garder l'image finale épurée.
L'application s'exécute en tant qu'utilisateur non root pour des raisons de sécurité.

Exécuter le conteneur Docker

  1. Créez l'image Docker :
git clone https://github.com/EzioDEVio/RAG-project.git
cd RAG-project

  1. Exécutez le conteneur :
python -m venv venv
source venv/bin/activate  # On Windows, use `venv\Scripts\activate`

Étape 7 : Configuration de CI/CD avec les actions GitHub
Pour être prêt à la production, ajoutez un pipeline CI/CD pour créer, tester et analyser des images Docker. Vous pouvez trouver le fichier .github/workflows dans le référentiel pour cette configuration.

Pensées finales
Ce projet combine les capacités de modèle de langage d'OpenAI avec la récupération de documents pour créer un outil fonctionnel et interactif. Si vous avez apprécié ce projet, veuillez démarrer le référentiel GitHub et suivez-moi ici sur Dev Community. Construisons ensemble des projets encore plus étonnants ! ?

? Afficher le référentiel GitHub ? Référentiel GitHub du projet EzioDevIo RAG !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn