title: "Session 4 — RAG : donner de la mémoire au modèle"
author: "Applied AI · Yann Isola"
theme: "Palette : ink #1A2230 · teal #0F7A6C · copper #B4612A · light #E9F6F3 · bg #F4F7F6"

Slide 1 — Titre

RAG : donner de la mémoire au modèle

Applied AI · Niveau intermédiaire · Session 4 · 2 h

RAG = Retrieval-Augmented Generation — Génération Augmentée par la Récupération

Notes : Accueillir. Annoncer le fil rouge : à la fin de la séance, chacun saura dessiner un pipeline RAG complet et diagnostiquer pourquoi un RAG répond mal. Rappeler que cette session s'appuie directement sur la Session 1 (embeddings).

Slide 2 — Ce que vous saurez faire dans 2 heures

  1. Expliquer les trois limites de la mémoire d'un LLM
  2. Dessiner les deux pipelines du RAG (ingestion / requête)
  3. Prendre les décisions de chunking (découpage)
  4. Justifier la recherche hybride
  5. Diagnostiquer un RAG qui échoue — sans accuser le modèle à tort

Notes : LLM = Large Language Model, grand modèle de langage — redéfinir même si le groupe connaît. Chaque objectif correspond à un bloc de la séance.

Slide 3 — Rappel Session 1 : le sens devient géométrie

  • Un embedding transforme un texte en vecteur (liste de nombres)
  • Textes de sens proche → points proches dans l'espace
  • « congés » et « vacances » : voisins. « congés » et « serveur SQL » : éloignés

Notes : Interroger le groupe 30 secondes : « qui peut me redéfinir un embedding ? ». Ce rappel est la fondation de toute la séance — la récupération vectorielle n'est QUE de la géométrie. Sans ça, la suite est du vaudou.

Slide 4 — Expérience de pensée

« Combien me reste-t-il de jours de congés ? »

Que répond un modèle de langage seul ?

❌ Il ne sait pas… ou pire : il invente

