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
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. ??
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
*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 :
É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 :
É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 :
É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
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`
É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!