Skip to main content

Stratégies de découpage (Chunking)

POUR AGENT IAChatGPTClaude

Méthodologie de décomposition de documents volumineux et de bases de code en fragments autonomes sur le plan informationnel (chunks) pour la génération d'embeddings vectoriels et une recherche précise dans les systèmes RAG.

1. Vue d'ensemble du concept et problème systémique

Les modèles d'embeddings (tels que text-embedding-3-large ou bge-m3) disposent d'une fenêtre d'entrée strictement limitée en longueur (de 512 à 8192 tokens). Même si le modèle est techniquement capable d'ingérer un grand document PDF dans son intégralité, il compresse l'ensemble des informations dans un unique vecteur de dimension fixe (par exemple, 1536 valeurs numériques).

En l'absence de découpage granulaire (chunking) :

  1. Dilution sémantique (Vector Dilution) : Le vecteur représentant un document de 50 pages devient si générique qu'il perd les détails spécifiques aux fonctions ou configurations individuelles.
  2. Impossibilité d'une récupération précise dans RAG : Le système de recherche injectera l'intégralité du document massif dans le contexte de la LLM générative, épuisant instantanément le budget de tokens.
  3. « Destruction » de la structure par un découpage naïf : Une segmentation fixe basée sur le nombre de caractères (Character Splitting) coupe les mots en deux, sépare l'en-tête d'une fonction de son implémentation et détruit les tableaux.

Le Chunking constitue le fondement de l'ingénierie RAG : il transforme un texte brut monolithique en une collection de blocs sémantiques autonomes, informatifs et interconnectés.

2. Taxonomie architecturale et modèle mental

Selon la structure des données, on distingue quatre niveaux architecturaux de chunking :

  • 1. Chunking à taille fixe avec chevauchement (Fixed-Size Sliding Window) : Approche la plus simple : le texte est découpé en blocs de $N$ tokens avec un chevauchement de $M$ tokens. Rapide, mais elle viole souvent les limites logiques des paragraphes.
  • 2. Découpage récursif par caractères (Recursive Character Splitting) : Approche hiérarchique (standard LangChain/LlamaIndex). L'algorithme tente d'abord de scinder le texte selon les doubles sauts de ligne (\n\n). Si le segment est trop long, il utilise les sauts de ligne simples (\n), puis les points (. ), et enfin les espaces uniquement en dernier recours.
  • 3. Chunking sémantique (Semantic / Embedding-Distance Chunking) : Le texte est divisé en phrases distinctes. Un vecteur est généré pour chacune, et la similarité cosinus entre phrases adjacentes est calculée. La frontière d'un chunk est établie aux points de rupture sémantique nette (changement de sujet).
  • 4. Chunking syntaxique AST/Markdown (Structural Chunking) : Prend en compte l'arbre syntaxique du document : il divise le Markdown strictement selon les niveaux de titres (#, ##, ###) tout en préservant les filtres d'Ariane (breadcrumbs), et segmente le code source selon les nœuds de classes et de fonctions via Tree-sitter.

3. Pipeline technique et mécanique interne

Le pipeline professionnel de chunking se compose de 4 étapes :

  1. Ingestion du document et pré-nettoyage (Cleaning) : Suppression des caractères spéciaux invisibles, unification des sauts de ligne (\r\n -> \n) et normalisation de l'encodage Unicode (NFC).
  2. Détection des frontières (Boundary Detection) : Le parser construit un arbre syntaxique abstrait (AST) ou identifie des points de coupure sûrs (séparateurs Markdown, lignes vides entre les fonctions).
  3. Formatage de la fenêtre et calcul du chevauchement (Window Formatting & Overlap Calculation) : Le texte est regroupé en blocs de 500 à 700 tokens. Un buffer de chevauchement (10–15 %) issu du chunk précédent est ajouté au début de chaque nouveau chunk.
  4. Enrichissement des métadonnées et injection de contexte (Metadata Enrichment & Context Injection) : Chaque chunk reçoit un préfixe contenant des métadonnées : [File: api/auth.ts | Class: AuthService | Method: validateToken] Cela garantit que le vecteur du fragment sera retrouvé même si la requête ne mentionne pas explicitement le nom de la méthode dans son corps.

4. Scénarios d'ingénierie pratiques en production

01. Indexation d'une base de code via Tree-sitter

Chaque fichier TypeScript est analysé pour produire un arbre syntaxique. Un chunk distinct est créé pour chaque interface exportée et chaque fonction. Si une fonction occupe 20 lignes, elle devient un chunk autonome incluant le commentaire JSDoc et la liste des types importés.

02. Traitement de tableaux complexes et de rapports financiers

Un découpage standard brise les lignes de tableau, privant les chiffres de leur sens. Un chunking professionnel convertit chaque ligne de tableau en une phrase textuelle autonome : « En 2024, le chiffre d'affaires de la division Cloud s'est élevé à 35 milliards de dollars, soit une augmentation de 15 % par rapport à 2023 », générant ainsi des vecteurs dotés d'une haute précision de recherche.

03. Analyse de la documentation API (OpenAPI / Swagger)

Chaque route (par exemple, POST /v1/payments) est isolée dans un chunk spécifique contenant le chemin, la méthode HTTP, la description des paramètres, un exemple de réponse et les codes d'erreur. Cela permet à l'agent de générer du code client sans erreur.

5. Pièges courants, erreurs typiques et sécurité

  • Problème des « pronoms suspendus » (Dangling Pronouns) : Si la phrase « Cette fonction nécessite des droits administrateur » se trouve dans le chunk 2, tandis que le nom de la fonction reste dans le chunk 1, le modèle ne pourra pas répondre à la requête. Utilisez systématiquement des métadonnées enrichies par le contexte parent (Parent Document Retrieval).
  • Gonflement de la base vectorielle dû à un chevauchement excessif : Un overlap supérieur à 25 % entraîne une duplication des informations dans la base de données, augmente le coût d'indexation et remonte des fragments identiques en tête des résultats.
  • Perte du contexte structurel (Loss of Lineage) : Un chunk dépourvu du nom du fichier et du numéro de ligne devient un bruit anonyme, compliquant la génération de citations précises dans les réponses de l'agent.
/ Questions fréquentesSchema.org FAQPage

FAQ: Stratégies de découpage (Chunking)

Les petits chunks (100–300 tokens) offrent une recherche vectorielle très précise, mais peuvent perdre le contexte global de l'idée. Les grands chunks (1000–2000 tokens) préservent la vue d'ensemble, mais leurs embeddings deviennent « dilués », ce qui réduit la similarité sémantique avec des requêtes spécifiques et étroites. La norme idéale pour les textes techniques est de 400 à 800 tokens.
/ Liens internes
Tous les termes