RAG Agentique : Comment les agents IA transforment la génération augmentée par récupération
Updated on
Le RAG standard (Retrieval-Augmented Generation) a une limitation fondamentale : il récupère une fois et génère une fois. Le système interroge une base de données vectorielle, récupère les Top-K chunks, les injecte dans un prompt et espère que la réponse se trouve dans ces chunks. Quand les informations pertinentes sont réparties sur plusieurs documents, nécessitent un raisonnement multi-étapes ou ont besoin d'une clarification avant la récupération, le RAG basique échoue silencieusement -- retournant des réponses qui semblent convaincantes mais construites sur un contexte incomplet.
Le RAG agentique résout ce problème en remplaçant le pipeline statique récupérer-puis-générer par un agent IA autonome capable de planifier, récupérer itérativement, évaluer les résultats et décider quand il a suffisamment d'informations pour répondre. L'agent ne se contente pas de récupérer des documents -- il raisonne sur ce qu'il faut chercher, juge si le contenu récupéré est suffisant et prend des actions supplémentaires quand ce n'est pas le cas.
RAG Basique vs RAG Agentique
Pipeline RAG Basique
Requête utilisateur → Embeder la requête → Recherche vectorielle → Top-K Chunks → LLM → RéponseProblèmes avec cette approche :
- Récupération unique : Si la première recherche manque des documents pertinents, il n'y a pas de récupération
- Pas de raisonnement sur quoi récupérer : La requête est embedée telle quelle, sans décomposition
- Pas d'évaluation : Le système ne peut pas juger si les chunks récupérés répondent réellement à la question
- Pas de récupération multi-étapes : Ne peut pas chaîner les recherches où le premier résultat informe la requête suivante
Pipeline RAG Agentique
Requête utilisateur → Agent planifie → Outil de recherche → Évaluer les résultats →
→ Besoin de plus d'infos ? → Affiner la requête → Rechercher à nouveau →
→ Assez de contexte ? → Synthétiser → RéponseL'agent agit comme un orchestrateur intelligent qui peut :
- Décomposer des requêtes complexes en sous-questions
- Choisir les outils : recherche vectorielle, recherche web, requête SQL, appel API
- Évaluer si le contexte récupéré est suffisant
- Itérer avec des requêtes affinées jusqu'à être confiant
- Synthétiser les informations de plusieurs tours de récupération
Comment fonctionne le RAG Agentique
Architecture centrale
| Composant | RAG Basique | RAG Agentique |
|---|---|---|
| Traitement de requête | Embedding direct | Décomposition et planification de requête |
| Récupération | Recherche vectorielle unique | Multiples outils, récupération itérative |
| Évaluation | Aucune | Auto-évaluation du contexte récupéré |
| Raisonnement | Appel LLM unique | Raisonnement multi-étapes avec utilisation d'outils |
| Récupération d'erreurs | Aucune | Réessai avec requêtes affinées |
| Sources de données | Généralement une BD vectorielle | Multiples sources (BD, web, APIs) |
Flux de décision de l'agent
Un système RAG agentique suit typiquement ce schéma de décision :
- Analyser la question : Est-elle simple (récupération unique) ou complexe (nécessite décomposition) ?
- Planifier la stratégie de récupération : Quelles sources interroger ? Dans quel ordre ?
- Exécuter la récupération : Rechercher dans la première source
- Évaluer les résultats : Ces chunks contiennent-ils la réponse ?
- Décider de l'action suivante : Répondre, affiner la requête ou chercher dans une autre source
- Synthétiser : Combiner les informations de toutes les étapes de récupération
# Boucle conceptuelle de RAG agentique (pseudocode)
def agentic_rag(query, tools, max_iterations=5):
context = []
plan = agent.plan(query) # Décomposer en sous-questions
for step in plan:
# L'agent décide quel outil utiliser
tool = agent.select_tool(step, tools)
results = tool.execute(step.query)
context.extend(results)
# L'agent évalue s'il a assez d'informations
if agent.has_sufficient_context(query, context):
break
# L'agent affine la requête en fonction de ce qu'il a appris
step.query = agent.refine_query(step, results)
return agent.synthesize(query, context)Patterns clés du RAG Agentique
1. Décomposition de requêtes
Diviser les questions complexes en sous-requêtes plus simples :
Originale : "Comparer la croissance du chiffre d'affaires d'Apple et Microsoft au T3 2025
et expliquer quelle entreprise avait de meilleures marges opérationnelles"
Décomposée :
1. "Apple T3 2025 croissance du chiffre d'affaires"
2. "Microsoft T3 2025 croissance du chiffre d'affaires"
3. "Apple T3 2025 marge opérationnelle"
4. "Microsoft T3 2025 marge opérationnelle"Chaque sous-requête récupère des documents ciblés et pertinents au lieu d'espérer qu'une seule recherche large retourne toutes les informations nécessaires.
2. Récupération adaptative
L'agent décide comment récupérer en fonction du type de requête :
| Type de requête | Stratégie de récupération |
|---|---|
| Recherche factuelle | Recherche vectorielle unique |
| Comparaison | Recherches parallèles pour chaque entité |
| Raisonnement multi-étapes | Recherches séquentielles, chacune informée par la précédente |
| Temporelle | Filtrer par date, puis recherche sémantique |
| Agrégation | Requête SQL + recherche de documents |
3. Auto-évaluation
Après chaque étape de récupération, l'agent évalue :
- Pertinence : Les chunks récupérés portent-ils sur le bon sujet ?
- Complétude : Contiennent-ils assez d'informations pour répondre ?
- Cohérence : Les multiples sources concordent-elles ?
- Actualité : Les informations sont-elles assez récentes ?
4. Sélection d'outils
Le RAG agentique ne se limite pas à la recherche vectorielle :
| Outil | Quand l'utiliser |
|---|---|
| Recherche vectorielle | Requêtes de similarité sémantique |
| Recherche par mots-clés (BM25) | Correspondance exacte de termes, requêtes techniques |
| Recherche web | Événements actuels, informations récentes |
| Requête SQL | Données structurées, agrégations |
| Appel API | Données en temps réel (prix, météo) |
| Exécution de code | Calculs, transformations de données |
Approches d'implémentation
Agent LangChain
from langchain.agents import create_react_agent
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
# Créer un outil de récupération
vectorstore = FAISS.from_texts(documents, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
def search_docs(query: str) -> str:
results = retriever.invoke(query)
return "\n".join([doc.page_content for doc in results])
tools = [
Tool(
name="SearchDocuments",
func=search_docs,
description="Search the knowledge base for relevant information"
),
]
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_react_agent(llm, tools, prompt_template)Agent LlamaIndex
from llama_index.core.agent import ReActAgent
from llama_index.core.tools import QueryEngineTool
from llama_index.core import VectorStoreIndex
# Créer des outils de moteur de requête
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(similarity_top_k=5)
tools = [
QueryEngineTool.from_defaults(
query_engine=query_engine,
name="knowledge_base",
description="Search the company knowledge base"
),
]
agent = ReActAgent.from_tools(tools, llm=llm, verbose=True)
response = agent.chat("What were our Q3 results?")Quand utiliser le RAG Agentique
| Scénario | RAG Basique | RAG Agentique |
|---|---|---|
| Q&A simple d'une source | Meilleur choix | Surdimensionné |
| Raisonnement multi-documents | A du mal | Excelle |
| Questions nécessitant des calculs | Ne peut pas faire | Utilise des outils de code |
| Données dynamiques (APIs, BD) | Limité | Adaptation naturelle |
| Requêtes ambiguës | Résultats médiocres | Peut clarifier et itérer |
| Sensibilité aux coûts | Moins cher (1 appel LLM) | Plus cher (multiples appels) |
| Exigences de latence | Plus rapide | Plus lent (itératif) |
Compromis
| Avantage | Inconvénient |
|---|---|
| Qualité de réponse supérieure | Latence plus élevée (multiples appels LLM) |
| Gère les requêtes complexes | Coût plus élevé par requête |
| Récupération auto-corrective | Plus complexe à construire et déboguer |
| Intégration multi-sources | L'agent peut rester bloqué en boucle |
| Meilleur pour les requêtes ambiguës | Comportement plus difficile à prédire |
Construire des pipelines de données pour le RAG Agentique
Mettre en place le pipeline de données pour le RAG agentique -- découper les documents, créer les embeddings, construire les index vectoriels -- est un travail expérimental itératif. RunCell (opens in a new tab) fournit un environnement Jupyter alimenté par l'IA où vous pouvez prototyper des pipelines RAG avec assistance IA, déboguer la qualité de récupération de manière interactive et itérer sur les stratégies de découpage.
Pour visualiser les métriques d'évaluation de récupération (scores de pertinence, distributions de latence, qualité des réponses), PyGWalker (opens in a new tab) vous permet d'explorer vos jeux de données d'évaluation RAG de manière interactive dans Jupyter.
FAQ
Qu'est-ce que le RAG agentique ?
Le RAG agentique combine la Génération Augmentée par Récupération avec des agents IA autonomes. Au lieu d'un pipeline statique récupérer-puis-générer, un agent IA planifie des stratégies de récupération, exécute plusieurs recherches, évalue les résultats et itère jusqu'à avoir suffisamment de contexte pour répondre avec précision.
Comment le RAG agentique diffère-t-il du RAG basique ?
Le RAG basique effectue une seule récupération et génère une réponse. Le RAG agentique utilise un agent IA capable de décomposer les requêtes, sélectionner différents outils (recherche vectorielle, recherche web, SQL), évaluer si le contexte récupéré est suffisant et itérer avec des requêtes affinées. Il gère les questions complexes et multi-étapes que le RAG basique ne peut pas traiter.
Le RAG agentique est-il plus cher que le RAG basique ?
Oui, le RAG agentique coûte typiquement plus par requête car il effectue de multiples appels LLM (planification, évaluation, synthèse) et de multiples opérations de récupération. Le compromis est une qualité de réponse significativement supérieure pour les requêtes complexes. Pour les recherches factuelles simples, le RAG basique est plus rentable.
Quels frameworks supportent le RAG agentique ?
LangChain, LlamaIndex et Haystack supportent tous les patterns de RAG agentique. LangChain fournit des agents ReAct avec utilisation d'outils, LlamaIndex propose des agents de planification de requêtes, et Haystack a des architectures d'agents basées sur des pipelines. Vous pouvez aussi construire des agents personnalisés en utilisant directement les APIs de function-calling d'OpenAI ou Anthropic.
Quand dois-je utiliser le RAG agentique vs le RAG basique ?
Utilisez le RAG basique pour les Q&A factuelles simples à partir d'une seule base de connaissances. Utilisez le RAG agentique quand les requêtes nécessitent un raisonnement sur plusieurs documents, impliquent des comparaisons, ont besoin de données en temps réel, ou quand le RAG basique retourne systématiquement des réponses incomplètes.
Conclusion
Le RAG agentique répond aux limitations fondamentales du RAG basique en remplaçant les pipelines statiques par des agents intelligents qui planifient, récupèrent itérativement et évaluent leurs propres résultats. Il gère les requêtes complexes qui couvrent plusieurs documents, nécessitent du raisonnement ou ont besoin de données de multiples sources. Le compromis est un coût et une latence plus élevés par requête. Pour la plupart des applications, la meilleure approche est de commencer avec le RAG basique pour les requêtes simples et de router les questions complexes vers le RAG agentique -- en utilisant l'agent uniquement quand le système plus simple serait en difficulté.