Notes : Laisser le groupe répondre. Les deux issues (aveu d'ignorance / invention plausible) illustrent le problème. Enchaîner : POURQUOI ne peut-il pas savoir ? → slide suivante.

Slide 5 — Limite n°1 : une mémoire figée

  • La connaissance s'arrête à la date de coupure de l'entraînement (knowledge cutoff)
  • Tout événement postérieur n'existe pas pour le modèle
  • Exemple : une réorganisation interne de mars 2026 est invisible pour un modèle entraîné avant

Notes : Analogie : un journal imprimé — excellent le jour J, jamais mis à jour ensuite. Préciser que ré-entraîner un modèle coûte des millions ⚠ : on ne le fait pas pour rafraîchir des faits.

Slide 6 — Limite n°2 : une mémoire publique

  • Entraînement sur des données publiques (web, livres, code…)
  • Vos contrats, procédures, tickets, wikis internes : jamais vus
  • Le modèle ne connaît pas votre entreprise — par construction

Notes : C'est la limite la plus importante en contexte professionnel. Question au groupe : « quels documents de VOTRE quotidien un modèle n'a jamais vus ? » — faire lister 3-4 exemples concrets, on les réutilisera au bloc chunking.

Slide 7 — Limite n°3 : une mémoire avec pertes

  • La connaissance est stockée compressée, avec pertes (lossy) dans les poids
  • Le modèle a « lu » Wikipédia… mais ne peut pas le réciter
  • Comme vous avec un livre lu il y a dix ans : l'idée reste, le texte exact non

Notes : C'est la limite la moins intuitive. Conséquence : même sur du public, le modèle peut déformer des détails (dates, chiffres, noms). D'où les hallucinations plausibles. Les trois limites ensemble justifient le RAG.

Slide 8 — Mini-démo : le mur

Question au modèle (sans RAG) : « Quelle est la procédure de remboursement des frais chez [entreprise fictive] ? »

Réponse : générique, inventée, ou refus.

Le modèle passe un examen à mémoire fermée.

Notes : Démo en direct si un modèle est disponible hors ligne, sinon captures dans le support. Installer l'expression « examen à mémoire fermée » — le RAG sera « à livre ouvert ».

Slide 9 — L'idée du RAG

Transformer chaque question en examen à livre ouvert

RAG = Retrieval-Augmented Generation
(Génération Augmentée par la Récupération)

Au lieu de compter sur la mémoire du modèle :
on retrouve les bons documents, on les donne au modèle, il répond avec.

Notes : LA slide pivot. On ne modifie pas le modèle, on ne le ré-entraîne pas : on enrichit son prompt au moment de la question. Le modèle reste le même — c'est son contexte qui change.

Slide 10 — Pourquoi pas tout mettre dans le prompt ?

  • Fenêtre de contexte limitée (et vos documents = des milliers de pages)
  • Contexte très long = qualité qui se dégrade + coût par requête qui explose
  • Le RAG sélectionne : seuls les passages pertinents entrent dans le prompt

Notes : Objection fréquente à désamorcer tout de suite. Analogie : pour répondre à une question d'examen, on n'apporte pas la bibliothèque entière — on apporte les 3 bonnes fiches.

Slide 11 — Vue d'ensemble : deux pipelines

Ingestion Requête
Quand Hors ligne, en amont En ligne, à chaque question
Fréquence Une fois + mises à jour Des milliers de fois par jour
Rôle Préparer la bibliothèque Consulter la bibliothèque

Notes : Séparation temporelle fondamentale — les participants les confondent systématiquement. L'ingestion se fait SANS utilisateur ; la requête se joue en quelques centaines de millisecondes ⚠.

Slide 12 — Pipeline d'ingestion (1/3) : découper

Documents → chunks (morceaux)

  • Un document entier = trop gros, trop hétérogène
  • On le découpe en fragments de 300 à 800 tokens ⚠
  • Chaque chunk = idéalement une unité de sens

Notes : Rappel : 1 token ≈ 0,75 mot en anglais, un peu moins en français ⚠. Le mot « chunk » restera en anglais (standard du métier) — le traduire une fois : « morceau ». Les décisions fines de découpage arrivent au bloc C.

Slide 13 — Pipeline d'ingestion (2/3) : vectoriser

Chaque chunk → un embedding

  • Le sens de chaque chunk devient un point dans l'espace (Session 1)
  • Chunks de sens proche → points voisins

Notes : Insister : c'est le MÊME mécanisme qu'en Session 1, appliqué à chaque morceau de document. Un corpus de 10 000 chunks = 10 000 points dans un espace de plusieurs centaines de dimensions ⚠.

Slide 14 — Pipeline d'ingestion (3/3) : indexer

Les vecteurs → un index vectoriel

  • Base spécialisée pour répondre vite à : « quels sont les k points les plus proches de celui-ci ? »
  • Résultat de l'ingestion : une bibliothèque interrogeable par le sens

Notes : Ne pas entrer dans les détails d'implémentation des bases vectorielles — hors périmètre. Retenir la fonction : recherche des plus proches voisins, rapide, à grande échelle.

Slide 15 — Pipeline de requête (1/2)

À chaque question :

  1. Vectoriser la question — avec le même modèle d'embedding que les chunks
  2. Récupérer les k chunks les plus proches (k ≈ 3 à 10 ⚠)

Notes : Point conceptuel clé : question et chunks doivent vivre dans le MÊME espace, sinon « proche » ne veut rien dire. Deux modèles d'embedding différents = deux espaces incompatibles. Sur k : petit = risque de rater l'info ; grand = bruit + coût.

Slide 16 — Pipeline de requête (2/2)

  1. Assembler le prompt :
Instruction : « Réponds uniquement à partir du contexte. »
+ Contexte : [chunk 1] [chunk 2] [chunk 3]
+ Question de l'utilisateur
  1. Générer : le modèle répond à livre ouvert, en citant ses sources

Notes : Montrer qu'il n'y a AUCUNE magie : le RAG, c'est de l'assemblage de prompt. Le modèle ne « se connecte » à rien — il lit ce qu'on lui met sous les yeux, rien de plus.

Slide 17 — Démo : le simulateur de pipeline

🖥️ webpage/index.html — onglet Simulateur de pipeline RAG

Question → embedding → récupération top-3 → prompt assemblé → réponse citée

Notes : 5 minutes. Taper « Combien de jours de télétravail par semaine ? ». Avant chaque étape, demander au groupe de PRÉDIRE ce qui va sortir. Terminer par la question piège « politique tarifaire pour les ONG » → refus élégant (teasing du bloc D). Puis pause.

Slide 18 — Le chunking : le levier n°1

La qualité d'un RAG se joue d'abord au découpage

4 décisions :
taille · chevauchement · structure · tables

Notes : Reprise après pause. Annoncer la couleur : un RAG médiocre a presque toujours un chunking médiocre. Analogie fil rouge : découper un livre en fiches de révision.

Slide 19 — Décision 1 & 2 : taille et chevauchement

  • Trop petit : « Il doit être validé avant. » — qui, « il » ? Le chunk a perdu son contexte
  • Trop grand : plusieurs sujets mélangés → embedding « moyen », flou, mal récupéré
  • Bonne plage : 300–800 tokens ⚠
  • Chevauchement de 10–20 % ⚠ : aucune info ne meurt coupée à la frontière

Notes : Faire la démo au visualiseur de chunking (onglet 2) : taille fixe minuscule → phrases orphelines ; puis activer le chevauchement et montrer la zone surlignée cuivre.

Slide 20 — Décision 3 : découper sur la structure

  • Couper sur titres, sections, paragraphes — jamais en pleine phrase
  • Un chunk = une unité de sens autonome
  • Astuce : préfixer chaque chunk de son fil d'Ariane
    (« Chapitre 4 > Export > Formats supportés »)

Notes : Le fil d'Ariane rend le chunk compréhensible seul ET améliore sa récupération (les mots du titre comptent dans l'embedding). Montrer la stratégie « structurelle » dans le visualiseur : les sections restent entières.

Slide 21 — Décision 4 : les tables restent entières

Une ligne coupée de son en-tête :

« 130 € / nuit | Facture nominative » — de quoi parle-t-on ?

Règle : un tableau = jamais coupé. Tableau entier + sa phrase d'introduction = un chunk.

Notes : Exemple volontairement frappant. Dans le visualiseur, la stratégie « taille fixe » coupe le tableau des barèmes en plein milieu — le montrer. Cas réels : grilles tarifaires, matrices de compatibilité, barèmes RH.

Slide 22 — Les métadonnées : l'étiquette de chaque chunk

Chaque chunk transporte : source · section · date · niveau d'accès

Usage Exemple
Filtrage « chercher uniquement dans les docs RH ≥ 2024 »
Citations la réponse pointe le document source — vérifiable
Sécurité un commercial ne récupère pas les chunks du dossier paie

Notes : Insister sur la sécurité : le filtre par niveau d'accès s'applique À LA RÉCUPÉRATION, jamais après génération (si le chunk entre dans le prompt, l'info peut fuiter dans la réponse). Les citations = condition de la confiance en entreprise. Lancer l'exercice 1 juste après cette slide.

Slide 23 — Les vecteurs ratent les codes exacts

Cherchez « erreur REF-2024-8812 » :

  • Sémantiquement, ce code ne « veut rien dire »
  • Son embedding ≈ celui de REF-2024-8811, ERR-4471, n'importe quel code
  • La recherche vectorielle renvoie… n'importe quoi

Notes : Démo choc à l'explorateur de similarité (onglet 3) : cliquer ERR-4471 vs ERR-4472 → similarité quasi 1 alors qu'ils désignent des choses différentes. Autres victimes : noms propres rares, références produit, numéros d'articles de loi.

Slide 24 — La solution : recherche hybride

Vecteurs (le sens) + mots-clés (l'exact) → fusion des résultats

  • Vectoriel : « congés paternité » trouve « congé de naissance »
  • Lexical (type BM25) : « ERR-4471 » trouvé exactement, à coup sûr
  • Le standard des RAG sérieux : les deux, combinés

Notes : BM25 = algorithme classique de recherche par mots-clés (le citer sans le détailler). Message : vectoriel et lexical ne sont pas concurrents mais complémentaires — chacun rattrape les angles morts de l'autre.

Slide 25 — Quand le RAG échoue… qui est coupable ?

Réflexe erroné : « le modèle hallucine, changeons de modèle »

Réflexe correct : inspecter d'abord les chunks récupérés

Dans la majorité des cas ⚠, la faute est à la récupération, pas au modèle.

Notes : LE message opérationnel de la session. Analogie du cuisinier et du commis : si le commis apporte du sel au lieu du sucre, changer de cuisinier ne sauvera pas le dessert.

Slide 26 — Mode d'échec 1 : mauvais chunks récupérés

  • Question ambiguë, chunking défaillant, ou k trop petit
  • Le modèle reçoit un contexte hors sujet → répond hors sujet
  • Le modèle a bien travaillé… avec de mauvais ingrédients

Correctifs : re-découper, ajuster k, reformuler, hybride

Notes : Exemple : question « délai de rétractation » → chunks récupérés sur la signature électronique et l'archivage. La réponse sera fatalement mauvaise, quel que soit le modèle. C'est l'incident A de l'exercice 3.

Slide 27 — Mode d'échec 2 : document manquant

  • L'information n'a jamais été ingérée
  • Aucun modèle ne peut retrouver ce qui n'est pas dans l'index
  • Exemple : l'avenant congés 2025 jamais indexé → le RAG cite l'accord périmé de 2022

Correctifs : processus de mise à jour de l'index, métadonnée date, alerte sur l'âge des sources

Notes : Cas vicieux : la réponse semble sourcée et propre — elle est juste périmée. D'où l'importance des métadonnées de date et d'un processus de ré-ingestion à chaque mise à jour documentaire.

Slide 28 — Le cadrage et le refus élégant

Instruction : « Réponds uniquement à partir du contexte fourni. Si la réponse ne s'y trouve pas, dis-le. »

  • Coupe l'accès à la mémoire interne → moins d'hallucinations
  • « Je ne trouve pas cette information dans les documents fournis » = une bonne réponse

Un refus honnête vaut mieux qu'une invention plausible.

Notes : En entreprise, le refus élégant est un critère de qualité, pas un échec. Il déclenche la bonne action humaine : vérifier si le document existe, l'ingérer, reformuler. Relier à la démo « question ONG » du simulateur.

Slide 29 — Synthèse : les 5 idées à retenir

  1. Mémoire du LLM : figée, publique, avec pertes → RAG = livre ouvert
  2. Deux pipelines : ingestion (hors ligne) / requête (en ligne)
  3. Chunking = levier n°1 : 300–800 tokens ⚠, chevauchement, structure, tables entières
  4. Hybride : vecteurs (sens) + mots-clés (exact)
  5. Échec ? Inspecter les chunks d'abord — la récupération avant le modèle

Notes : Faire reformuler chaque point par un participant différent. Ce sont les 5 réponses attendues aux exit tickets.

Slide 30 — Quiz, exit tickets & prochaine session

  • 📝 Quiz : 10 questions, 6 minutes
  • 🎫 Exit ticket : 1 question, 2 phrases, à rendre en sortant
  • Session 5 : évaluer et améliorer un RAG — mesurer la qualité de la récupération, reranking, pièges avancés

Notes : Distribuer quiz puis tickets. Teasing session 5 : « vous savez construire un RAG ; la prochaine fois, vous saurez prouver qu'il marche — et le réparer quand il ne marche pas. » Ramasser les tickets à la porte.