[TOC]
RAG Pipeline
Ce pipeline implémente un RAG relativement simple qu'il est possible d'améliorer et changer les implémentations.
Les implémentations comportent un indexer, un datastore, un retriever, un response generator et un evaluator.
Le RAG s'utilise grâce à une Command Line Interface (CLI).
Sommaire
- Architecture
- Installation
- Utilisation
Architecture
Le pipeline organise l'action de :
- L'indexer découpe les documents en chunks grâce à l'HybridChunker de docling. Les chunks sont ensuite convertis en DataItem. Ces items contiennent le contenu de chaque chunk ainsi que la source du document et conservent les métadonnées.
- Le datastore vectorise les DataItems passés par l'indexer en utilisant le modèle "all-MiniLM-L6-v2" de SentenceTransformers et les stocke dans une base de données lancedb. Il vectorise les requêtes passées par le même modèle et utilise les méthodes de recherche de la BDD.
- Le retriever utilise le CrossEncoder de SentenceTransformers pour classer les documents récupérés par ordre de similarité avec la requête.
- Le response generator utilise une API Groq avec le modèle "llama-3.1-8b-instant" pour générer les réponses à partir des documents récupérés. Il contient aussi le prompt système définissant le comportement du modèle de génération.
- L'evaluator évalue les performances du système en comparant les réponses du modèle avec celles fournies pour des questions type. Le modèle utilisé est le même que pour le générateur de réponses.
. ├── create_parser.py ├── data │ ├── eval │ ├── sample-lancedb │ │ └── rag-table.lance │ └── source ├── main.py ├── model ├── README.md ├── requirements.txt ├── src │ ├── impl │ │ ├── datastore.py │ │ ├── evaluator.py │ │ ├── indexer.py │ │ ├── init.py │ │ ├── response_generator.py │ │ └── retriever.py │ ├── init.py │ ├── interface │ │ ├── base_datastore.py │ │ ├── base_evaluator.py │ │ ├── base_indexer.py │ │ ├── base_response_generator.py │ │ ├── base_retriever.py │ └── RAG_pipeline.py ├── tests │ └── test_rag.py
Installation
Environnement virtuel
L'utilisation d'un environnement virtuel est recommandée:
python -m venv RAG_venv
source RAG_venv/bin/activate # On Windows: venv\Scripts\activate
Dépendances
Les dépendances sont installées avec:
pip install -r requirements.txt
Variables d'environnement:
Le projet utilise une variable d'environnement pour stocker la clé API GROQ.
Pour en créer une:
-
Aller sur https://console.groq.com
-
Créer un compte (gratuit)
-
Générer une clé API
-
Créer une variable d'environnement:
export GROQ_API_KEY="votre_cle_ici"
Utilisation
La CLI implémente plusieurs commandes:
-
reset, pour réinitialiser la BDD:
python3 main.py reset -
add, pour ajouter un ou plusieurs documents à la BDD, par défaut le répertoire data/source/ à la racine du projet:
python3 main.py addIl est aussi possible de spécifier un chemin vers un document ou un répertoire:
python3 main.py add --path "chemin vers un dossier ou fichier" -
evaluate, pour lancer l'évaluation du modèle, par défaut le fichier data/eval/sample_questions.json, il est aussi possible d'ajouter son propre fichier .json en spécifiant le chemin:
python3 main.py evaluateou
python3 main.py evaluate --eval_file "chemin vers un fichier .json" -
run, exécute la pipeline dans son intégralité, reset la BDD, ajoute les documents et lance une évaluation, les paramètres peuvent être ajustés avec les options --path et --eval_file comme pour add et evaluate:
python3 main.py runpython3 main.py run --path "chemin vers les documents à ajouter" --eval_file "chemin vers les questions/réponses en .json" -
query, envoie une requête à la pipeline:
python3 main.py query "requête à saisir entre guillemets"
Il est possible d'obtenir la liste des commandes avec -h:
python3 main.py -h
Ou plus d'informations sur une commande en particulier:
python3 main.py query -h
Sources
Le squelette du RAG utilisé vient de:
