Aller au contenu
Simon Place
FR EN
Réserver un appel Meet

Module 7 sur 10, leçon 1 sur 5

Le RAG agentique

Savoir ce qu’un agent ajoute à un RAG, et dans quels cas il ne fait qu’alourdir le système.

Un RAG classique suit un trajet fixe. La question est vectorisée, les passages proches sont retrouvés, puis ajoutés au prompt. Le LLM n’est appelé qu’une fois, pour générer la réponse.

Le RAG agentique utilise aussi le modèle pour décider : quelle source interroger, comment reformuler, si le résultat suffit.

La chaîne, du document à la réponse

Toute la chaîne

Un RAG a deux moitiés. La préparation tourne une fois, puis à chaque changement de documents. La réponse tourne à chaque question. Tout ce que l’agent pourra trouver s’est décidé à gauche.

La chaîne complète d’un RAGÀ gauche, la préparation : documents, découpage, embeddings, base vectorielle. À droite, pour chaque question : agent, recherche, reclassement, vérification, réponse. L’agent recommence si le contexte ne suffit pas. Préparer, une foisRépondre, à chaque questionDocumentsPDF, pages, ticketsDécoupagedes passages courtsEmbeddingun passage devient des nombresBase vectoriellevecteurs, texte et droitsQuestionAgentdécide quoi chercherRecherchepar les mots et le sensReclassementgarde les meilleurs passagesAssez pour répondre ?Réponseavec ses sourcesnon : il recommenceLe même modèle d’embeddingtransforme aussi la question.
La plupart des échecs d’un RAG naissent à gauche, bien avant que le modèle écrive un mot.

1. Le découpage

Un modèle ne peut pas relire toute une bibliothèque à chaque question : on coupe donc les documents en passages. Trop long, un passage mélange plusieurs sujets. Trop court, il perd son sens.

Découper un documentÀ gauche, une politique en deux articles. À droite, les trois passages qui en sont tirés. La ligne sur la photo apparaît dans les passages un et deux, et le passage deux reçoit une copie du titre de l’article 12. Le documentArticle 12 : retoursUn colis abîmé est remboursésous 30 jours après réception.Joignez une photo du dommage.Le virement part sous 5 jours.Article 13 : garantieAppareils garantis 2 ans.Les passages Passage 1 Article 12 : retoursUn colis abîmé est remboursésous 30 jours après réception.Joignez une photo du dommage. Passage 2 Article 12 : retoursJoignez une photo du dommage.Le virement part sous 5 jours. Passage 3 Article 13 : garantieAppareils garantis 2 ans.Ligne partagée : rien ne se perdà la coupeTLe passage 2 reprend le titre :il se comprend seul.
Coupez là où le document coupe. Une taille fixe aurait pu séparer « sous 30 jours » de la règle qui lui donne son sens.

2. L’embedding

Un modèle d’embedding transforme chaque passage en vecteur, une liste de nombres qui résume son sens. Deux textes qui disent la même chose obtiennent des vecteurs proches, même avec des mots différents.

Du texte aux vecteursTrois passages traversent un modèle d’embedding et ressortent en listes de nombres. Les deux passages sur le dommage ont des nombres proches, celui sur la garantie des nombres très différents. PassageVecteurModèled’embeddingColis abîmé remboursé[ 0.81, -0.32, … ]Photo du dommage[ 0.74, -0.28, … ]Garantie de deux ans[ -0.15, 0.66, … ]
Le modèle place les phrases selon leur sens, pas leur orthographe. Ces valeurs sont illustratives, et un vrai vecteur compte des centaines ou des milliers de nombres.

3. La base vectorielle

La base garde chaque vecteur avec son texte, sa source et ses droits. Elle répond vite à une seule question : quels passages sont les plus proches de ce vecteur ? Gardez les droits ici, pour filtrer avant de classer.

Un espace vectoriel avec trois zones de passages : retours et remboursements, livraison, garantie. Une flèche part de la question sur la garantie en cas de panne et mène à la zone Garantie, vers le passage Panne d’appareil.
Ce que la base renvoie pour cette question Ce que la base renvoie, du plus proche au plus loin 1 Panne d’appareil 0,912 Garantie de deux ans 0,863 Suivi du colis 0,274 Virement sous 5 jours 0,14
La question devient elle aussi un vecteur et tombe dans la zone Garantie : les passages proches reviennent, les autres restent loin. Cette carte en 2D est un croquis d’un espace qui a bien plus de dimensions. Les scores sont illustratifs, et la proximité se mesure en général par similarité cosinus.

4. Les types de recherche

Une base vectorielle répond à un seul genre de question. D’autres demandent les mots exacts, une requête en base, un graphe de relations ou une lecture directe des fichiers. Pour un agent, chacune est un outil à part : c’est pour cela que le choix de la source compte.

Quelle recherche pour quelle questionSept questions, chacune associée à un type de recherche et à sa limite : mots, sens, hybride, structurée, graphe, fichiers et web. Sur vos propres données, le filtre par métadonnées et par droits passe en premier. La questionLa recherche, et sa limite« Erreur ERR-4512 »Mots (BM25)rate les synonymes« Mon colis est en miettes »Sens (vecteurs)rate les codes exacts« Retour après ERR-4512 ? »Hybridelance deux recherches« Commandes de mars > 100 € »Structurée (SQL)ne lit pas le texte libre« Qui fournit ce produit ? »Graphecoûteux à construire et à tenir« Où est défini refund_limit ? »Fichiers (grep)lent sur de gros volumes« Tarif du transporteur ce jour »Webcontenu non fiableFiltrer d’abord sur les métadonnées et les droitsdate, langue, équipe : il réduit toute recherche sur vos propres données
En cyan, on cherche dans des documents, en violet dans des données structurées, en vert on va directement à la source. Choisissez d’après la question, pas d’après l’outil que vous avez déjà.

5. Combiner les recherches et reclasser

La recherche hybride est le choix habituel sur des documents. Lancez les deux recherches, fusionnez leurs classements, puis laissez un modèle plus lent relire seulement les meilleurs candidats.

De deux recherches à quelques passagesUn classement par mots et un classement par vecteurs sont fusionnés par rang, puis un reclasseur relit les meilleurs candidats, et seuls les premiers passages entrent dans le prompt. Mots (BM25)1 faq-livraison2 article-123 guide-retoursSens (vecteurs)1 garantie2 article-123 guide-retoursFusion des rangs (RRF)1 article-12 2 guide-retours 3 faq-livraisonReclassementun modèle plus lent relit la question avec chaque candidatLe promptquelques passages, chacun avec sa source
Chaque recherche met un autre document en tête. L’article 12 gagne parce que les deux l’ont trouvé, et BM25 attrape les codes exacts que les vecteurs ratent.

6. L’agent

Jusqu’ici, le trajet ne change jamais. L’agent fait de la recherche un outil qu’il peut utiliser, ignorer ou relancer. C’est la seule différence entre un RAG classique et un RAG agentique.

Ce que l’agent ajouteL’agent choisit une source, lit les résultats et décide. S’ils suffisent, il répond avec ses sources. Sinon, il reformule un nombre limité de fois, puis dit qu’il ne sait pas. Colis abîmé il y a 20 jours ?Agentquelle source ?PolitiquechoisieCommandesinutileWebhors périmètreAssez pour répondre ?l’agent juge le résultatnon : reformuleressais plafonnésouiplafond atteintRéponse avec sources« Oui, sous 30 jours. Article 12 »« Je ne trouve pas »mieux qu’une invention assurée
Sans agent, le trajet est fixe. Avec un agent, chaque décision ajoute un appel au modèle : plafonnez les essais.

Quatre rôles fréquents

Ce qui compte le plus

Le compromis

Chaque décision du modèle ajoute un appel, donc du coût et de la latence. Pour une question simple sur une seule base, le RAG classique reste plus rapide et moins cher. Et aucun des deux ne supprime totalement les hallucinations.

Réparez la récupération avant d’ajouter un agent.

Exemple : Fusionner deux classements

La recherche par mots trouve le numéro d’article exact, la recherche vectorielle trouve le sens. La fusion par rang les réunit avec les seuls rangs : les deux types de score n’ont jamais à être comparés.

function fuse(rankings, k = 60) {
  const scores = new Map();
  for (const ranking of rankings) {
    ranking.forEach((id, rank) => {
      scores.set(id, (scores.get(id) ?? 0) + 1 / (k + rank + 1));
    });
  }
  return [...scores].sort((a, b) => b[1] - a[1]).map(([id]) => id);
}

const keywords = ['refund-art-12', 'shipping-faq', 'returns-guide'];
const vectors = ['returns-guide', 'refund-art-12', 'warranty'];

fuse([keywords, vectors]);

['refund-art-12', 'returns-guide', 'shipping-faq', 'warranty']

L’article 12 passe en tête parce que les deux recherches le classent bien, sans que l’une ou l’autre en soit sûre seule.

Essayez dans l’éditeur

function rrf(rankings, { k = 60, limit = 10 } = {}) {  // TODO  return [];}module.exports = { rrf };
Donner une compétence à l’agentFusionner des classements avec RRF
Ouvrir dans l’éditeur

Mentions légales et confidentialité