Aller au contenu
Développement medium

RAG : augmenter un LLM avec vos données

10 min de lecture

Votre LLM répond à côté quand vous l’interrogez sur votre documentation interne ? Normal : il n’a jamais vu vos docs. Le RAG (Retrieval-Augmented Generation) résout ce problème : il cherche les passages pertinents dans vos documents, puis les injecte dans le prompt du LLM pour générer une réponse précise et sourcée.

Ce guide est la porte d’entrée vers un parcours complet qui vous emmène du concept à un RAG en production, étape par étape.

À la fin de ce parcours, vous saurez :

  • Collecter du contenu web propre (scraping intelligent)
  • Nettoyer les textes pour l’indexation
  • Découper les documents en chunks pertinents
  • Créer des embeddings et comprendre la similarité sémantique
  • Stocker dans une base vectorielle (ChromaDB, FAISS)
  • Construire un RAG complet qui répond en citant ses sources
  • Optimiser avec la recherche hybride et le reranking
  • Déployer en production avec sécurité, évaluation et monitoring

RAG signifie Retrieval-Augmented Generation. C’est une technique qui permet à un LLM de répondre à partir de vos documents, sans avoir besoin de le fine-tuner.

Un LLM comme GPT-4 ou Claude connaît énormément de choses, mais il ne connaît pas :

  • Votre documentation interne
  • Vos runbooks et procédures
  • Vos tickets et post-mortems
  • Votre wiki Confluence ou Notion

Si vous lui posez une question sur ces documents, il va inventer une réponse (hallucination) ou avouer qu’il ne sait pas.

Au lieu de demander au LLM de “connaître” vos documents, on lui fournit les passages pertinents au moment de la question :

[Sans RAG]
User: Comment déployer sur staging ?
LLM: Je ne sais pas, je n'ai pas accès à votre documentation.
[Avec RAG]
User: Comment déployer sur staging ?
RAG: *cherche dans vos docs* → trouve "runbook-k8s.md"
RAG: *injecte le passage dans le prompt*
LLM: Selon votre documentation, utilisez `kubectl apply -f staging/`.
[Source: runbook-k8s.md]
BesoinSolution
Répondre à partir de docs internes / wiki / runbooksRAG
Données qui changent souventRAG
Personnaliser le style (ton, format)Fine-tuning ou prompt engineering
Faire des actions (déployer, ouvrir un ticket)Agent + tool calling
Mémoriser des connaissances généralesFine-tuning

Un RAG fonctionne en deux phases distinctes :

Pipeline RAG : indexation, retrieval, génération

Cette phase prépare vos documents pour la recherche. Elle s’exécute une fois (puis à chaque mise à jour des docs).

  1. Collecter : scraper les pages web, lire les fichiers Markdown, PDF, etc.

  2. Nettoyer : supprimer le HTML, normaliser les espaces, corriger l’encodage

  3. Découper (chunking) : diviser les documents en morceaux de 300-800 tokens

  4. Encoder (embeddings) : transformer chaque chunk en vecteur numérique

  5. Stocker : sauvegarder les vecteurs dans une base vectorielle (ChromaDB, FAISS)

Cette phase s’exécute à chaque question utilisateur.

  1. Encoder la question : transformer la question en vecteur

  2. Rechercher : trouver les chunks les plus proches (similarité cosinus)

  3. Construire le prompt : injecter les chunks pertinents dans le contexte

  4. Générer : le LLM produit une réponse basée sur le contexte

  5. Citer : inclure les sources dans la réponse

Ce parcours vous guide à travers toutes les étapes pour construire un RAG fonctionnel. Suivez-le dans l’ordre pour une progression logique.

Avant de créer un RAG, il faut récupérer le contenu à indexer. Si vos documents sont sur le web, vous devez les scraper proprement.

Ce que vous apprendrez :

  • Scraper une page web et extraire le texte principal
  • Gérer les métadonnées (titre, date, auteur)
  • Traiter plusieurs pages en batch
  • Respecter les bonnes pratiques (rate limiting, robots.txt)

Le contenu brut contient souvent du bruit : caractères spéciaux, espaces multiples, HTML résiduel. Un nettoyage propre améliore la qualité du RAG.

