Aller au contenu

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 Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from 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 pertinents
retriever = 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 LLM
qa_chain = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
# 5. Poser une question
response = qa_chain.run("Quelle est la politique de télétravail ?")
print(response)

Les Composants de la Stack RAG

Pour faire du RAG, vous avez besoin de :

  1. Orchestrateur : LangChain, LlamaIndex.
  2. Vector Database : Pinecone, Weaviate, Qdrant, ou simplement pgvector (Postgres).
  3. Embedding Model : OpenAI text-embedding-3-small ou Mistral Embed.
  4. 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)

Ressources Externes