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.
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.
Les documents sont découpés en passages de quelques phrases. Chaque passage est transformé en vecteur (embedding) et stocké.
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.
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.
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 ? »
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.
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.
La qualité d'un RAG se joue surtout avant le LLM. Noms donnés pour le code de la fiche.
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.
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.
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.
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.
# 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.
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.
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.
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.
Transforment question et passages en vecteurs comparables par le sens.
Voir la fiche → l'alternative souvent confondueChange le comportement du modèle, pas ses connaissances. On l'envisage après le RAG, pas avant.
Voir la fiche → l'étape suivanteLe LLM décide lui-même quand chercher, dans quelle source, et peut enchaîner plusieurs recherches.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus