RAG avec FAISS et Instructor Embeddings

Cette application illustre un pipeline de Retrieval-Augmented Generation (RAG) intégrant :

  • des embeddings calculés avec Sentence-Transformers,
  • une recherche vectorielle (FAISS ou similarité cosinus),
  • une génération de texte par modèle de langage (OpenAI GPT-3.5 ou TinyLlama local).

Le fichier principal (main.py) permet de contrôler le corpus, la requête, la méthode de recherche et le modèle, sans modifier le code source.

Installation

Prérequis

  • Python ≥ 3.10 (vérifiez la contrainte indiquée dans pyproject.toml).
  • Poetry pour la gestion des dépendances.
  • Une clé OpenAI (si vous utilisez le modèle gpt-3.5-turbo).

Étapes

Pour installer l’application, commencez par copier le dépot du livre ([AI-book sur github][ia-gh]), soit en recupérant l’archive zip depuis github, soit à l’aide de l’outil git:

git clone https://github.com/iridia-ulb/AI-book
  • Exportez votre clé OpenAI si vous souhaitez utiliser GPT-3.5 :
export OPENAI_API_KEY="sk-..."

Alternativement, vous pouvez la renseigner dans le fichier llm.py à la ligne 7 (openai.api_key = "Votre clé").

Utilisation

Affichez l’aide complète :

poetry run python main.py --help

Exemples

Démonstration complète (séquence intégrée)

poetry run python main.py --demo

Exécute successivement :

  • génération sans documents (GPT-3.5 puis TinyLlama),
  • RAG FAISS et Cosine avec GPT-3.5 (k=5),
  • RAG FAISS et Cosine avec TinyLlama (k=2).

Requête RAG simple (FAISS + OpenAI)

poetry run python main.py --data_dir data/jo --query "Explain volunteer onboarding" --search faiss --k 5 --model gpt-3.5-turbo

Requête RAG avec TinyLlama

poetry run python main_cli.py --query "What are opening ceremony logistics?" --search cosine --k 4  --model tinyllama

Pour TinyLlama, le script ajuste automatiquement k=2 pour respecter sa fenêtre de contexte plus réduite.

Réponse sans documents

poetry run python main_cli.py --query "Summarize the volunteer program" --no_docs

Paramètres

  • --data_dir DATA_DIR : dossier contenant les fichiers texte (par défaut data/jo).

  • --query QUERY : question posée au système.

  • --search {faiss, cosine} : méthode de recherche vectorielle.

  • --k K : nombre de voisins à récupérer (par défaut 5).

  • --model MODEL : modèle de génération (gpt-3.5-turbo ou tinyllama).

  • --no_docs : ignore le corpus et génère une réponse directe du LLM.

  • --demo : exécute la séquence de démonstration (voir ci-dessus).

Résumé

usage: main_cli.py [--data_dir DATA_DIR] [--query QUERY]
                   [--search {faiss,cosine}] [--k K]
                   [--model MODEL] [--no_docs] [--demo]