Skip to content
Learning Lab · 10 min read

Arrêtez les hallucinations : comment le RAG ancre réellement les LLM

Votre LLM vient de citer avec assurance un article de recherche qui n'existe pas. Cela se produit car les modèles génèrent du texte basé sur des modèles dans les données d'entraînement, et non en interrogeant vos informations réelles. La Génération Augmentée par Récupération (RAG) règle ce problème en donnant aux modèles accès à des données réelles avant qu'ils ne génèrent une réponse.

RAG Guide: Ground LLMs With Your Data

Votre
LLM
vient
de citer
avec
assurance
un
article
de
recherche
qui
n’existe
pas.
Vous
l’avez\interrogé
sur
la
documentation
API
de
votre
entreprise,
et
il
a
décrit
des
points
d’accès
qui
ont
été
supprimés
en
2019.
Cela
se
produit
car
les
modèles
de
langage
génèrent
du
texte
basé
sur
les
modèles
des
données
d’entraînement,
et
non
en
interrogeant
vos
informations
réelles.

La
Génération
Augmentée
par
Récupération
(RAG)
règle
ce
problème.
Pas
en
rendant
les
modèles
plus
intelligents,
mais
en
leur
donnant
accès
à
des
données
réelles
avant
qu’ils
ne
génèrent
une
réponse.
Cette
technique
est
devenue
essentielle
pour
les
systèmes
de
production,
mais
la
plupart
des
implémentations
échouent
silencieusement

soit
en
retournant
des
documents
irrelevant,
soit
en\améliorant
la
récupération
au
point
que
le
modèle
est\confus
par
un
contexte
trop
important.

Ce
guide
explique
comment
le
RAG
fonctionne
réellement,
pourquoi
les
configurations
de
base
échouent,
et
les
modèles
spécifiques
qui
fonctionnent
en
production.

Ce
que
le
RAG
fait
réellement

Le
RAG
comprend
trois
étapes :

  1. Récupérer\xa0:
    Recherchez
    dans
    votre
    base
    de
    données
    de
    documents
    du
    contenu
    pertinent
    pour
    la
    question
    de
    l’utilisateur
  2. Augmenter\xa0:
    Injectez
    les
    documents
    récupérés
    dans
    le
    prompt
    avec
    la
    question
    originale
  3. Générer\xa0:
    Le
    LLM
    répond
    en
    utilisant
    à
    la
    fois
    la
    question
    et
    le
    contexte
    récupéré

L’idée
critique\xa0: le
modèle
ne
hallucine
jamais
à
propos
de
vos
données
car
il
lit
vos
données
réelles
pendant
la
génération
de
la
réponse.
Il
a
l’information
sous
les\//yeux.

Mais
c’est
icy
que
les
implémentations
divergent.
Un
système
RAG
naïf
récupère
tous
les
documents
vaguement
pertinents,
inonde
la
fenêtre
de
contexte,
et
le
modèle
se
perd
dans
le
bruit.
Un
système
RAG
bien
calibré
récupère
exactement
ce
qui
compte,
le
classe
par
pertinence,
et
le
modèle
reçoit
des\//instructions
claires.

Pourquoi
le
RAG
de
base
échoue\xa0:
Les
trois
ruptures
communes

Avant
de
réparer
quoi
que
ce
soit,
comprenez

ça
casse.

Rupture\xa01\xa0: La
récupération
renvoie
du
bruit.

Vous
interrogez
votre
base
de
données
de
documents
en
utilisant
une
recherche
par
mots-clés
de
base
ou
des
embeddings
simples,
et
vous
obtenez
10
résultats

seuls
2
sont
pertinents.
Le
LLM
voit
le
bruit
et
est
soit
confus,
soit
ignore
complètement
les
bonnes
informations.
C’est
le
mode
d’échec
le
plus
courant.

Rupture\xa02\xa0: Les
documents
récupérés
sont
trop
longs.

Même
si
la
récupération
fonctionne,
vous
récupérez
des
documents
complets
(800+
tokens
chacun).
Votre
fenêtre
de
contexte
de
4K
est
épuisée.
Claude
ou
GPT-4o
gaspille
des
tokens
à\//analyser
des
sections
irrelevant
et
n’a
plus
de
place
pour
la
nuance
dans
la
réponse.

