Stratégies de découpage (Chunking)
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) :
- 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.
- 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.
- « 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 :
- 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). - 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).
- 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.
- 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.
FAQ: Stratégies de découpage (Chunking)
Termes associés
RAG (Retrieval-Augmented Generation)
Modèle architectural d'IA d'entreprise qui enrichit dynamiquement la fenêtre contextuelle du modèle avec des connaissances vérifiées et pertinentes issues de sources externes (bases vectorielles, graphes, index en texte intégral) avant la génération de la réponse finale.
Dense Embeddings
Projection mathématique de texte, de code ou de données multimodales dans un vecteur numérique dense multidimensionnel, où l'angle et la géométrie entre les coordonnées reflètent leur proximité sémantique.
Recherche hybride (Dense + Sparse Search)
Architecture de récupération dans les systèmes RAG modernes, combinant la recherche sémantique vectorielle (Dense Embeddings) avec l'indexation classique en texte intégral par mots-clés (Sparse / BM25) via des algorithmes de fusion de rangs (RRF).
Arbre syntaxique abstrait (AST) Markdown pour les agents
Représentation hiérarchique en arbre du balisage Markdown (standard mdast / Unified.js), permettant aux systèmes logiciels et aux agents IA d'analyser, transformer et éditer de manière déterministe le contenu technique sans recourir à des expressions régulières fragiles.