2025-11-03 18:20:12 +01:00
2025-11-03 18:20:12 +01:00

[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

. ├── 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:

  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:

    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 add
    

    Il 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 evaluate
    

    ou

    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 run
    
    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:

    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:

https://github.com/pixegami/simple-rag-pipeline

Description
No description provided
Readme 424 KiB
Languages
Python 100%