Rupture\xa03\xa0: Le
décalage
entre
la
récupération
et
la
génération.

Votre
système
de
récupération
trouve
des
documents
optimisés
pour
un
type
de
requête
(recherche
factuelle),
mais
l’étape
de
génération
a
besoin
de
documents
structurés
différemment
(pour
le
raisonnement,
pour
des
exemples,
pour
des
cas
limites).
Vous
résolvez
deux
problèmes
différents
avec
un
seul
récupérateur.

Construire
un
Pipeline
RAG
de
Production\xa0:
Étape
par
Étape

Un
système
RAG
fonctionnel
nécessite
quatre
composants\xa0:
une
base
de
données
de
documents,
un
récupérateur,
un
classeur,
et
une
structure
de
prompt.
Construisons-en
un.

Étape\xa01\xa0: Ingestion
et
Découpage
des
Documents

Les
documents
bruts
sont
trop
grands
pour
être
récupérés
efficacement.
Vous
devez
les
diviser
en\morceaux

typiquement
300-500
tokens
chacun,
avec
10-20%
de
surchevauchement
entre
les
morceaux.

#
Exemple\xa0:
découpage
d'un
document
pour
RAG
documents
=
load_documents("company_docs/")

chunks
=
[]
for
doc
in
documents:



text
=
doc.content


#
Approche
naïve\xa0:
couper
tous
les
300
tokens


for
i
in
range(0,
len(text),
300):



chunk
=
text[i:i+400]


chunks.append({


"id":
f"{doc.name}_chunk_{len(chunks)}",


"content":
chunk,


"source":
doc.name,


"metadata":
doc.metadata


})

