Skip to content
RAG Agentique : Comment les agents IA transforment la génération augmentée par récupération

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éponse

Problè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éponse

L'agent agit comme un orchestrateur intelligent qui peut :

  1. Décomposer des requêtes complexes en sous-questions
  2. Choisir les outils : recherche vectorielle, recherche web, requête SQL, appel API
  3. Évaluer si le contexte récupéré est suffisant
  4. Itérer avec des requêtes affinées jusqu'à être confiant
  5. Synthétiser les informations de plusieurs tours de récupération

Comment fonctionne le RAG Agentique

Architecture centrale

ComposantRAG BasiqueRAG Agentique
Traitement de requêteEmbedding directDécomposition et planification de requête
RécupérationRecherche vectorielle uniqueMultiples outils, récupération itérative
ÉvaluationAucuneAuto-évaluation du contexte récupéré
RaisonnementAppel LLM uniqueRaisonnement multi-étapes avec utilisation d'outils
Récupération d'erreursAucuneRéessai avec requêtes affinées
Sources de donnéesGénéralement une BD vectorielleMultiples sources (BD, web, APIs)

Flux de décision de l'agent

Un système RAG agentique suit typiquement ce schéma de décision :

  1. Analyser la question : Est-elle simple (récupération unique) ou complexe (nécessite décomposition) ?
  2. Planifier la stratégie de récupération : Quelles sources interroger ? Dans quel ordre ?
  3. Exécuter la récupération : Rechercher dans la première source
  4. Évaluer les résultats : Ces chunks contiennent-ils la réponse ?
  5. Décider de l'action suivante : Répondre, affiner la requête ou chercher dans une autre source
  6. 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êteStratégie de récupération
Recherche factuelleRecherche vectorielle unique
ComparaisonRecherches parallèles pour chaque entité
Raisonnement multi-étapesRecherches séquentielles, chacune informée par la précédente
TemporelleFiltrer par date, puis recherche sémantique
AgrégationRequê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 :

OutilQuand l'utiliser
Recherche vectorielleRequê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 SQLDonnées structurées, agrégations
Appel APIDonnées en temps réel (prix, météo)
Exécution de codeCalculs, 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énarioRAG BasiqueRAG Agentique
Q&A simple d'une sourceMeilleur choixSurdimensionné
Raisonnement multi-documentsA du malExcelle
Questions nécessitant des calculsNe peut pas faireUtilise des outils de code
Données dynamiques (APIs, BD)LimitéAdaptation naturelle
Requêtes ambiguësRésultats médiocresPeut clarifier et itérer
Sensibilité aux coûtsMoins cher (1 appel LLM)Plus cher (multiples appels)
Exigences de latencePlus rapidePlus lent (itératif)

Compromis

AvantageInconvénient
Qualité de réponse supérieureLatence plus élevée (multiples appels LLM)
Gère les requêtes complexesCoût plus élevé par requête
Récupération auto-correctivePlus complexe à construire et déboguer
Intégration multi-sourcesL'agent peut rester bloqué en boucle
Meilleur pour les requêtes ambiguësComportement 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é.

📚