Ce que vous apprendrez :

  • Normaliser l’encodage Unicode
  • Supprimer les caractères indésirables
  • Segmenter en phrases avec NLTK/spaCy
  • Détecter la langue

Un document de 50 pages est trop long pour être utilisé directement. Le chunking le divise en morceaux cohérents que le retriever peut rechercher efficacement.

Ce que vous apprendrez :

  • Choisir la bonne taille de chunk (300-800 tokens)
  • Utiliser l’overlap pour conserver le contexte
  • Comparer 5 stratégies (fixe, récursif, phrases, sections, sémantique)
  • Identifier la stratégie adaptée à votre contenu

Les embeddings transforment le texte en vecteurs numériques. Deux textes au sens proche auront des vecteurs proches, permettant la recherche sémantique.

Ce que vous apprendrez :

  • Générer des embeddings avec sentence-transformers
  • Comprendre la similarité cosinus
  • Comparer les modèles (all-MiniLM, E5, BGE)
  • Gérer le multilingue

Une base vectorielle stocke vos embeddings et permet de retrouver les chunks les plus proches d’une requête en millisecondes.

Ce que vous apprendrez :

  • Créer une collection et indexer des vecteurs
  • Rechercher par similarité (top-K)
  • Filtrer par métadonnées
  • Persister les données sur disque

Il est temps d’assembler tous les composants pour créer un système RAG fonctionnel qui répond à vos questions.

Ce que vous apprendrez :

  • Assembler le pipeline complet
  • Utiliser Ollama pour la génération locale
  • Écrire un prompt RAG avec citations
  • Tester et debugger votre RAG

Un RAG basique fonctionne, mais peut manquer des documents pertinents. La recherche hybride et le reranking améliorent significativement la qualité.

Ce que vous apprendrez :

  • Combiner dense + BM25 (recherche hybride)
  • Fusionner les résultats avec RRF
  • Affiner avec un reranker (cross-encoder)
  • Implémenter le contextual retrieval d’Anthropic

Un RAG en production nécessite sécurité (qui peut voir quoi), évaluation (mesurer la qualité) et observabilité (monitoring).

Ce que vous apprendrez :

  • Implémenter le filtrage ACL et multi-tenant
  • Évaluer avec RAGAS (recall, faithfulness)
  • Intégrer l’évaluation en CI/CD
  • Monitorer avec logs structurés et métriques

Avant de commencer, gardez en tête les choix qui impactent le plus la qualité de votre RAG :

TailleEffet
Trop petit (<100 tokens)Perte de contexte, chunks incompréhensibles
300-800 tokensBon équilibre (recommandé)
Trop grand (>1500 tokens)Embeddings dilués, bruit dans les résultats
UsageModèle recommandé
Dev / POCall-MiniLM-L6-v2 (rapide, anglais)
Production FRintfloat/multilingual-e5-small
Haute qualitéBAAI/bge-m3 ou OpenAI text-embedding-3-large
ValeurEffet
top-K = 3Rapide, risque de manquer l’info
top-K = 6-10Bon compromis
top-K > 15Risque de bruit, coût élevé
ApprocheQuand l’utiliser
Dense seulContenu narratif, peu de termes techniques
Dense + BM25Docs techniques, codes, IDs (recommandé)
ErreurConséquenceSolution
Chunks trop grosEmbeddings dilués, bruitRéduire à 300-800 tokens
Pas d’overlapContexte perdu aux frontièresOverlap 10-20%
Pas de BM25Rate les termes exacts (codes, IDs)Recherche hybride
Prompt trop permissifHallucinations”Réponds UNIQUEMENT selon le contexte”
Docs mal extraitesRetrieval incohérentNettoyer avec Trafilatura
Pas de métriquesImpossible de mesurer les progrèsÉvaluer avec RAGAS
  1. RAG = Recherche + Génération : le LLM ne connaît pas vos docs, mais peut les utiliser si vous les injectez

  2. Pipeline complet : Scraping → Nettoyage → Chunking → Embeddings → Vector DB → Retrieval → Génération

  3. Chunking critique : 300-800 tokens, overlap 10-20%, stratégie adaptée au contenu

  4. Recherche hybride : Dense + BM25 > Dense seul pour les docs techniques

  5. Évaluation obligatoire : Sans métriques, vous pilotez à l’aveugle

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.