Les attentes vis-à-vis de l’IA générative sont très élevées, notamment en matière de question answering à partir d’une base de connaissances interne via la génération augmentée par la récupération (Retrieval-Augmented Generation ou RAG). Les systèmes de RAG combinent la capacité générative des grands modèles de langage (LLM) avec l’extraction d’informations pertinentes à partir de sources de données internes, permettant au modèle de formuler des réponses sur la base d’un contenu actualisé et contrôlé.
Dans la pratique toutefois, la qualité d’un tel système n’est pas garantie. Lors d’une implémentation antérieure (il y a environ deux ans), les résultats n’étaient pas suffisamment satisfaisants pour déployer l’application en toute confiance. Nous appellerons cette implémentation ci-après “système initial”. Entre-temps, le RAG agentique gagne en popularité. Dans cette approche, l’agent IA raisonne sur la stratégie de recherche à adopter, au lieu d’exécuter une recherche prédéfinie. Cela nous amène à la question principale de cet article de blog : dans quelle mesure les techniques de RAG agentique améliorent-elles la qualité de l’output par rapport à un système de RAG basique?
Use case : les instructions aux employeurs de l’ONSS
En guise de test case, nous avons utilisé les instructions administratives aux employeurs de l’ONSS. Cette base de connaissances comporte plus de 400 pages web contenant des informations souvent complexes et très structurées. Nous avons développé à partir de là un système de questions-réponses qui répond aux questions des utilisateurs sur la base de ces instructions.
Avant de pouvoir procéder à la récupération d’informations (retrieval), il faut préparer les données (ingestion). Nous récupérons toutes les pages web, scindons chaque page en sections en fonction de sa structure, puis les transformons en chunks que nous indexons sous forme de vector embeddings. Deux détails se sont avérés importants à cet égard : les pages sont scindées en chunks sur la base de leur structure, et nous ajoutons à chaque chunk le breadcrumb (le chemin de navigation de la page) en tant que métadonnées. Ce breadcrumb enrichit le contexte tant pour la phase retrieval que pour la phase de génération, ce qui améliore sensiblement la qualité. La phase retrieval elle-même est hybride : la recherche sémantique est combinée à la recherche par mots-clés.

Du RAG basique au RAG agentique
Avec le RAG basique, tout se déroule en ligne droite : la requête de l’utilisateur est transmise au retriever, qui extrait en une seule fois les chunks les plus pertinents de la base de connaissances. Le modèle de langage génère ensuite une réponse en fonction de ce contexte. Le fait qu’il n’y ait qu’une seule phase de récupération (retrieval) signifie qu’il est impossible d’ajuster la récuperation si le résultat n’est pas satisfaisant.

Avec le RAG agentique, un AI agent dispose du retriever comme outil et suit ce qu’on appelle une boucle ReAct : l’agent raisonne sur la requête (reason), effectue une recherche (act), examine les résultats (observe) et décide s’il a besoin de recherches supplémentaires. L’agent détermine donc lui-même sa stratégie de recherche et choisit également les termes de recherche à utiliser. Pour éviter qu’il ne continue à chercher indéfiniment, on prévoit un critère d’arrêt dans le prompt et un nombre maximal d’itérations.

Évaluation avec un expert métier
Afin de comparer objectivement les deux systèmes, nous avons constitué un ensemble de test composé de questions représentatives, chacune accompagnée d’une réponse de référence et d’une URL de référence, validées par un expert métier. La notation s’est également effectuée en collaboration avec cet expert, selon deux critères :
- Exactitude : la réponse est-elle factuellement correcte et complète ? La note est attribuée selon une échelle à trois niveaux : réponse correcte (2), réponse partiellement correcte (1) ou réponse incorrecte (0).
- Utilité : l’utilisateur peut-il exploiter la réponse sans aide supplémentaire ? Une réponse utile est concise, claire et concluante.
Résultats
Par souci d’exhaustivité, nous comparons les systèmes de RAG basique et RAG agentique récemment implémentés avec l’implémentation initiale, ancienne. Celle-ci consiste également en un système de RAG basique, mais se distingue de la nouvelle implémentation par un processus d’ingestion plus rudimentaire (les pages web étaient scindées selon un nombre fixe de caractères et non selon leur structure ; aucun breadcrumb n’était ajouté à titre de métadonnées) et par l’utilisation d’un modèle de langage plus ancien que celui du nouveau système de RAG basique.
Les résultats montrent une nette amélioration par rapport à l’implémentation initiale. Alors que le système initial livrait encore 10 réponses erronées sur 47 questions, le système RAG basique et le système RAG agentique n’ont pas fourni de réponse factuellement erronée. Le système de RAG basique a répondu correctement à 37 questions et partiellement correctement à 10 ; le système de RAG agentique a obtenu des résultats légèrement meilleurs, avec 41 réponses correctes et 6 partiellement correctes.

