RAG (Génération Augmentée par la Récupération)
Ce que vous saurez dans 3 minutes
Imaginez que vous passiez un examen.
- Sans RAG : Vous devez répondre de mémoire. Si vous avez oublié ou jamais appris, vous inventez (hallucination).
- Avec RAG : C’est un examen à “livre ouvert”. Vous avez le manuel sur la table. Vous cherchez la page pertinente, vous lisez, et vous synthétisez la réponse. Le RAG est aujourd’hui le standard de facto pour toutes les applications d’IA en entreprise.
1. Comprendre
Le Pipeline Standard (Mermaid)
Le RAG se décompose en deux temps : la préparation (Ingestion) et l’exécution (Inférence).
graph TD
subgraph Ingestion
Docs[Documents PDF/MD] -->|Chunking| Chunks[Morceaux de texte]
Chunks -->|Embedding Model| Vectors[Vecteurs]
Vectors --> DB[(Vector Database)]
end
subgraph Inférence
User(Question) -->|Embedding| QueryVec[Vecteur Question]
QueryVec -->|Similarity Search| DB
DB -->|Top-k Chunks| Context[Contexte Pertinent]
Context -->|Insérer dans Prompt| Prompt
User --> Prompt
Prompt --> LLM
LLM --> Answer(Réponse Sourcée)
end
Naive RAG vs Advanced RAG
- Naive RAG : On coupe le texte en morceaux de 500 mots, on cherche les plus proches, on envoie. Problème : on manque souvent la nuance ou le contexte global.
- Advanced RAG : On utilise des techniques sophistiquées pour améliorer la pertinence :
- Hybrid Search : Mots-clés (BM25) + Sémantique (Vecteurs).
- Re-ranking : Un second modèle (Cross-Encoder) relit les 50 résultats pour trier finement les 5 meilleurs.
- Query Expansion : L’IA réécrit la question de l’utilisateur sous 3 formes différentes pour maximiser les chances de trouver l’info.
2. Appliquer
Le Code (LangChain / Python)
Voici comment monter un pipeline RAG minimaliste en Python avec LangChain.
from langchain_community.vectorstores import Chromafrom langchain_openai import OpenAIEmbeddings, ChatOpenAIfrom langchain.chains import RetrievalQA
# 1. Charger la base de vecteurs (préalablement ingérée)vectorstore = Chroma(persist_directory="./db", embedding_function=OpenAIEmbeddings())
# 2. Créer le moteur de recherche (Retriever)# k=3 signifie qu'on récupère les 3 morceaux les plus pertinentsretriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 3. Initialiser le LLM (Cerveau)llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 4. Créer la chaîne RAG# La chaîne va automatiquement :# a. Prendre la question# b. Interroger le retriever# c. Construire le prompt avec le contexte# d. Envoyer au LLMqa_chain = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
# 5. Poser une questionresponse = qa_chain.run("Quelle est la politique de télétravail ?")print(response)Voici ce que le LLM reçoit vraiment :
Tu es un assistant utile. Utilise les éléments de contexte suivants pour répondre à la question à la fin.Si tu ne connais pas la réponse, dis simplement que tu ne sais pas, n'invente pas.
CONTEXTE :[Extrait du PDF RH Page 12] : Le télétravail est autorisé 2 jours par semaine...[Extrait du PDF RH Page 13] : La demande se fait via l'outil SIRH...
QUESTION :Quelle est la politique de télétravail ?
RÉPONSE :Les Composants de la Stack RAG
Pour faire du RAG, vous avez besoin de :
- Orchestrateur : LangChain, LlamaIndex.
- Vector Database : Pinecone, Weaviate, Qdrant, ou simplement pgvector (Postgres).
- Embedding Model : OpenAI
text-embedding-3-smallou Mistral Embed. - LLM : GPT-4, Claude 3, Llama 3.
3. Aller plus loin
Le “Contextual Retrieval”
Une limite du RAG classique est que si on coupe un document en morceaux, on perd le contexte.
- Chunk : “Il est arrivé à 10h.”
- Problème : Qui est “Il” ? Le retriever ne le sait pas.
- Solution (Anthropic) : Le Contextual Retrieval. On demande à une IA d’ajouter un résumé du document au début de chaque chunk avant de l’indexer.
- Chunk Augmenté : “[Document: Rapport Police] Le témoin Jean Dupont est arrivé à 10h.”
Graph RAG
Au lieu de couper le texte en morceaux plats, on construit un Knowledge Graph (Graphe de Connaissances).
- Concept : Personne A -> travaille_avec -> Personne B.
- Avantage : Permet de répondre à des questions complexes (“Quel est le lien indirect entre X et Y ?”) que la recherche vectorielle rate.
Questions Fréquentes
RAG vs Fine-Tuning : Lequel choisir ?
C’est LE dilemme classique.
- RAG : Pour apporter des connaissances nouvelles (Faits, Documents). C’est comme donner un livre à un étudiant.
- Fine-Tuning : Pour apprendre un comportement ou un style (Parler comme un médecin, suivre un format JSON). C’est comme envoyer l’étudiant en école de médecine. Dans 95% des cas, commencez par le RAG.
Combien ça coûte ?
Le coût principal est l’appel au LLM à chaque question. Le stockage vectoriel est négligeable pour des petits volumes (< 1M documents).
Notions Liées (Spider Web)
- La Brique de Base : Embeddings.
- La Base de Données : Base Vectorielle (à créer si n’existe pas, sinon Lier Vector Database).
- L’Alternative : Fine-Tuning.
- La version avancée : Contextual Retrieval.
Ressources Externes
- Papier Fondateur : Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (Lewis et al., 2020).
- Guide Pratique : Advanced RAG Techniques (LlamaIndex Docs).