Génération à enrichissement contextuel
méthode qui associe recherche d'informations et génération de contenu pour améliorer les réponses de l'intelligence artificielle
From Wikipedia, the free encyclopedia
La génération à enrichissement contextuel ou génération augmentée par récupération (anglais : retrieval-augmented generation) ou RAG est une technique d'optimisation de réponses de modèle de langage en intelligence artificielle générative (IAg). Cette méthode permet notamment d'améliorer la qualité de réponses aux requêtes en permettant aux grands modèles de langage (en anglais : large language models, LLM) d'exploiter des ressources de données supplémentaires sans ré-entraînement[1].
Les cas d'utilisation incluent l'accès via un chatbot aux données internes de l'entreprise ou la diffusion d'informations vérifiées provenant exclusivement de sources fiables et reconnues[2].
Avec la RAG, les LLM ne répondent pas aux requêtes des utilisateurs tant qu'ils n'ont pas consulté un ensemble spécifique de documents. Ces documents complètent les informations provenant des données d'entraînement préexistantes du LLM[3]. Cela permet aux LLM d'utiliser des informations spécifiques à un domaine qui ne sont pas disponibles dans les données d'entraînement[3].
La RAG améliore les grands modèles de langage (LLM) en intégrant la recherche d'informations avant de générer des réponses[4]. Contrairement aux LLM qui s'appuient sur des données d'entraînement statiques, la RAG extrait des textes pertinents à partir de bases de données, de documents téléchargés ou de sources web[5]. Selon Ars Technica, « le RAG est un moyen d'améliorer les performances des LLM, essentiellement en combinant le processus LLM avec une recherche sur le web ou un autre processus de recherche de documents afin d'aider les LLM à s'en tenir aux faits». Cette méthode permet de réduire les hallucinations des l'IA génératives de textes[4], qui ont conduit des chatbots à décrire des politiques inexistantes ou à recommander des affaires juridiques inexistantes à des avocats à la recherche de citations pour étayer leurs arguments[6].
Le RAG réduit également la nécessité de réentraîner les LLM avec de nouvelles données[5], ce qui permet de réaliser des économies de ressources informatiques et financières. Au-delà des gains d'efficacité, le RAG permet également aux LLM d'inclure des sources dans leurs réponses, afin que les utilisateurs puissent vérifier les sources citées. Cela offre une plus grande transparence, car les utilisateurs peuvent recouper les contenus récupérés afin de s'assurer de leur exactitude et de leur pertinence.
Le terme RAG a été introduit pour la première fois dans un article de recherche publié en 2020[4].
Limites du RAG et des LLM
Les LLM peuvent fournir des informations incorrectes. Par exemple, lorsque Google a présenté pour la première fois son chatbot Google Bard (rebaptisé par la suite Gemini), le LLM a fourni des informations incorrectes sur le télescope spatial James Webb. Cette erreur a contribué à une baisse de 100 milliards de dollars de la valeur boursière de l'entreprise[6]. Le RAG est utilisé pour éviter ces erreurs, mais il ne résout pas tous les problèmes. Par exemple, les LLM peuvent générer des informations erronées même lorsqu'ils s'appuient sur des sources factuellement correctes s'ils interprètent mal le contexte. La MIT Technology Review donne l'exemple d'une réponse générée par l'IA affirmant que «les États-Unis ont eu un président musulman, Barack Hussein Obama». Le modèle a extrait cette information d'un ouvrage universitaire intitulé de manière rhétorique «Barack Hussein Obama: le premier président musulman des États-Unis ? ». Le LLM ne «connaissait» ni ne «comprenait» le contexte du titre, générant ainsi une réponse fausse[3].
Les LLM avec RAG sont programmés pour donner la priorité aux nouvelles informations. Cette technique est appelée surcharge d’instruction générative, en anglais prompt stuffing. Sans cette technique, l'entrée du LLM est générée uniquement par l'utilisateur; avec cette technique, un contexte supplémentaire pertinent est ajouté à cette entrée pour guider la réponse du modèle. Cette approche fournit au LLM des informations clés dès le début du prompt, l'encourageant à donner la priorité aux données fournies par rapport aux connaissances acquises lors de la phase d'entraînement[7].
Processus
La génération à enrichissement contextuel (RAG) améliore les grands modèles de langage (LLM) en intégrant un mécanisme de récupération d'informations qui permet aux modèles d'accéder à des données supplémentaires au-delà de leur ensemble d'apprentissage initial et de les utiliser. Ars Technica note que « lorsque de nouvelles informations deviennent disponibles, plutôt que de devoir réentraîner le modèle, il suffit d'augmenter la base de connaissances externes du modèle avec les informations mises à jour »[6]. IBM indique que «dans la phase générative, le LLM s'appuie sur l'invite augmentée et sa représentation interne des données d'entraînement pour synthétiser une réponse adaptée à l'utilisateur»[5].
Étapes clés du RAG

En général, les données à référencer sont converties en embeddings, c’est-à-dire en représentations numériques sous forme de vecteurs dans un espace vectoriel de grande dimension. Le RAG peut s’appliquer à des données non structurées (souvent du texte), semi-structurées ou structurées (par exemple des graphes de connaissances). Ces embeddings sont ensuite stockés dans une base de données vectorielle afin de permettre la recherche/récupération de documents.
À partir d’une requête utilisateur, on fait d’abord appel à un moteur de récupération (retriever) pour sélectionner les documents les plus pertinents qui serviront à enrichir la requête[3],[4]. Cette comparaison peut se faire par différentes méthodes, qui dépendent en partie du type d’indexation utilisé[5].
Le système injecte ensuite ces informations pertinentes récupérées dans le LLM via une construction du prompt à partir de la requête originale de l’utilisateur et du prompt système spécifique associé au RAG. Les implémentations plus récentes (à partir de 2023) peuvent aussi intégrer des modules d’augmentation spécifiques, capables par exemple d’étendre une requête à plusieurs domaines, ou d’utiliser la mémoire et l’auto-amélioration pour apprendre des récupérations précédentes.
Enfin, le LLM peut générer une réponse en se basant à la fois sur la requête et sur les documents récupérés[3],[8]. Certains modèles ajoutent des étapes supplémentaires pour améliorer le résultat, comme le reclassement des informations récupérées, la sélection du contexte, et le réglage fin (fine-tuning).
Améliorations
On peut améliorer le processus de base du RAG à différentes étapes du flux.
Encodage (embeddings / vecteurs)
Ces méthodes portent sur la façon de transformer le texte en vecteurs ou matrice, soit dense, soit creuse. Les matrices creuses représentent surtout les mots eux-mêmes (l’identité des mots). Elles sont souvent de grande taille (taille proche d’un dictionnaire) et contiennent beaucoup de zéros. Les vecteurs denses représentent plutôt le sens. Ils sont plus compacts et contiennent **moins de zéros. Différentes améliorations peuvent aider à mieux calculer les similarités dans les bases vectorielles[9].
- Les performances s’améliorent en optimisant le calcul des similarités entre vecteurs[10].
- La précision peut augmenter avec des interactions tardives: le système compare les mots de manière plus fine après la première récupération. Ça aide à mieux classer les documents et à rendre la recherche plus pertinente[11].
- On peut utiliser des approches hybrides qui combinent les différents types de vecteurs, en profitant du fait que les calculs sur des matrices creuses sont souvent plus efficaces que des opérations sur des vecteurs denses.
- D’autres techniques visent surtout à mieux choisir les documents récupérés pour améliorer la précision de recherche[12].
Méthodes centrées sur le moteur de récupération (retriever)
Ces méthodes cherchent à améliorer la qualité de la récupération de documents dans des bases de données vectorielles:
- Pré-entraîner le moteur de récupération avec l’Inverse Cloze Task (ICT): une technique qui aide le modèle à apprendre à retrouver les bons passages en lui demandant de prédire un texte masqué à l’intérieur de documents[13].
- Optimisation supervisée du moteur de récupération: l’objectif est d’aligner ce que le retriever a tendance à récupérer avec ce qui aide vraiment le modèle génératif à produire une bonne réponse[14].
- Techniques de reclassement (reranking): elles améliorent les résultats en reclassant les documents récupérés pour mettre en tête les plus pertinents, notamment pendant l’entraînement, afin de renforcer les performances du moteur de récupération[15].
Modèle de langage
En repensant le modèle de langage en tenant compte dès le départ du moteur de récupération, un modèle 25 fois plus petit peut obtenir un niveau de performance comparable à celui de modèles beaucoup plus grands[16]. Comme ce modèle est entraîné à partir de zéro, cette approche (appelée Retro) entraîne un coût d’entraînement élevé, contrairement au schéma RAG initial qui évite justement ces entraînements lourds. L’idée est que, si on apporte des connaissances de domaine pendant l’entraînement, Retro a moins besoin de “mémoriser” le domaine dans ses paramètres: il peut utiliser ses poids (sa capacité) plus efficacement et se concentrer davantage sur la compréhension du langage.
Des ajustements ont été faits pour rendre cette approche reproductible. La version la plus reproductible s’appelle Retro++ et inclut du RAG directement via le contexte fourni dans le prompt[17].
Découpage en segments (chunking)
Le découpage en segments consiste à découper les données en petits segments courts (chunks), qui seront ensuite transformés en vecteurs (embeddings). Ainsi, le moteur de récupération peut retrouver plus facilement les passages pertinents.

