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

Module 7 sur 10, leçon 2 sur 5

Aller plus loin

Le RAG agentique

Le découpage d’abord

Si la réponse est coupée entre deux morceaux, aucune recherche ne la retrouvera. Commencez par des morceaux qui suivent la structure du document (titres, sections), ajoutez un léger chevauchement, et rattachez le titre et la section à chaque morceau. Les tailles se mesurent sur vos données, elles ne se copient pas.

Deux recherches qui échouent différemment

La recherche vectorielle compare des sens, en général par similarité cosinus. Elle trouve « remboursement » pour « avoir », mais elle est faible sur les chaînes exactes comme ERR-4512. BM25 note les correspondances de termes, en donnant du poids aux termes rares et en corrigeant selon la longueur du document. Il trouve ERR-4512 et rate les synonymes. Combinez-les : chacun couvre les trous de l’autre.

Leurs scores ne sont pas comparables : la Reciprocal Rank Fusion (Cormack et al., 2009) n’utilise donc que les positions.

RRF(d) = Σ 1 / (k + rank_i(d))     k = 60

Un reranker peut ensuite lire la requête avec chaque candidat, grâce à un cross-encoder ou à un modèle. C’est plus lent et plus précis : il ne voit donc que les quelques dizaines de premiers résultats. L’ordre habituel :

const visible = await acl.filter(user);
const a = await bm25(query, visible, 50);
const b = await vectors(query, visible, 50);
const top = rerank(query, rrf([a, b]).slice(0, 30)).slice(0, 5);
if (top[0].score < threshold) return abstain();

La partie agentique

  • Reformuler : transformer « et pour le bleu ? » en requête autonome, ou scinder une question composée.
  • Router : choisir entre la base de règles, les commandes et le web.
  • Juger et réessayer : si les résultats sont faibles, reformuler. Plafonnez les essais.
  • S’abstenir : « je ne trouve pas » vaut mieux qu’une invention assurée. Il faut pour cela un seuil testé.

HyDE (Gao et al., 2022) est une astuce utile contre les écarts de vocabulaire : générez une réponse hypothétique, puis cherchez avec ce texte plutôt qu’avec la question.

Mesurez les deux étages séparément

Quand une réponse est fausse, la première question est de savoir si le bon passage a été récupéré. Le recall@k dit s’il figurait dans les k premiers. Le MRR dit à quel rang il arrivait. Si le rappel est faible, aucun prompt ne vous sauvera : corrigez la recherche. S’il est élevé et que les réponses sont fausses, regardez la génération.

Les droits passent avant la recherche

Filtrer après le classement fait perdre des résultats, et peut révéler le contenu de documents cachés, car ils influencent encore les statistiques de termes et le classement. Filtrez d’abord selon les droits de l’utilisateur. Et rappelez-vous qu’un texte récupéré est une entrée non fiable : un document peut contenir des instructions, ce qui est le sujet du module suivant.

Mentions légales et confidentialité