Le problème : une IA qui invente parce qu'elle ne sait pas
Les grands modèles de langage (LLM) comme GPT-4, Claude ou Mistral ont un défaut de fabrication assez génant : ils ont été entraînés sur une photo figée du monde, à une date donnée. Après ça, plus rien. Ils ne connaissent ni les nouveautés de votre entreprise, ni votre catalogue produit, ni le PDF de 200 pages que votre service juridique vient de pondre.
Résultat : quand vous leur posez une question précise sur un sujet qu'ils ne connaissent pas, ils ne disent pas toujours "je ne sais pas". Ils inventent. C'est ce qu'on appelle une hallucination, et c'est le cauchemar de toute entreprise qui voudrait déployer un chatbot IA fiable.
Deux solutions existent en théorie : réentraîner le modèle (le fameux fine-tuning) ou lui donner un accès direct à la bonne information au moment où il en a besoin. La deuxième option, c'est le RAG, et c'est de très loin la plus pragmatique pour 90% des cas d'usage en entreprise.
Le RAG, c'est quoi concrètement ?
RAG veut dire Retrieval-Augmented Generation, soit "génération augmentée par la récupération d'information". L'idée est simple : au lieu de demander directement au LLM de répondre depuis sa mémoire interne, on lui donne d'abord les documents pertinents, puis on lui demande de répondre en se basant sur ces documents.
C'est un peu comme passer un examen à livre ouvert plutôt que de tout apprendre par cœur. Le modèle reste aussi intelligent, mais il a maintenant une bibliothèque sous la main au lieu de deviner.
Étape 1 : l'indexation (on prépare la bibliothèque)
On découpe vos documents (PDF, pages web, tickets support, wiki interne...) en petits morceaux appelés chunks. Chaque chunk est transformé en un vecteur numérique via un modèle d'embedding, puis stocké dans une base de données vectorielle (Pinecone, Weaviate, Qdrant, ou même PostgreSQL avec pgvector).
from openai import OpenAI
from qdrant_client import QdrantClient
client = OpenAI()
qdrant = QdrantClient(url="http://localhost:6333")
def indexer_document(texte, id):
embedding = client.embeddings.create(
model="text-embedding-3-small",
input=texte
).data[0].embedding
qdrant.upsert(
collection_name="docs_entreprise",
points=[{"id": id, "vector": embedding, "payload": {"texte": texte}}]
)
Étape 2 : la recherche (on retrouve les bons passages)
Quand l'utilisateur pose une question, on transforme aussi sa requête en vecteur, puis on cherche dans la base les chunks les plus proches sémantiquement. On ne cherche pas des mots-clés exacts, mais du sens : une question sur "annuler un abonnement" pourra remonter un document parlant de "résiliation de contrat", même si aucun mot n'est identique.
def rechercher(question, top_k=5):
embedding = client.embeddings.create(
model="text-embedding-3-small",
input=question
).data[0].embedding
resultats = qdrant.search(
collection_name="docs_entreprise",
query_vector=embedding,
limit=top_k
)
return [r.payload["texte"] for r in resultats]
Étape 3 : la génération (le LLM répond avec ses sources)
On injecte les chunks trouvés directement dans le prompt envoyé au LLM, avec une consigne claire : "réponds uniquement à partir de ces documents".
def repondre(question):
contexte = "\n\n".join(rechercher(question))
prompt = f"""Tu es un assistant qui répond UNIQUEMENT à partir du contexte fourni.
Si l'information n'est pas dans le contexte, dis-le clairement.
Contexte :
{contexte}
Question : {question}
"""
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
Et voilà : votre IA répond maintenant avec des infos vérifiables et à jour, au lieu de sortir des affirmations sorties de nulle part.
RAG vs fine-tuning : pourquoi choisir le premier ?
Le fine-tuning consiste à réentraîner le modèle sur vos propres données. Ça marche, mais c'est cher, lent, et il faut tout refaire à chaque mise à jour de vos documents. Le RAG, lui, permet de mettre à jour l'information en temps réel : vous ajoutez un document dans la base vectorielle, et hop, l'IA en tient compte à la prochaine requête, sans réentraînement.
- Coût : le RAG ne nécessite pas de GPU pour réentraîner un modèle, juste une base vectorielle et des appels API.
- Fraîcheur : vos données peuvent être mises à jour en continu, sans latence.
- Traçabilité : vous pouvez citer les sources exactes utilisées pour générer la réponse, ce qui est énorme pour la confiance utilisateur.
- Confidentialité : vos données sensibles ne sont jamais intégrées dans les poids du modèle, elles restent dans votre infrastructure.
Les pièges classiques (et comment les éviter)
Le RAG a l'air simple sur le papier, mais en pratique, plusieurs points font échouer des projets entiers :
- Un mauvais découpage des documents : des chunks trop longs noient l'information pertinente, des chunks trop courts perdent le contexte. Il faut généralement viser entre 300 et 800 tokens par chunk, avec un léger chevauchement.
- Une recherche trop naïve : la recherche vectorielle seule rate parfois des correspondances exactes (un numéro de référence, un nom propre). Combiner recherche vectorielle et recherche par mots-clés (BM25) donne de bien meilleurs résultats — on parle de recherche hybride.
- L'absence de reranking : après la recherche initiale, un modèle de reranking (comme Cohere Rerank) permet de reclasser les résultats par pertinence réelle avant de les envoyer au LLM.
- Oublier les métadonnées : filtrer par date, par type de document ou par langue avant même la recherche sémantique évite énormément de bruit.
Des cas d'usage très concrets
Chez YouOnline, on voit de plus en plus de clients s'intéresser au RAG pour des besoins très terre-à-terre : un chatbot qui répond sur la base de la documentation technique d'un logiciel, un moteur de recherche interne qui interroge des années d'archives, ou un assistant commercial capable de répondre sur un catalogue produit qui évolue chaque semaine.
Dans tous ces cas, la promesse est la même : garder la puissance de raisonnement d'un LLM moderne, tout en l'ancrant fermement dans la réalité de vos données, sans avoir à réentraîner quoi que ce soit.
En résumé
Le RAG, c'est la différence entre un stagiaire brillant qui bluffe quand il ne sait pas, et ce même stagiaire à qui on a donné accès à toute la documentation de l'entreprise avant de répondre. Ce n'est pas magique, ça demande du travail d'ingénierie sur le découpage, la recherche et le reranking, mais c'est aujourd'hui l'approche la plus fiable et la plus économique pour connecter une IA générative à des données réelles et vivantes.