Voici trois stratégies de chunking courantes :
- Taille fixe avec chevauchement. On découpe en segments d’une longueur identique. C’est simple et rapide. Le chevauchement entre deux segments successifs aide à garder le contexte (le sens) d’un segment à l’autre[18].
- Découpage basé sur la syntaxe (phrases). On découpe le document par phrases (ou parfois par paragraphes)[19].
- Découpage basé sur le format de fichier. Certains formats ont des “découpages naturels”, et il vaut mieux les respecter. Pour du code, on découpe souvent par fonction ou classe. Pour du HTML, on évite de casser des éléments comme les <table> ou des images encodées en base64 (<img>). Pour des PDF, il faut aussi faire attention à garder une structure cohérente. Des outils comme Unstructured ou LangChain peuvent aider pour cette approche[20].
Recherche hybride
Parfois, une recherche dans une base vectorielle peut passer à côté de faits importants nécessaires pour répondre à la question d’un utilisateur. Pour limiter ce problème, on peut faire en plus une recherche texte classique (par mots-clés), puis ajouter ces résultats aux morceaux de texte (chunks) associés aux documents retrouvés via la recherche vectorielle. Ensuite, on donne l’ensemble de ce texte (vectoriel + mots-clés) au modèle de langage pour qu’il génère la réponse[21].
Évaluation et tests de référence (benchmarks)
Les systèmes RAG sont souvent évalués avec des benchmarks conçus pour mesurer : la capacité à retrouver les bons documents, la précision de cette recherche, et la qualité du texte généré[22],[23]. Parmi les jeux de données souvent utilisés, on trouve BEIR, un ensemble de tâches de recherche d’information dans différents domaines[24].
Défis
Le RAG n’empêche pas les hallucinations des LLM et selon Ars Technica, c'est plus une méthode d'atténuation du problème qu'une résolution de celui-ci[6].
Même si le RAG améliore la précision des LLM, il ne règle pas tout. L'une des limites est que le RAG réduit le besoin de réentraîner le modèle, mais ne le supprime pas complètement. Un LLM peut avoir du mal à reconnaître qu’il n’a pas assez d’informations pour répondre de façon fiable. Sans entraînement spécifique, il peut quand même produire une réponse au lieu de dire qu’il n’est pas sûr. IBM explique que ce problème peut venir du fait que le modèle n’a pas vraiment la capacité d’évaluer les limites de ce qu’il “sait”.
Empoisonnement du RAG
Un système RAG peut récupérer des sources factuellement correctes, mais trompeuses, ce qui entraîne des erreurs d’interprétation. Par exemple, le LLM peut reprendre une phrase d’une source sans tenir compte du contexte, et en tirer une conclusion fausse. De plus, quand plusieurs sources se contredisent, un modèle RAG peut avoir du mal à décider laquelle est la bonne. Dans le pire des cas, le modèle peut mélanger des détails venant de plusieurs sources et produire une réponse qui combine des informations anciennes et récentes de manière trompeuse. Selon la MIT Technology Review, ces problèmes surviennent parce que les systèmes RAG peuvent mal interpréter les données qu'ils récupèrent.
En , Israël aurait payé 6 millions de dollars pour influencer l’opinion publique, en s’appuyant sur ce type de limite[25].