L’analyse des réponses partiellement correctes révèle que les causes se répartissent en trois catégories. Pour quatre questions, l’information est tout simplement absente du corpus ; aucune technique ne peut y remédier, seule une modification du corpus lui-même serait possible. Pour quatre questions, le système de RAG basique n’a pas réussi à extraire les informations pertinentes. C’est là que l’agent fait la différence. Notons toutefois que des techniques plus simples, telles que le re-ranking et la query decomposition, auraient également permis de résoudre ces problèmes. Enfin, pour deux questions, c’est au niveau de l’étape de génération que le système a échoué, le modèle de langage ayant formulé la réponse d’une manière susceptible de semer la confusion chez l’utilisateur final. Le problème se produisait avec la même fréquence dans les deux systèmes et peut être résolu via le renforcement du prompt.
| Cause des erreurs (en orange ci-dessus) | RAG basique | RAG agentique | Solution |
|---|---|---|---|
| Corpus : info manquante dans le corpus | 4 | 4 | Adapter le corpus |
| Retrieval : infos pertinentes non récupérées | 4 | 0 | Re-ranking + query decomposition |
| Generation : mauvaise interprétation | 2 | 2 | Adapter le prompt |
En termes d’utilité, les deux systèmes ont obtenu des résultats similaires : outre les réponses partiellement correctes, dans chaque cas, quatre réponses se sont révélées inexploitables car elles étaient trop détaillées ou n’apportaient pas de réponse concluante à la question. Ce problème peut également être corrigé via le prompt. Le comportement en cas de refus est également important : lorsqu’il manque des informations pertinentes, les deux systèmes répondent correctement par “Je ne peux pas confirmer cela sur la base des sources fournies” au lieu d’halluciner.
Que pouvons-nous retenir ?
Premier constat important : la qualité de la base de connaissances détermine grandement la qualité du résultat. Le fondement sur lequel tout repose est une base de connaissances bien structurée, comportant des sections lisibles de manière autonome, un contenu factuellement correct, toutes les informations pertinentes, ainsi que des conditions décrites de manière explicite et linéaire.
Par ailleurs, le retrieval joue lui aussi un rôle important dans la qualité du résultat : si le contexte pertinent est fourni au modèle de langage, la réponse est (presque) toujours correcte.
On constate en outre que le système de RAG basique offre déjà un niveau de qualité élevé. Sur notre ensemble de test, représentatif des questions les plus courantes des utilisateurs, l’agent n’apporte que peu de valeur ajoutée. Les erreurs de retrieval que commet encore le système de RAG basique peuvent être corrigées à l’aide de techniques plus simples telles que le re-ranking et la query decomposition, sans la charge supplémentaire liée à un cycle complet de l’agent.
Dans quels cas un agent peut-il alors vraiment faire la différence ? Dans le cas de questions à multiples étapes séquentielles : des questions pour lesquelles la réponse à une première sous-question est nécessaire pour pouvoir poser la sous-question suivante. Notre ensemble de test ne contenait pas de telles questions, mais pour les use cases où ce type de question est fréquent, la stratégie de recherche itérative d’un agent constitue un réel avantage. En revanche, un agent entraîne des coûts plus élevés (davantage d’appels du LLM) et des temps de réponse plus longs.
Conclusion
Une base de connaissances de qualité et une implémentation de RAG basique solide vous permettront déjà d’aller très loin. Investissez donc d’abord dans la base de connaissances elle-même, dans un pipeline d’ingestion solide et dans des techniques de retrieval éprouvées, puis résolvez les problèmes restants à l’aide de moyens simples tels que le re-ranking, la query decomposition ou l’ajustement des prompts. N’utilisez le RAG agentique que lorsque le surcoût et le temps de réponse plus long se justifient par des types de questions qui nécessitent effectivement un raisonnement en plusiers étapes, et uniquement lorsque les techniques plus simples s’avèrent insuffisantes. Comme c’est souvent le cas dans les projets d’IA, la règle suivante s’applique ici aussi : commencez par une implémentation simple, mesurez objectivement, et n’ajoutez de la complexité que si les chiffres l’exigent.