Ajout d'un README détaillant le fonctionnement et l'utilisation du RAG

This commit is contained in:
2025-11-14 16:02:04 +01:00
parent 81fdec1c32
commit 40c7ce6968
2 changed files with 168 additions and 0 deletions

168
README.md Normal file
View File

@ -0,0 +1,168 @@
[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
1. Architecture
2. Installation
3. 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.
![Schéma de fonctionnement du RAG](./pipeline.png)
.
├── 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:
```bash
python -m venv RAG_venv
source RAG_venv/bin/activate # On Windows: venv\Scripts\activate
```
##### Dépendances
Les dépendances sont installées avec:
```bash
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:
1. Aller sur https://console.groq.com
2. Créer un compte (gratuit)
3. Générer une clé API
4. Créer une variable d'environnement:
```bash
export GROQ_API_KEY="votre_cle_ici"
```
## Utilisation
La CLI implémente plusieurs commandes:
- reset, pour réinitialiser la BDD:
```bash
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:
```bash
python3 main.py add
```
Il est aussi possible de spécifier un chemin vers un document ou un répertoire:
```bash
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:
```bash
python3 main.py evaluate
```
ou
```bash
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:
```bash
python3 main.py run
```
```bash
python3 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:
```bash
python3 main.py query "requête à saisir entre guillemets"
```
Il est possible d'obtenir la liste des commandes avec -h:
```bash
python3 main.py -h
```
Ou plus d'informations sur une commande en particulier:
```bash
python3 main.py query -h
```
## Sources
Le squelette du RAG utilisé vient de:
https://github.com/pixegami/simple-rag-pipeline

BIN
pipeline.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB