Accueil / Factory / Algos ML / RAG — factory / algos ML / recherche et génération

ARCHITECTURE RAG.

Le RAG (Retrieval-Augmented Generation) branche un LLM sur vos documents. À chaque question, on cherche d'abord les passages pertinents dans votre base, puis on les donne au modèle avec la consigne de répondre à partir d'eux seuls. Les réponses deviennent vérifiables, et la base se met à jour sans réentraîner le modèle.

LLMRecherche sémantiqueDocuments internesSources citéesNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceRéponses ancrées dans vos sources, si la recherche les trouve
InterprétabilitéChaque réponse cite les passages qui l'ont nourrie
VitesseRecherche en millisecondes, génération en secondes
Facilité de réglageDécoupage, recherche et consigne à régler ensemble
Tolérance aux données brutesPDF mal extraits et doublons dégradent tout
EN 30 SECONDES

Un examen à livre ouvert : plutôt que de répondre de mémoire, l'étudiant cherche les bonnes pages dans son classeur, puis rédige en citant ses sources.

1. On indexe les documents

Les documents sont découpés en passages de quelques phrases. Chaque passage est transformé en vecteur (embedding) et stocké.

2. On retrouve les passages utiles

La question est transformée en vecteur à son tour, et on récupère les passages les plus proches, en général 3 à 10.

3. Le LLM répond à partir des passages

La consigne contient la question et les passages retenus, avec leurs références. Le modèle doit s'appuyer sur eux seuls, citer ses sources et signaler quand l'information manque.

LE CAS MÉTIER

voix du client · e-commerce / distribution
EN ENTRÉE

Une base d'avis et une question

Les 1 500 avis clients servent de base documentaire. Un responsable qualité pose sa question en français : « Que reprochent les clients au service après-vente ? »

EN SORTIE

Une synthèse avec références

Le code affiche les 8 avis retrouvés, puis la réponse du LLM qui cite leurs numéros. Le responsable ouvre les avis cités pour vérifier.

CE QU'ON MESURE

Deux étapes, deux mesures

Pour la recherche : sur une liste de questions test, les bons passages sont-ils dans les résultats (rappel à k) ? Pour la génération : chaque affirmation figure-t-elle dans les passages cités (fidélité) ? Une réponse fausse vient souvent d'une recherche ratée.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Assistant sur une documentation interne : procédures, contrats, fiches produits
  • Réponses qui doivent citer leurs sources pour être vérifiées
  • Base documentaire qui change souvent : on réindexe, sans réentraîner
  • Support ou helpdesk qui traite sans cesse les mêmes questions

NON

  • Questions de calcul sur des tableaux (CA moyen par zone) : un agent qui interroge la base fait mieux
  • Synthèse de tout un corpus : la recherche ne ramène que quelques passages, il faut un traitement par lots
  • Documents de mauvaise qualité ou contradictoires : le RAG répétera leurs erreurs
  • Changer le style ou le format des réponses : c'est le rôle du fine-tuning
LES 4 RÉGLAGES QUI COMPTENT

La qualité d'un RAG se joue surtout avant le LLM. Noms donnés pour le code de la fiche.

Taille des passages (chunks)

Trop courts, ils perdent le contexte ; trop longs, ils noient l'information utile. Pour des documents longs, quelques centaines de tokens avec un léger chevauchement sont un bon départ. Ici, chaque avis forme un passage.

Nombre de passages (k)

Combien de passages on donne au LLM, 8 dans le code. Trop peu, la réponse est incomplète ; trop, le coût monte et le modèle se disperse. On le règle sur des questions test.

Modèle d'embedding

Il doit bien gérer le français et le vocabulaire du métier. Une recherche hybride, qui combine mots-clés et embeddings, rattrape les références produits et les sigles.

Consigne de réponse

Exiger une réponse fondée sur les seuls passages, la citation des références et un « information absente » plutôt qu'une invention.

LE CODE MINIMAL

jeu d'exemple : avis_clients.csv ↓
# Voix du client : RAG en Python
import pandas as pd
from sentence_transformers import SentenceTransformer
from transformers import pipeline

avis = pd.read_csv("avis_clients.csv")

# 1. Indexation : chaque avis devient un vecteur (petit modèle public multilingue)
encodeur = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
index = encodeur.encode(avis["texte"].tolist(), normalize_embeddings=True)

# 2. Recherche : les 8 avis les plus proches de la question
question = "Que reprochent les clients au service après-vente ?"
proximite = index @ encodeur.encode([question], normalize_embeddings=True)[0]
passages = avis.iloc[proximite.argsort()[::-1][:8]]
contexte = "\n".join("[avis " + str(i) + "] " + t for i, t in zip(passages["id_avis"], passages["texte"]))
print(contexte)

# 3. Génération : le LLM répond à partir des seuls passages (petit modèle public)
llm = pipeline("text-generation", model="Qwen/Qwen2.5-1.5B-Instruct")
messages = [{"role": "system", "content": "Répondez uniquement à partir des avis fournis et citez leurs numéros. Si l'information manque, dites-le."},
            {"role": "user", "content": "Avis :\n" + contexte + "\n\nQuestion : " + question}]
reponse = llm(messages, max_new_tokens=200, do_sample=False)
print(reponse[0]["generated_text"][-1]["content"])

Le RAG se pratique en Python (sentence-transformers, transformers, LangChain ou LlamaIndex) : en R, le package ragnar existe mais reste peu répandu.

QUESTIONS FRÉQUENTES

RAG ou fine-tuning : que choisir ?

Le RAG apporte des connaissances : vos documents, à jour, avec leurs sources. Le fine-tuning modifie le comportement : un style, un format, une tâche répétitive. Pour faire répondre un modèle sur une documentation interne, on commence presque toujours par un RAG.

Le RAG supprime-t-il les hallucinations ?

Il les réduit sans les supprimer. Le modèle peut mal lire un passage, mélanger deux sources ou compléter de lui-même. Exiger des citations et contrôler la fidélité sur un échantillon reste nécessaire.

Faut-il une base de données vectorielle pour faire du RAG ?

Pas au début. Quelques dizaines de milliers de passages tiennent dans une matrice en mémoire, comme dans le code. Une base vectorielle (pgvector, Qdrant, Elasticsearch…) devient utile avec des millions de passages, des mises à jour fréquentes ou des filtres par droits d'accès.

LES ALGOS VOISINS

à comparer avant de choisir
la brique de recherche

Embeddings

Transforment question et passages en vecteurs comparables par le sens.

Voir la fiche →
l'alternative souvent confondue

Fine-tuning et LoRA

Change le comportement du modèle, pas ses connaissances. On l'envisage après le RAG, pas avant.

Voir la fiche →
l'étape suivante

Agents LLM

Le LLM décide lui-même quand chercher, dans quelle source, et peut enchaîner plusieurs recherches.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →