Aller au contenu principal

Profils RAG

Un profil RAG regroupe, sous un nom réutilisable, tous les réglages qui pilotent le fonctionnement d'une base de connaissances : découpage des documents, méthode de récupération, fusion des résultats, sélection finale, et options d'IA optionnelles (contextualisation, reranking, décomposition de requête). Les profils se gèrent depuis Manager → Paramètres → Profils RAG. Un profil s'attache à une base de connaissances depuis la fiche de celle-ci (Manager → Designer → la base → Indexation → Paramètres avancés), ou peut être surchargé pour un nœud RAG précis d'un pipeline (voir l'éditeur de pipelines).

7 profils sont fournis par défaut : Générique (reproduit le comportement historique, sans aucune option d'IA activée) et 6 presets métier (Finance, Comptable, Juridique, RH / Social, Qualité, Appels d'offres), chacun pré-réglé pour son domaine. Tous les 7 sont directement éditables depuis l'écran Profils RAG — plus besoin de les dupliquer avant de les modifier. Un bouton Importer un profil permet à tout moment de recréer un preset tel qu'à l'origine, si sa version personnalisée a trop dérivé.

remarque

Une base de connaissances sans profil attaché (« — Aucun — ») garde son comportement historique : découpage/extraction/embedding configurés directement sur la base, aucune option d'IA avancée (contextualisation, reranking, décomposition) disponible.

Deux moments bien distincts : indexation et requête

C'est la distinction la plus importante pour comprendre le coût d'un profil :

  • À l'indexation (création de la base ou réindexation manuelle) — le découpage, la contextualisation et l'extraction de métadonnées tournent une seule fois par document, au moment où il est indexé ou réindexé. Coût ponctuel.
  • À la requête — chaque fois qu'un module IA a besoin de contexte, la récupération, la fusion, la sélection, le reranking et la décomposition de requête tournent à nouveau. Or une « requête » a lieu à chaque segment du document en cours de vérification, pas une seule fois par job : un document de 150 segments interroge la base 150 fois. En mode chat, c'est une fois par tour de conversation — un rythme beaucoup plus proche de ce à quoi on s'attend d'un chatbot RAG classique.
remarque

Les options qui coûtent un appel IA à la requête (reranking, décomposition) sont donc reproduites à chaque segment. Sur un document de vérification long, ça peut représenter des dizaines, voire des centaines d'appels IA supplémentaires pour un seul job — à mettre en balance avec le gain de précision avant de les activer sur une base volumineuse.

Découpage (indexation)

  • Taille des fragments (chunk_size) — nombre de caractères par fragment avant vectorisation. Par défaut 900 (Générique). Plus grand : moins de fragments, plus de contexte par résultat, mais recherche moins précise et fragments plus coûteux en tokens une fois injectés dans le prompt de l'agent. Plus petit : l'inverse.
  • Chevauchement (chunk_overlap) — caractères répétés entre deux fragments consécutifs, pour ne pas couper une information à la frontière. Par défaut 150.
  • Ratio parent/enfant (parent_multiplier) — multiplicateur de chunk_size pour la taille de la section « parente » retournée quand small-to-big est actif (voir plus bas), plafonné à 8000 caractères. Par défaut 4.
  • Stratégie de découpage (chunking.strategy) — default (récursif), structural (détecte les marqueurs Article/Titre/Alinéa/Exigence, utilisé par les presets Comptable/Juridique/RH-Social/Qualité/Appels d'offres) ou page (ne laisse jamais un fragment « parent » traverser une frontière de page — utilisé par le preset Finance, dont les documents n'ont typiquement aucun marqueur structurel mais où chaque page a un sens propre : bilan, compte de résultat, une note). page détecte aussi les marqueurs structurels à l'intérieur de chaque page quand ils existent (repère du type « Page 3 > Article 12 ») et se réduit à structural sur un document sans saut de page détecté (support texte collé, par exemple). Non modifiable depuis l'écran Profils RAG aujourd'hui — hérité du preset d'origine, conservé tel quel si vous éditez ou dupliquez le profil.

Aucun coût d'inférence IA direct — c'est un découpage mécanique du texte.

Modèle d'embedding

Le modèle qui vectorise chaque fragment (embedding_model_id, configuré au niveau de la base de connaissances, pas du profil). Chaque appel de vectorisation est un vrai appel réseau facturable :

  • À l'indexation — un appel par lot de fragments (jusqu'à 64 à la fois). C'est la seule partie de l'embedding dont le coût est suivi et affiché dans Finances.
  • À la requête — un appel par requête (ou par sous-question si la décomposition est active). Ce coût est réel mais non tracké dans Finances : il est jugé négligeable comparé à un appel de génération ou de reranking.

Récupération et fusion (requête, sans coût IA)

Purement de la recherche en base de données (pgvector + recherche plein texte PostgreSQL) — aucun appel à un modèle IA, quel que soit le réglage.

  • Recherche hybride (hybrid) — combine recherche vectorielle (sens) et lexicale (mots exacts, utile pour les numéros de compte, références, termes techniques). Activée par défaut sur tous les presets.
  • Candidats examinés (fetch_k) — nombre de candidats remontés avant fusion/sélection. Plus élevé = recherche plus large mais plus lente (charge base de données, pas IA). De 30 (Générique) à 120 (Juridique) selon les presets.
  • Poids sémantique / lexical (w_dense / w_lexical) — pondération de chaque canal dans la fusion RRF. Un poids lexical plus élevé favorise les correspondances exactes.
  • Constante RRF (rrf_k) — paramètre de l'algorithme de fusion Reciprocal Rank Fusion. Fixé à 60 pour tous les presets, non modifiable depuis l'écran Profils RAG aujourd'hui.

Sélection

  • Résultats retournés (top_k) — nombre de fragments finalement transmis à l'agent après fusion/sélection. De 5 (Générique, Appels d'offres) à 10 (Juridique).
  • Seuil de pertinence (min_score) — score minimal en dessous duquel un résultat est écarté. Souple (aucun seuil) par défaut, ou une valeur autour de 0,35 sur les presets métier.
  • Longueur des extraits (candidate_char_limit) — troncature de chaque candidat dans le prompt de reranking (n'affecte que le reranking, pas le texte réellement transmis à l'agent). Par défaut 500 caractères.
  • Diversité des résultats (use_mmr, Maximal Marginal Relevance) — évite que le top_k soit monopolisé par des fragments quasi-identiques, au profit d'un panel plus varié. Calcul purement algorithmique sur les vecteurs déjà en mémoire — aucun coût d'inférence IA, quel que soit son état.
  • Retourner la section parente / small-to-big (use_parent_child) — renvoie la section entière d'où provient le fragment trouvé, pas le fragment seul. Aucun appel IA supplémentaire (le texte parent est déjà stocké à l'indexation), mais des prompts plus longs pour l'agent en aval — donc un coût de génération plus élevé, indirect.

Reranking — coût IA à la requête

  • Reranking par IA (use_reranking + le modèle choisi juste en dessous) — récupère davantage de candidats (fetch_k) puis un modèle IA les reclasse en un seul appel listwise pour ne garder que les plus pertinents. Fonctionne avec n'importe quel modèle déjà configuré, y compris un modèle Ollama local/gratuit.
  • Reranking en 2 étages (rerank_stage2_model_id, optionnel — n'apparaît qu'une fois un premier modèle choisi) — un 2ᵉ modèle, pensé pour être plus précis (quitte à être plus lent/coûteux), reclasse uniquement la sélection déjà restreinte par le 1er étage (15 candidats, ou 3× top_k si plus grand) — jamais l'ensemble des candidats. Un appel IA supplémentaire, seulement sur cette sélection réduite. Sans effet tant qu'aucun 2ᵉ modèle n'est choisi (reranking à un seul étage, le comportement par défaut).
remarque

Ce n'est pas toujours un seul appel par segment. Si le segment analysé contient plusieurs lignes distinctes, chaque ligne interroge la base — et donc reranke — séparément ; même chose si la décomposition de requête (ci-dessous) a généré plusieurs sous-questions. Le reranking (chaque étage configuré) s'exécute alors une fois par ligne/sous-question, pas une fois pour tout le segment. C'est précisément pour cette raison que le reranking est désactivé par défaut sur tous les presets sauf Générique.

Requête (query) — décomposition et filtres

  • Stratégie de requête (query_strategy) — default (aucune transformation) ou decompose : un appel IA qui découpe une question complexe en jusqu'à 4 sous-questions indépendantes, chacune recherchée séparément puis fusionnée. Coûte un appel IA de plus par segment, quel que soit le nombre de sous-questions produites.
  • Filtrage par métadonnées extraites (extract_filters) — un appel IA qui tente d'extraire, depuis la question, une valeur pour chacun des champs définis dans l'enrichissement (voir plus bas — exercice fiscal, juridiction, date de version…), pour restreindre la recherche aux documents correspondants. N'a d'effet que si des champs d'enrichissement existent sur le profil.
remarque

Décomposition et extraction de filtres partagent le même modèle IA (le champ query.ai_model_id du profil) — mais ce champ n'est pas encore exposé dans l'écran Profils RAG : dans les faits, c'est toujours le modèle de contextualisation de la base (contextual_model_id) qui est utilisé pour ces deux options aujourd'hui.

Enrichissement (indexation, coût IA)

  • Champs de métadonnées (enrichment.metadata_fields) — un preset peut définir des champs à extraire de chaque document à l'indexation (ex. exercice fiscal et devise pour Finance ; juridiction et version pour Juridique). Un appel IA par document, au moment de l'indexation — réutilise le modèle de contextualisation. Ces champs alimentent aussi le filtrage par métadonnées ci-dessus. Non modifiable depuis l'écran Profils RAG aujourd'hui — hérité du preset d'origine.

Contextualisation des fragments (indexation, coût IA)

  • Contextualisation à l'indexation (use_contextual_retrieval + le modèle choisi) — avant d'indexer, un modèle IA rédige une phrase qui situe chaque fragment dans le document (utile quand un fragment isolé perd son référent : « il », « cette méthode », « en 2023 »…). Un appel IA par lot de 8 fragments (pas un par fragment), lots traités en parallèle. Payé une seule fois par document à l'indexation — sauf pour un document indexé via le nœud Index du document, rebâti à chaque exécution du job, où ce coût est donc payé à chaque run.

Résumés de section (indexation, coût IA)

  • Résumé à l'indexation (use_section_summaries) — un modèle IA rédige un court résumé (2 à 4 phrases) de chaque section détectée (une page pour la stratégie page, une section structurelle pour structural). Un appel IA par section (pas par fragment), sections traitées en parallèle. Réutilise le modèle de contextualisation ci-dessus — sans effet si aucun n'est configuré. À la requête, le résumé de chaque section touchée est montré à l'agent en plus des extraits trouvés, jamais à leur place — un extrait pertinent n'est jamais remplacé par son résumé. Sans effet sur un profil dont la stratégie de découpage est default (récursif) : aucune section n'y est jamais détectée.

Exécuteur — pas de coût IA direct

  • Plafond par ligne (per_line_cap_single / per_line_cap_multi) et budget de résultats (result_budget) — combien de fragments au maximum sont effectivement injectés dans le prompt de l'agent, après tous les traitements ci-dessus. Ne déclenchent aucun appel IA supplémentaire, mais réduisent le nombre de fragments transmis — donc le coût de génération de l'agent en aval. Par défaut 10 / 3 / 10. Non modifiables depuis l'écran Profils RAG aujourd'hui.

Récapitulatif des coûts

ParamètreAppel IA ?QuandFréquence
Découpage, fusion RRF, hybride, fetch_k/top_k/min_scoreNon
Diversité (use_mmr)Non (calcul vectoriel)
Small-to-big (use_parent_child)Non (coût indirect : prompts plus longs)
Modèle d'embeddingOuiIndexation (suivi) + requête (non suivi)Par lot de fragments / par requête
ContextualisationOuiIndexation1 appel / lot de 8 fragments / document
Enrichissement (métadonnées)OuiIndexation1 appel / document
Résumés de sectionOuiIndexation1 appel / section détectée (page ou section structurelle)
Décomposition de requêteOuiRequête1 appel / segment analysé (ou / tour de chat)
Filtrage par métadonnées extraitesOuiRequête1 appel / segment analysé (ou / tour de chat)
Reranking (1er étage)OuiRequête1 appel / ligne ou sous-question — peut se multiplier
Reranking (2ᵉ étage, optionnel)OuiRequête1 appel de plus / ligne ou sous-question, sur la sélection déjà restreinte

Voir aussi