#
Meilleure
approche\xa0:
couper
aux
limites
sémantiques
de
langchain.text_splitter
import
RecursiveCharacterTextSplitter
splitter
=
RecursiveCharacterTextSplitter(


chunk_size=400,


chunk_overlap=50,


separators=[\"


\",
\"


\",
\"


\",
\"


\"]
)
chunks
=
[]
for
doc
in
documents:


splits
=
splitter.split_text(doc.content)


for
split
in
splits:


chunks.append({


"id":
f"{doc.name}_chunk_{len(chunks)}",


"content":
split,


"source":
doc.name


})

La
clé
icy\xa0:\ ne
coupez
pas
au
hasard.
Utilisez
RecursiveCharacterTextSplitter
pour
couper
d’abord
aux
limites
de
paragraphe,
puis
de
sentence,
puis
de
mot.
Cela
garde
intactes
les
unités
sémantiques.

Étape\xa02\xa0: Intégration
et
Stockage

Convertissez
chaque
morceau
en
un
vecteur
d’embedding.
C’est
ce
qui
rend
la
recherche
sémantique
possible\xa0—
les
significations
similaires
produisent
des
vecteurs
similaires,
indépendamment
des
correspondances
de
mots
exactes.

#
Embedding
des
morceaux
et
leur
stockage
de
openai
import
OpenAI
de
pinecone
import
Pinecone

client
=
OpenAI()
pc
=
Pinecone(api_key="your-key")
index
=
pc.Index("rag-index")

#
Intégrer
chaque
morceau
embedded_chunks
=
[]
for
chunk
in
chunks:


response
=
client.embeddings.create(


input=chunk["content"],


model="text-embedding-3-small"

)


embedding
=
response.data[0].embedding


embedded_chunks.append({


"id":
chunk["id"],


"values":
embedding,


"metadata":
{


"text":
chunk["content"],


"source":
chunk["source"]


}

})

#
Upsert
dans
la
base
de
données
vectorielle
index.upsert(vectors=embedded_chunks)

Utilisez
text-embedding-3-small
(ou
similar,
comme
Mistral
Embed)\xa0: il
est
moins
cher
que
les
grands
modèles,
assez
rapide
pour
la
récupération
en
temps
réel,
et
assez
puissant
pour
la
recherche
sémantique.
Pour
la
plupart
des
cas
d’utilisation
en
production,
vous
n’avez
pas
besoin
d’embeddings
grands.

Étape\xa03\xa0: Récupération
avec
Classement

C’est
icy
que
la
plupart
des
systèmes
se
trompent.
La
récupération
trouve
des
candidats\xa0;
le
classement
les
ordonne
par
pertinence.
Vous
avez
besoin
des
deux.

#
Pipeline
de
récupération
+
classement
def
retrieve_and_rank(query,


top_k=10,


final_k=3):


#
Étape\xa01\xa0:
Recherche
vectorielle
(axée
sur
le
rappel)


query_embedding
=
client.embeddings.create(


input=query,


model="text-embedding-3-small"

).data[0].embedding



candidates
=
index.query(


vector=query_embedding,


top_k=top_k,


include_metadata=True

)



#
Étape\xa02\xa0:
Re-classement
(axé
sur
la
précision)

#
Utilisez
un
petit
modèle
de
classement
ou
un
LLM
pour
re-noter

documents
=
[


{


"id":
match["id"],


"text":
match["metadata"]["text"],


"source":
match["metadata"]["source"]


}

for
match
in
candidates["matches"]

]


#
Noter
chaque
candidat
par
rapport
à
la
requête

scores
=
[]

for
doc
in
documents:


#
Utilisez
Claude
pour
vérifier
la
pertinence

response
=
client.client.messages.create(


model="claude-3-5-sonnet-20241022",


max_tokens=10,


system="Notez
la
pertinence
de
ce
document
par
rapport
à
la
requête
(1-10,
chiffre
uniquement).",


messages=[


{


"role":
"user",


"content":
f"Requête\xa0:
{query}

Document\xa0:
{doc['text']}"


}

]

)


score
=
int(response.content[0].text)


scores.append((doc,
score))



#
Retourner
les
documents
les
mieux
classés

ranked
=
sorted(scores,
key=lambda
x:
x[1],
reverse=True)


return
[doc
for
doc,
score
in
ranked[:final_k]]

Cette
approche
en
deux
étapes
fonctionne
car
la
recherche
vectorielle
est
rapide
mais
imparfaite.
Une
deuxième
étape
de
classement

même
simple

améliore
dramatiquement
ce
qui
arrive
réellement
au
LLM.
En
production
chez
AlgoVesta,
ajouter
un
re-classement
a
réduit
notre
récupération
irrelevant
de
~60%.

Étape\xa04\xa0: Construction
du
Prompt

Maintenant
que
vous
avez
des
documents
pertinents,
comment
les
injecter
dans
le
prompt\xa0?
Le
contexte
compte\énormément.

#
Mauvais
prompt\xa0:
trop
vague
sur
le
contexte
bad_prompt
=
f"""
Répondez
à
cette
question\xa0:
{user_question}

Voici
un
peu
de
contexte\xa0:
{retrieved_documents}
"""

#
Meilleur
prompt\xa0:
instructions
explicites
pour
l'utilisation
du
contexte
better_prompt
=
f"""
Vous
avez
accès
aux
documents
suivants\xa0:

---
{retrieved_documents}
---

Répondez
à
la
question
de
l'utilisateur
en
utilisant
UNIQUEMENT
les
informations
des
documents
ci-dessus.
Si
les
documents
ne
contiennent
pas
suffisamment
d'informations
pour
répondre,
indiquez-le
explicitement.
Citez
toujours
le
document
source
lorsque
vous
utilisez
des
informations
provenant
de
celui-ci.

Question\xa0:
{user_question}
"""

L’amélioration\xa0:\ instruction
explicite
sur
ce
qu’il
faut
faire
avec
le
contexte.
Dites
au
modèle
d’utiliser
uniquement
les
documents
fournis,
de
dire
lorsque
l’information
est
manquante,
et
de
citer
les
sources.
Sans
ces
instructions,
les
modèles
reviendront
parfois
aux
données
d’entraînement
lorsque
les
documents
sont
ambigus.

Modèles
RAG
communs
et
quand
ils
fonctionnent

Trois
modèles
dominent
les
systèmes
RAG
de
production.
Chacun
résout
des
problèmes
différents.

Modèle\xa01\xa0: Génération
Augmentée
par
Récupération
(RAG
Standard)

Comment
ça
marche\xa0:

Récupérez
les
documents,
ajoutez-les
au
prompt,
générez
la
réponse
en
un
seul
passage.

Quand
ça
marche\xa0:

Recherche
factuelle,
Questions/Réponses
sur
la
documentation,
questions/réponses
simples.
Le
temps
de
réponse
est
important.
Vous
avez
besoin
d’une
réponse
cohérente
unique.

Latence\xa0:
~500ms-1s
(embedding
+
récupération
+
appel
LLM)

Exemple
cas
d’utilisation\xa0:

Extrait\xa0: RAG ancre les LLM avec vos données réelles, éliminant les hallucinations. Ce guide explique comment le RAG fonctionne en production, pourquoi les configurations de base échouent et les modèles spécifiques qui fonctionnent — avec des exemples de code et des compromis. Points clés\xa0: [« Le RAG comporte trois étapes\xa0: récupérer les documents pertinents, les injecter dans le prompt, générer la réponse. Le modèle ne peut pas halluciner sur vos données s’il les lit. », « La plupart des échecs du RAG proviennent d’une mauvaise récupération (renvoi de bruit), de documents trop longs (perte de contexte) ou d’un décalage récupération-génération. Une récupération en deux étapes avec re-classement résout ce problème. », « La recherche vectorielle seule ne suffit pas. La récupération hybride (vectorielle + mots-clés) capte la dérive sémantique et les différences de vocabulaire. Utilisez Pinecone ou Weaviate, pas la complexité auto-hébergée. », « Découpez les documents aux limites sémantiques (paragraphes d’abord), pas au hasard. Des morceaux de 300 à 500 tokens avec 10% de chevauchement conviennent à la plupart des cas. Ajustez en fonction de vos modèles de requête. », « Choisissez votre LLM pour la taille de la fenêtre de contexte RAG et le suivi des instructions. Claude Sonnet 4 est le défaut de production\xa0: rapide, bon marché, gère 200K de contexte. GPT-4o pour un raisonnement plus difficile. », « Évaluez le RAG avec la précision de récupération, l’exactitude de la réponse et les métriques de latence. Commencez avec le RAG standard\xa0; ajoutez l’expansion de requête ou les approches basées sur des graphes uniquement lorsque le RAG simple atteint ses limites. »]

« 

Batikan
· 10 min read
Topics & Keywords
Learning Lab quot les quot quot xa0 des documents rag les documents
Share

Stay ahead of the AI curve

Weekly digest of the most impactful AI breakthroughs, tools, and strategies.

Related Articles

Où vont vos prompts : Gestion des données dans ChatGPT, Claude et Gemini
Learning Lab

Où vont vos prompts : Gestion des données dans ChatGPT, Claude et Gemini

ChatGPT stocke vos données et les utilise pour l'entraînement par défaut. Claude n'entraîne pas sur les conversations web sauf si vous optez pour cela. Gemini lie vos chats à l'ensemble de votre compte Google. Voici ce que chaque modèle fait de vos prompts et comment protéger les informations sensibles.

· 6 min read
Créez une bibliothèque de templates de prompts au lieu de tout réécrire
Learning Lab

Créez une bibliothèque de templates de prompts au lieu de tout réécrire

Réécrire un modèle de prompt à plusieurs reprises fait perdre du temps et crée une dette de maintenance. Apprenez à construire une bibliothèque réutilisable de templates de prompts, à la versionner correctement et à éviter la prolifération — avec des exemples concrets que vous pouvez utiliser dès aujourd'hui.

· 5 min read
Outils IA pour les petites entreprises : Automatisez sans embaucher
Learning Lab

Outils IA pour les petites entreprises : Automatisez sans embaucher

Trois propriétaires de petites entreprises peuvent embaucher un développeur pour scaler—ou utiliser des outils d'IA pour compresser la charge de travail de tâches spécifiques et répétitives en quelques minutes. Voici exactement quels outils résolvent quels problèmes, avec des exemples concrets.

· 2 min read
LLM Locaux vs API Cloud : Coût réel, vitesse et confidentialité
Learning Lab

LLM Locaux vs API Cloud : Coût réel, vitesse et confidentialité

LLM locaux vs API cloud n'est pas un choix binaire. Ce guide détaille les coûts réels, les benchmarks de latence, les compromis de précision et une architecture hybride testée en production qui utilise les deux. Comprend du code d'implémentation et une matrice de décision basée sur vos contraintes réelles.

· 12 min read
Créez des projets GPT et Claude personnalisés sans code
Learning Lab

Créez des projets GPT et Claude personnalisés sans code

Apprenez à créer un GPT ou un Projet Claude personnalisé sans écrire de code. Configuration étape par étape, exemples concrets et conseils honnêtes sur l'efficacité de ces outils.

· 3 min read
La Tokenisation Expliquée : Pourquoi les Limites Comptent et Comment les Respecter
Learning Lab

La Tokenisation Expliquée : Pourquoi les Limites Comptent et Comment les Respecter

Les tokens ne sont pas des mots, et les mal comprendre coûte cher et nuit à la fiabilité. Découvrez ce que sont réellement les tokens, pourquoi les fenêtres de contexte sont importantes, comment mesurer l'utilisation réelle et quatre techniques structurelles pour rester sous les limites sans sacrifier les fonctionnalités.

· 6 min read

More from Prompt & Learn

Les lancements sur l’App Store explosent en 2026, l’IA en est le catalyseur
AI News

Les lancements sur l’App Store explosent en 2026, l’IA en est le catalyseur

Appfigures rapporte une augmentation mesurable des lancements d'applications en 2026, grâce aux outils de développement IA qui réduisent les délais de plusieurs semaines à quelques jours. Un développeur solo avec Claude ou Mistral peut désormais livrer ce qui nécessitait une équipe d'ingénieurs complète en 2022.

· 4 min read
Julius AI vs ChatGPT vs Claude pour l’analyse de données
AI Tools Directory

Julius AI vs ChatGPT vs Claude pour l’analyse de données

Julius AI, ChatGPT Advanced Data Analysis et Claude Artifacts gèrent tous des tâches de données, mais la vitesse d'exécution, les prix et le flux de travail diffèrent considérablement. Voici comment choisir le bon pour votre cas d'utilisation.

· 6 min read
Perplexity vs Google AI vs Consensus : Lequel choisir pour la recherche académique ?
AI Tools Directory

Perplexity vs Google AI vs Consensus : Lequel choisir pour la recherche académique ?

Perplexity, Google AI et Consensus excellent chacun dans différentes tâches de recherche. Perplexity l'emporte sur les sujets récents avec une synthèse en temps réel. Consensus offre une précision de citation inégalée pour les travaux évalués par des pairs. Google Scholar fournit une profondeur historique. Cette analyse montre exactement quel outil utiliser pour votre prochain document – et pourquoi.

· 8 min read
Les outils de voyage de Google divisent par deux le temps de planification. Voici ce qui fonctionne vraiment
AI Tools Directory

Les outils de voyage de Google divisent par deux le temps de planification. Voici ce qui fonctionne vraiment

Google a lancé sept outils de voyage intégrés ce printemps. Le suivi des prix prédit les fenêtres de réservation optimales, la disponibilité des restaurants récupère des données en temps réel et les cartes hors ligne fonctionnent sans couverture cellulaire. Voici quelles fonctionnalités inspirent confiance et où fixer vos attentes.

· 5 min read
DeepL vs ChatGPT vs Outils de Traduction Spécialisés : Comparaison Réelle
AI Tools Directory

DeepL vs ChatGPT vs Outils de Traduction Spécialisés : Comparaison Réelle

Google Traduction convient aux menus, pas au travail client. DeepL le surpasse en qualité, ChatGPT gaspille des tokens, et des outils professionnels comme Smartcat résolvent les problèmes de flux de travail d'équipe. Voici l'analyse honnête de ce que fait réellement chaque outil et quand l'utiliser.

· 6 min read
Surfer vs Ahrefs AI vs SEMrush : Quel outil classe mieux votre contenu ?
AI Tools Directory

Surfer vs Ahrefs AI vs SEMrush : Quel outil classe mieux votre contenu ?

Trois outils SEO IA prétendent résoudre votre problème de classement : Surfer, Ahrefs AI et SEMrush. Chacun analyse différemment le contenu concurrent, ce qui conduit à des recommandations et des résultats différents. Voici ce qui fonctionne réellement, quand chaque outil échoue et lequel acheter en fonction des contraintes de votre équipe.

· 3 min read

Stay ahead of the AI curve

Weekly digest of the most impactful AI breakthroughs, tools, and strategies. No noise, only signal.

Follow Prompt Builder Prompt Builder