Retrieval-augmented generation (RAG) : donner vos données aux modèles
Demandez à ChatGPT « Combien de jours de congés ai-je après trois ans ici ? » et il n'en a aucune idée. Il n'a jamais lu le règlement intérieur de votre entreprise. Il peut inventer une réponse avec assurance, ce qui est pire que de ne rien dire.
Le RAGRAGMéthode qui permet à un modèle d'IA de répondre à partir de vos propres documents, en récupérant les passages pertinents avant de générer une réponse.Voir la définition complète → corrige cela. C'est la technique derrière presque tous les produits « chat with your documents » que vous avez vus : bots de support client, assistants RH internes, outils de recherche juridique. À la fin de cette leçon, vous comprendrez exactement comment ça fonctionne, et vous en verrez le cœur en une vingtaine de lignes de Python.
Le problème que le RAG résout
Un large language modellarge language modelUn Large Language Model est un système d'IA entraîné sur d'énormes volumes de texte pour prédire et générer du langage, ce qui permet de rédiger, résumer ou répondre à des questions.Voir la définition complète → (LLM) comme GPT-5 ou Claude sait ce qui figurait dans ses données d'entraînement. Il ne sait pas :
- Les politiques internes de votre entreprise
- Les notes de réunion de la semaine dernière
- Vos dossiers clients confidentiels
- Tout ce qui a changé après sa date de training cutoff
Vous pourriez essayer de coller l'intégralité de votre règlement de 200 pages dans le chat. Mais les modèles ont une context windowcontext windowLa context window est la quantité maximale de texte (mesurée en tokens) qu'un modèle de langage peut traiter en une seule fois, prompt d'entrée et sortie générée compris.Voir la définition complète → : une limite sur la quantité de texte qu'ils peuvent lire d'un coup. Même avec les grandes fenêtres actuelles, tout déverser est lent, coûteux, et rend le modèle moins précis (il se laisse distraire par du texte hors sujet).
L'insight du RAG : ne donnez pas tout au modèle. Trouvez les quelques paragraphes pertinents et ne lui donnez que ceux-là.
Les trois étapes du RAG
Voyez le RAG comme un bibliothécaire intelligent. Vous posez une question, le bibliothécaire court chercher les trois pages les plus pertinentes et les remet au modèle avec votre question.
- Retrieval : chercher dans vos documents les chunks les plus pertinents pour la question.
- Augmentation : coller ces chunks dans le prompt.
- Generation : le modèle répond en s'appuyant sur ce texte collé.
Toute la magie est à l'étape 1. Comment un ordinateur sait-il quels paragraphes sont « pertinents » ? C'est là que les embeddings entrent en jeu.
Les embeddings : transformertransformerUn Transformer est une architecture de réseau de neurones qui utilise le self-attention pour traiter des séquences en parallèle. Elle est au cœur de la plupart des modèles de langage et d'IA générative actuels.Voir la définition complète → le sens en nombres
Un embeddingembeddingUn embedding est un vecteur numérique qui représente des données (texte, images ou items) en capturant leur sens, de sorte que les éléments similaires se retrouvent proches dans l'espace.Voir la définition complète → est une liste de nombres qui représente le *sens* d'un morceau de texte. Des sens proches donnent des nombres proches.
« Combien de congés payés ai-je ? » et « Quelle est la politique de vacances ? » n'ont presque aucun mot en commun. Mais leurs embeddings se retrouvent tout près l'un de l'autre, parce qu'ils veulent dire à peu près la même chose. C'est la clé : les embeddings permettent de chercher par le sens, pas par mot-clé.
Vous crcrLe pourcentage de visiteurs ou de prospects qui réalisent une action attendue (achat, inscription, formulaire de contact), calculé en divisant les conversions par le nombre total d'opportunités.Voir la définition complète →éez des embeddings en appelant un modèle d'embedding (OpenAI, Google et Cohere en proposent tous à bas coût). Vous récupérez une longue liste de nombres, souvent 1 536, pour chaque chunk de texte.
Envie d'une intuition visuelle ? L'embedding projector de Google vous permet de survoler de vrais embeddings de mots en 3D : projector.tensorflow.org.
Construire le chatbot du règlement intérieur
Construisons-le d'abord conceptuellement, puis en code.
Étape 1 : découper le règlement en chunks
Vous ne pouvez pas embedder un document de 200 pages en un seul bloc. Vous le découpez en chunks, généralement quelques paragraphes chacun (disons 500 mots). Chaque chunk devient une unité recherchable.
Ainsi notre règlement devient peut-être 400 chunks : un sur le congé parental, un sur les notes de frais, un sur l'acquisition des congés, etc.
Étape 2 : embedder chaque chunk et le stocker
Vous passez chaque chunk dans le modèle d'embedding et stockez les nombres obtenus dans une base de données vectorielle (une base conçue pour chercher par similarité). Parmi les plus utilisées en 2026 : Chroma, Pinecone et pgvector. Pour de petits projets, vous n'en avez même pas besoin : une simple liste en mémoire suffit.
Cette étape se fait une fois, en amont. On l'appelle « l'indexation ».
Étape 3 : répondre à une question
Quand un utilisateur demande quelque chose :
- Embedder sa question.
- Trouver les chunks dont les embeddings sont les plus proches de celui de la question.
- Coller ces chunks dans le prompt.
- Envoyer le tout au modèle.
What is Retrieval-Augmented Generation (RAG)?
L'esquisse de code
Voici tout le pattern en Python exécutable, avec OpenAI. Peu importe si vous ne codez pas ; lisez les commentaires et vous suivrez la logique.
from openai import OpenAI
import numpy as np
client = OpenAI() # utilise votre clé API
# 1. Notre « règlement », découpé en chunks
chunks = [
"Employees accrue 15 vacation days per year. After 3 years, this increases to 20 days.",
"Expense reports must be submitted within 30 days using the Concur portal.",
"Parental leave is 16 weeks of paid time off for all new parents.",
]
def embed(text):
# Transforme le texte en une liste de nombres (son embedding)
resp = client.embeddings.create(
model="text-embedding-3-small", input=text
)
return np.array(resp.data[0].embedding)
# 2. Embedder chaque chunk une fois (l'« index »)
chunk_vectors = [embed(c) for c in chunks]
# 3. Un utilisateur pose une question
question = "How many vacation days do I get after three years?"
q_vector = embed(question)
# 4. Trouver le chunk le plus similaire (similarité cosinus)
def similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
scores = [similarity(q_vector, cv) for cv in chunk_vectors]
best_chunk = chunks[int(np.argmax(scores))]
# 5. Insérer le meilleur chunk dans le prompt
prompt = f"""Answer using ONLY the context below.
If the answer isn't there, say you don't know.
Context: {best_chunk}
Question: {question}"""
answer = client.chat.completions.create(
model="gpt-5",
messages=[{"role": "user", "content": prompt}],
)
print(answer.choices[0].message.content)Ce qui se passe : l'embedding de la question est le plus proche du chunk *congés* (pas des frais, pas du congé parental). On ne colle que ce chunk, et le modèle répond « 20 jours » directement depuis vos données.
Remarquez l'instruction du prompt : « Answer using ONLY the context below. » C'est ce qui garde le modèle honnête. Ça l'empêche d'inventer des réponses et l'ancre dans votre texte.
Vérification des acquis
1. Quel est l'insight central de l'approche RAG pour répondre à des questions à partir de vos données ?
2. Pourquoi coller simplement un règlement de 200 pages dans la fenêtre de chat est-il généralement une mauvaise solution ?
3. Pourquoi une recherche fondée sur les embeddings peut-elle rapprocher « Combien de congés payés ai-je ? » et « Quelle est la politique de vacances ? » alors qu'elles ne partagent presque aucun mot ?
4. Sélectionnez TOUTES les limitations réelles d'un LLM de base que le RAG vise à corriger.
Sélectionnez toutes les réponses correctes.
5. Sélectionnez TOUTES les affirmations qui décrivent correctement les trois étapes du RAG (Retrieval, Augmentation, Generation).
Sélectionnez toutes les réponses correctes.
Pourquoi le RAG bat les alternatives
On demande souvent : pourquoi ne pas simplement fine-tuner le modèle sur mes données ? (Le fine-tuningfine-tuningLe fine-tuning adapte un modèle pré-entraîné à une tâche ou un domaine précis en poursuivant son entraînement sur un jeu de données plus petit et ciblé, ce qui améliore la précision et le style pour ce cas d'usage.Voir la définition complète → consiste à réentraîner le modèle pour que vos données vivent à l'intérieur.)
Le RAG gagne généralement pour la connaissance d'entreprise parce que :
- Il se met à jour instantanément. Une politique change ? Ré-embeddez un chunk. Avec le fine-tuning, il faudrait réentraîner.
- Il cite ses sources. Vous savez exactement quel chunk a produit la réponse, donc vous pouvez afficher « d'après la page 14 du règlement ».
- Il est moins cher et plus rapide à mettre en place.
- Il réduit l'hallucination. Le modèle répond à partir du texte qu'il a sous les yeux, pas d'une mémoire floue.
Le fine-tuning est meilleur pour changer le *style ou le comportement* du modèle (toujours répondre en langage juridique, toujours utiliser notre voix de marque). Le RAG est meilleur pour lui fournir des *faits*. Beaucoup de systèmes réels utilisent les deux.
Là où le RAG déraille (et comment corriger)
Le RAG n'est pas magique. Les échecs les plus fréquents :
Mauvais chunking. Si vous coupez une phrase en deux, le retrieval casse. Correctif : découpez par paragraphe ou par section, et laissez les chunks se chevaucher légèrement pour ne pas perdre le contexte aux bords.
Récupérer les mauvais chunks. Si la question est vague, vous risquez de remonter du texte hors sujet. Correctif : récupérez les 3 à 5 meilleurs chunks au lieu d'un seul, pour donner plus de matière au modèle.
La réponse s'étend sur plusieurs chunks. « Comparez nos politiques de voyage 2024 et 2025 » nécessite deux sections. Correctif : récupérez plus de chunks et laissez le modèle faire la synthèse.
Index obsolète. Vous avez mis à jour le règlement mais oublié de ré-embedder. Le bot donne d'anciennes réponses. Correctif : ré-indexez selon un calendrier.
Vous n'avez pas toujours besoin de le construire
En 2026, vous pouvez obtenir du RAG sans écrire le code ci-dessus :
- ChatGPT et Claude vous laissent uploader des fichiers dans un Project, et ils y font du retrieval automatiquement.
- Les Custom GPTs et Claude Projects permettent de construire un bot de règlement intérieur en uploadant des documents, sans aucun code.
- NotebookLM de Google est du RAG dans un habillage accessible : vous uploadez des sources, posez des questions, et obtenez des réponses avec des citations renvoyant au passage exact.
Utilisez-les pour un usage réduit ou personnel. Construisez le pipelinepipelineL'ensemble des opportunités commerciales actives réparties selon les étapes du processus de vente, avec leur valeur potentielle cumulée et leur probabilité de conclusion.Voir la définition complète → vous-même quand vous avez besoin de contrôle, de scalabilité, d'un hébergement privé ou d'une intégration dans un produit.
Points clés
- RAG = récupérer les chunks pertinents, les coller dans le prompt, laisser le modèle répondre. Il ancre le modèle dans *vos* données plutôt que dans l'internet ouvert.
- Les embeddings sont le moteur. Ils transforment le texte en nombres pour chercher par le sens, en rapprochant « politique de vacances » et « congés payés » même sans mot commun.
- Demandez toujours au modèle de répondre uniquement à partir du contexte fourni. Cette seule ligne réduit fortement l'hallucination et vous permet de tracer les réponses jusqu'à une source.
- Commencez en no-code. Utilisez NotebookLM, un Custom GPT ou un Claude Project pour prototyper votre bot de règlement dès aujourd'hui, puis passez à une vraie base vectorielle (Chroma, pgvector) quand vous en aurez dépassé les limites.
- La qualité du chunking décide de la qualité du retrieval. Découpez par section, autorisez un léger chevauchement, et ré-indexez dès que vos documents changent.
À faire, tiré de cette leçon
Ces actions sont compilées dans le plan d'action du rôle.
- Passez le RAG et collez de petits ensembles de documents directement dans le prompt
Articles liés
Les articles récents du blog qui s'appuient sur cette leçon.
- IAConfidentialité des données quand tout transite par un modèle : le vrai problème n'est pas celui qu'on croitLa plupart des organisations traitent la confidentialité des données dans les LLM comme un problème de conformité à cocher. C'est précisément ce réflexe qui les expose aux risques les plus sérieux.
- IADonner à l'IA le bon contexte : ce que Morgan Stanley a compris avant les autresQuand Morgan Stanley a déployé un assistant IA pour ses conseillers financiers, le projet a failli échouer non par manque d'information fournie au modèle, mais par excès. L'histoire de ce déploiement illustre une règle que beaucoup de professionnels apprennent à leurs dépens : ce qui compte, c'est la pertinence du contexte, pas son volume.
- IABloomberg et les LLM : pourquoi ils ont choisi le fine-tuning plutôt que le RAG, et ce que ça révèleBloomberg a entraîné son propre modèle de langage sur 700 milliards de tokens financiers plutôt que de s'appuyer sur une architecture de récupération documentaire. Ce choix, documenté et assumé, illustre une décision d'architecture que beaucoup d'entreprises affrontent sans en mesurer les implications réelles.