{"id":190,"date":"2026-09-30T17:02:35","date_gmt":"2026-09-30T15:02:35","guid":{"rendered":"https:\/\/www.ranksignal.fr\/blog\/?p=190"},"modified":"2026-10-14T17:50:36","modified_gmt":"2026-10-14T15:50:36","slug":"quelle-methode-de-decoupage-chunking-choisir-pour-que-l-agen","status":"publish","type":"post","link":"https:\/\/www.ranksignal.fr\/blog\/agentic\/quelle-methode-de-decoupage-chunking-choisir-pour-que-l-agen\/","title":{"rendered":"Chunking : quel d\u00e9coupage pour une r\u00e9ponse exacte du 1er coup ?"},"content":{"rendered":"<p>Tu poses une question pr\u00e9cise \u00e0 ton agent. La r\u00e9ponse tient en une phrase, quelque part dans une page de plus de 8 000 mots. Avant m\u00eame que le mod\u00e8le ne lise quoi que ce soit, tout s&rsquo;est d\u00e9j\u00e0 jou\u00e9 : comment ce texte a-t-il \u00e9t\u00e9 d\u00e9coup\u00e9, la veille, en morceaux que l&rsquo;on peut retrouver ?<\/p>\n<p>Un mauvais d\u00e9coupage coupe la r\u00e9ponse en deux, la noie dans du bruit ou la rend introuvable. Un bon d\u00e9coupage la place, enti\u00e8re, en t\u00eate des r\u00e9sultats. Voici comment choisir le tien, m\u00e9thode apr\u00e8s m\u00e9thode, chiffres \u00e0 l&rsquo;appui.<\/p>\n<h2>L&rsquo;essentiel en 30 secondes<\/h2>\n<ul>\n<li>D\u00e9couper sert \u00e0 trois choses : tenir dans la fen\u00eatre de contexte, limiter le \u00ab perdu au milieu \u00bb, faciliter la recherche.<\/li>\n<li>Pas de r\u00e9ponse universelle : cela d\u00e9pend du contenu, des questions attendues et du mod\u00e8le d&#8217;embeddings.<\/li>\n<li>Point de d\u00e9part raisonnable : un d\u00e9coupage r\u00e9cursif pour un texte g\u00e9n\u00e9rique, ou un d\u00e9coupage qui suit la structure du document quand il en a une.<\/li>\n<li>Pour trouver pr\u00e9cis\u00e9ment <em>et<\/em> lire avec du contexte, on peut chercher sur de petits fragments et renvoyer le grand bloc dont ils sont issus.<\/li>\n<li>Combiner plusieurs m\u00e9thodes est courant et souvent b\u00e9n\u00e9fique ; c&rsquo;est ensuite la mesure sur tes propres questions qui tranche.<\/li>\n<\/ul>\n<h2>L&rsquo;intuition : un fragment, c&rsquo;est une \u00e9tiquette qui doit ressembler \u00e0 la question<\/h2>\n<p>Imagine une biblioth\u00e8que o\u00f9 chaque fiche r\u00e9sume un seul passage. Si la fiche d\u00e9crit un chapitre entier, elle ressemble un peu \u00e0 toutes les questions et \u00e0 aucune en particulier. Si elle d\u00e9crit une demi-phrase, elle ressemble \u00e0 la question mais ne contient pas de quoi r\u00e9pondre. Le bon d\u00e9coupage se situe entre les deux.<\/p>\n<p>Cette intuition est celle du <a href=\"\/blog\/rag\/qu-est-ce-qu-un-retriever\/\" title=\"retriever\">retriever<\/a> : un fragment plus \u00e9troit produit un embedding plus sp\u00e9cifique, donc plus facile \u00e0 faire correspondre pr\u00e9cis\u00e9ment \u00e0 une question.<\/p>\n<p>Le revers, c&rsquo;est le contexte. De grands fragments apportent du contexte mais aussi du bruit ; de petits fragments sont pr\u00e9cis mais peuvent perdre le contexte. Prends un document juridique de 10 000 mots : d\u00e9coup\u00e9 en segments de 1 000 mots, il m\u00e9lange plusieurs clauses ; en segments de 200 mots, chaque clause est isol\u00e9e, au risque de perdre le contexte des clauses voisines.<\/p>\n<blockquote>\n<p><strong>\ud83d\udca1 Intuition<\/strong> D\u00e9couper, c&rsquo;est arbitrer entre deux erreurs : un fragment trop large qui dilue la r\u00e9ponse, un fragment trop \u00e9troit qui l&rsquo;ampute. Toutes les m\u00e9thodes ci-dessous sont des fa\u00e7ons de placer ce curseur.<\/p>\n<\/blockquote>\n<p>Il y a une raison math\u00e9matique simple \u00e0 la dilution : embedder un document entier revient \u00e0 faire une moyenne de ses id\u00e9es distinctes, ce qui rend la correspondance avec une question pr\u00e9cise plus difficile. D\u00e9couper en fragments plus petits permet une correspondance plus fine.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef471ee524&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef471ee524\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"768\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch03_processus_chunking-scaled.png\" alt=\"Trois encadr\u00e9s reli\u00e9s par des fl\u00e8ches : diviser le texte en petites unit\u00e9s, les fusionner jusqu'\u00e0 une taille cible, puis chevaucher chaque fragment avec le pr\u00e9c\u00e9dent\" class=\"wp-image-184\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch03_processus_chunking-scaled.png 2560w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch03_processus_chunking-300x90.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch03_processus_chunking-1024x307.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch03_processus_chunking-768x230.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch03_processus_chunking-1536x461.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch03_processus_chunking-2048x614.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Regarde l&rsquo;encha\u00eenement de gauche \u00e0 droite : on ne d\u00e9coupe pas d&rsquo;un coup \u00e0 la hache. On divise d&rsquo;abord en unit\u00e9s compactes et porteuses de sens (phrases, paragraphes), on les fusionne jusqu&rsquo;\u00e0 la taille voulue, puis chaque nouveau fragment reprend un bout du pr\u00e9c\u00e9dent. Cette approche est parfois appel\u00e9e chunking \u00ab petit vers grand \u00bb.<\/figcaption><\/figure>\n\n\n<p>Ce bout repris, c&rsquo;est le chevauchement (overlap). Il sert \u00e0 ne pas perdre les r\u00e9ponses qui s&rsquo;\u00e9tendent sur plusieurs fragments.<\/p>\n<h2>Sous le capot : quatre familles de d\u00e9coupage<\/h2>\n<h3>Taille fixe : simple, mais aveugle au sens<\/h3>\n<p>Le d\u00e9coupage \u00e0 taille fixe pr\u00e9d\u00e9termine la taille des fragments et le chevauchement. La version la plus simple coupe \u00e0 chaque occurrence d&rsquo;un caract\u00e8re donn\u00e9, par exemple un saut de ligne. La taille peut se mesurer en caract\u00e8res ou, plus fid\u00e8lement au mod\u00e8le, en tokens.<\/p>\n<p>Sa limite est qu&rsquo;il ignore le sens du texte. Il convient surtout aux donn\u00e9es intrins\u00e8quement uniformes : s\u00e9quences g\u00e9n\u00e9tiques, manuels techniques, r\u00e9ponses d&rsquo;enqu\u00eate.<\/p>\n<p>Quand le caract\u00e8re de s\u00e9paration est trop rare pour tenir la taille cible, on passe au d\u00e9coupage r\u00e9cursif : il re\u00e7oit une liste de s\u00e9parateurs de repli (paragraphe, ligne, point, espace) et retente avec le suivant tant que la taille voulue n&rsquo;est pas atteinte. C&rsquo;est la m\u00e9thode recommand\u00e9e pour des textes g\u00e9n\u00e9riques.<\/p>\n<h3>Sp\u00e9cialis\u00e9 : suivre la structure du document<\/h3>\n<p>Le d\u00e9coupage sp\u00e9cialis\u00e9 tient compte de la structure : en-t\u00eates Markdown, classes et fonctions d&rsquo;un fichier de code, sections HTML. LangChain propose des classes d\u00e9di\u00e9es, comme <code>MarkdownHeaderTextSplitter<\/code>, <code>HTMLHeaderTextSplitter<\/code> ou <code>RecursiveJsonSplitter<\/code>. Son avantage est de pr\u00e9server la structure inh\u00e9rente des donn\u00e9es, d&rsquo;o\u00f9 son autre nom : chunking adaptatif.<\/p>\n<h3>S\u00e9mantique : laisser le sens d\u00e9cider<\/h3>\n<p>Une approche plus r\u00e9cente, propos\u00e9e par Greg Kamradt, questionne l&rsquo;id\u00e9e m\u00eame d&rsquo;une taille pr\u00e9d\u00e9finie. Elle regroupe d&rsquo;abord des groupes de trois phrases, puis fusionne ceux dont le sens est proche, \u00e0 l&rsquo;aide d&#8217;embeddings de similarit\u00e9 (classe <code>SemanticChunker<\/code>). Le livre la pr\u00e9sente encore comme une technique exp\u00e9rimentale.<\/p>\n<h3>Enrichir et hi\u00e9rarchiser : ne pas se limiter au texte brut<\/h3>\n<p>Une fois d\u00e9coup\u00e9, un fragment peut \u00eatre aid\u00e9. Le chunking enrichi de contexte ajoute le r\u00e9sum\u00e9 du document entier \u00e0 chaque fragment : meilleure coh\u00e9rence s\u00e9mantique, au prix d&rsquo;un co\u00fbt de calcul et de stockage suppl\u00e9mentaire.<\/p>\n<p>On peut aussi r\u00e9cup\u00e9rer les fragments voisins d&rsquo;un fragment pertinent (utile quand l&rsquo;information se d\u00e9ploie sur plusieurs paragraphes), filtrer par m\u00e9tadonn\u00e9es (date, auteur, cat\u00e9gorie) avant la recherche, ou g\u00e9n\u00e9rer pour chaque fragment des questions synth\u00e9tiques qu&rsquo;il permettrait de r\u00e9soudre.<\/p>\n<p>Enfin, la structure parent-enfant : les enfants portent le d\u00e9tail, les parents portent le th\u00e8me ou le contexte, et la r\u00e9cup\u00e9ration cible d&rsquo;abord les enfants avant de remonter au parent.<\/p>\n<table>\n<thead>\n<tr>\n<th>M\u00e9thode<\/th>\n<th>Ce qu&rsquo;elle apporte<\/th>\n<th>Sa limite<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Taille fixe<\/td>\n<td>Simplicit\u00e9, taille ma\u00eetris\u00e9e<\/td>\n<td>Ignore le sens du texte<\/td>\n<\/tr>\n<tr>\n<td>R\u00e9cursif<\/td>\n<td>Repli sur des s\u00e9parateurs naturels<\/td>\n<td>Reste ind\u00e9pendant du contenu<\/td>\n<\/tr>\n<tr>\n<td>Sp\u00e9cialis\u00e9<\/td>\n<td>Respecte titres, sections, code<\/td>\n<td>Suppose un document structur\u00e9<\/td>\n<\/tr>\n<tr>\n<td>S\u00e9mantique<\/td>\n<td>Taille dict\u00e9e par le sens<\/td>\n<td>Encore exp\u00e9rimental<\/td>\n<\/tr>\n<tr>\n<td>Parent-enfant<\/td>\n<td>Pr\u00e9cision de la recherche + contexte de lecture<\/td>\n<td>Deux niveaux \u00e0 g\u00e9rer<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Le voir tourner<\/h2>\n<h3>Une m\u00eame page, plusieurs d\u00e9coupages<\/h3>\n<p>Question concr\u00e8te : combien de morceaux donne la page Wikip\u00e9dia de la Coupe du monde de cricket 2023 (plus de 8 000 mots), selon la m\u00e9thode ? On commence par le d\u00e9coupage par caract\u00e8re. Le code coupe sur les sauts de ligne, vise 1 000 caract\u00e8res par fragment, avec 200 caract\u00e8res de chevauchement. Rep\u00e8re <code>html_data_transformed[0].page_content<\/code> : c&rsquo;est le texte de la page, d\u00e9j\u00e0 nettoy\u00e9 de ses balises HTML.<\/p>\n<pre><code>from langchain.text_splitters import CharacterTextSplitter\n\ntext_splitter = CharacterTextSplitter(\n    separator=&quot;\\n&quot;,  # caractere utilise pour le decoupage\n    chunk_size=1000,  # nombre de caracteres par chunk\n    chunk_overlap=200,  # nombre de caracteres de chevauchement\n)\nchunks = text_splitter.create_documents(\n    [html_data_transformed[0].page_content]\n)\nprint(f&quot;Nombre de chunks crees : {len(chunks)}&quot;)\n<\/code><\/pre>\n<p>R\u00e9sultat : 67 fragments, et l&rsquo;on peut v\u00e9rifier que les 200 derniers caract\u00e8res de l&rsquo;un recoupent bien les 200 premiers du suivant.<\/p>\n<p>Changeons de m\u00e9thode : un d\u00e9coupage par sections HTML donne 231 fragments. Si on les red\u00e9coupe ensuite \u00e0 taille fixe, on obtient 285 fragments finaux. Cette combinaison est pr\u00e9sent\u00e9e comme courante et souvent b\u00e9n\u00e9fique, avec un principe d&rsquo;\u00e9quilibre : plus de fragments, c&rsquo;est une information plus pr\u00e9cise pour le mod\u00e8le, mais au risque de perdre la coh\u00e9rence d&rsquo;ensemble.<\/p>\n<blockquote>\n<p><strong>\ud83d\udccc \u00c0 retenir<\/strong> Sur la m\u00eame page : 67 fragments avec une coupe par caract\u00e8re, 285 avec sections puis taille fixe. Le nombre de fragments n&rsquo;est pas un d\u00e9tail technique, c&rsquo;est le r\u00e9sultat direct de ta strat\u00e9gie.<\/p>\n<\/blockquote>\n<h3>Ne jamais couper un mot en deux<\/h3>\n<p>Autre corpus, autre question : un article sur les brevets d&rsquo;Einstein, d\u00e9coup\u00e9 en fen\u00eatres glissantes de 500 caract\u00e8res avec 40 caract\u00e8res de recouvrement. Le livre \u00e9crit sa propre fonction, dont la logique garantit qu&rsquo;on ne coupe jamais au milieu d&rsquo;un mot.<\/p>\n<p>Dans le code, <code>text<\/code> est l&rsquo;article complet, <code>chunk_size<\/code> la taille vis\u00e9e et <code>overlap<\/code> le recouvrement. Avec <code>split_on_whitespace_only=True<\/code>, on ne coupe que sur des espaces ; sinon, on d\u00e9coupe brutalement par index.<\/p>\n<pre><code>def chunk_text(text, chunk_size, overlap, split_on_whitespace_only=True):\n    chunks = []\n    index = 0\n    while index &lt; len(text):\n        if split_on_whitespace_only:\n            prev_whitespace = 0\n            left_index = index - overlap\n            while left_index &gt;= 0:\n                if text[left_index] == &quot; &quot;:\n                    prev_whitespace = left_index\n                    break\n                left_index -= 1\n            next_whitespace = text.find(&quot; &quot;, index + chunk_size)\n            if next_whitespace == -1:\n                next_whitespace = len(text)\n            chunk = text[prev_whitespace:next_whitespace].strip()\n            chunks.append(chunk)\n            index = next_whitespace + 1\n        else:\n            start = max(0, index - overlap + 1)\n            end = min(index + chunk_size + overlap, len(text))\n            chunk = text[start:end].strip()\n            chunks.append(chunk)\n            index += chunk_size\n    return chunks\n\nchunks = chunk_text(text, 500, 40)\nprint(len(chunks)) # 89 chunks in total\n<\/code><\/pre>\n<p>L&rsquo;article donne 89 fragments. Ce nombre est ensuite confirm\u00e9 par le calcul des embeddings : chaque fragment devient un vecteur de 1536 dimensions, et l&rsquo;on retrouve exactement autant de vecteurs que de fragments.<\/p>\n<h3>D\u00e9couper d&rsquo;abord selon les titres<\/h3>\n<p>Plut\u00f4t qu&rsquo;une taille arbitraire, on peut s&rsquo;appuyer sur la structure. L&rsquo;article d&rsquo;Einstein a des sections num\u00e9rot\u00e9es ; une expression r\u00e9guli\u00e8re rep\u00e8re chaque titre (un chiffre, un point, quelques mots) et coupe juste avant.<\/p>\n<pre><code>import re\ndef split_text_by_titles(text):\n    # A regular expression pattern for titles that\n    # match lines starting with one or more digits, an optional uppercase letter,\n    # followed by a dot, a space, and then up to 60 characters\n    title_pattern = re.compile(r&quot;(\\n\\d+[A-Z]?\\. {1,3}.{0,60}\\n)&quot;, re.DOTALL)\n    titles = title_pattern.findall(text)\n    # Split the text at these titles\n    sections = re.split(title_pattern, text)\n    sections_with_titles = []\n    # Append the first section\n    sections_with_titles.append(sections[0])\n    # Iterate over the rest of the sections\n    for i in range(1, len(titles) + 1):\n        section_text = sections[i * 2 - 1].strip() + &quot;\\n&quot; + sections[i * 2].strip()\n        sections_with_titles.append(section_text)\n    return sections_with_titles\n\nsections = split_text_by_titles(text)\nprint(f&quot;Number of sections: {len(sections)}&quot;)\n# Number of sections: 9\n<\/code><\/pre>\n<p>On obtient neuf sections : quatre principales, quatre sous-sections d\u00e9crivant des brevets, et le r\u00e9sum\u00e9 initial. Mais une mesure en tokens r\u00e9v\u00e8le un probl\u00e8me : la plupart des sections restent sous les 600 tokens, une taille raisonnable pour la plupart des prompts, alors que l&rsquo;une d&rsquo;elles d\u00e9passe les 4 000 tokens et risquerait de provoquer une erreur de d\u00e9passement de contexte.<\/p>\n<p>Le d\u00e9coupage par structure ne suffit donc pas toujours : il faut ensuite red\u00e9couper les sections trop longues, exactement comme dans l&rsquo;exemple de la page Wikip\u00e9dia.<\/p>\n<h3>Chercher petit, lire grand : le parent document retriever<\/h3>\n<p>C&rsquo;est ici que la strat\u00e9gie parent-enfant prend tout son sens. Le document parent est d\u00e9coup\u00e9 en enfants plus petits, chacun embedd\u00e9 s\u00e9par\u00e9ment ; mais c&rsquo;est le parent entier qui est retourn\u00e9 une fois la correspondance trouv\u00e9e, pour garder tout le contexte utile au mod\u00e8le.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef471eea50&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef471eea50\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1164\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_strategies_embedding-scaled.png\" alt=\"Deux strat\u00e9gies c\u00f4te \u00e0 c\u00f4te : \u00e0 gauche, un document g\u00e9n\u00e8re des questions hypoth\u00e9tiques qui sont embedd\u00e9es ; \u00e0 droite, un document parent est d\u00e9coup\u00e9 en enfants embedd\u00e9s, et c'est le parent entier qui est renvoy\u00e9\" class=\"wp-image-185\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_strategies_embedding-scaled.png 2560w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_strategies_embedding-300x136.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_strategies_embedding-1024x465.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_strategies_embedding-768x349.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_strategies_embedding-1536x698.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_strategies_embedding-2048x931.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Le sch\u00e9ma montre deux fa\u00e7ons d&#8217;embedder autre chose que le texte \u00e0 rendre. \u00c0 droite, celle qui nous int\u00e9resse : on cherche sur les enfants, on renvoie le parent. \u00c0 gauche, sa cousine, o\u00f9 l&rsquo;on embedde les questions auxquelles un document peut r\u00e9pondre plut\u00f4t que le document lui-m\u00eame.<\/figcaption><\/figure>\n\n\n<p>Dans l&rsquo;exemple, les sections trop longues sont red\u00e9coup\u00e9es en parents d&rsquo;au plus 2 000 caract\u00e8res, avec la fonction <code>chunk_text<\/code> vue plus haut ; <code>sections<\/code> est la liste obtenue \u00e0 l&rsquo;\u00e9tape pr\u00e9c\u00e9dente.<\/p>\n<pre><code>parent_chunks = []\nfor s in sections:\n    parent_chunks.extend(chunk_text(s, 2000, 40))\n<\/code><\/pre>\n<p>Chaque parent est ensuite d\u00e9coup\u00e9 en enfants de 500 caract\u00e8res, embedd\u00e9s et import\u00e9s dans un graphe o\u00f9 le PDF est reli\u00e9 \u00e0 ses parents, eux-m\u00eames reli\u00e9s \u00e0 leurs enfants.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef471eee5f&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef471eee5f\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1347\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_graphe_parent_enfant-scaled.png\" alt=\"Un n\u0153ud PDF reli\u00e9 \u00e0 trois n\u0153uds Parent de 2000 caract\u00e8res ; le premier Parent est reli\u00e9 \u00e0 des n\u0153uds Enfants de 500 caract\u00e8res, seuls embedd\u00e9s\" class=\"wp-image-186\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_graphe_parent_enfant-scaled.png 2560w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_graphe_parent_enfant-300x158.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_graphe_parent_enfant-1024x539.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_graphe_parent_enfant-768x404.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_graphe_parent_enfant-1536x808.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch03_graphe_parent_enfant-2048x1078.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Rep\u00e8re la couleur ou l&rsquo;\u00e9tiquette \u00ab embed. \u00bb : seuls les enfants portent un embedding. Les parents ne servent qu&rsquo;\u00e0 fournir le texte \u00e0 lire une fois l&rsquo;enfant retrouv\u00e9.<\/figcaption><\/figure>\n\n\n<p>\u00c0 la question, la recherche vectorielle part des enfants, mais en demandant volontairement quatre fois plus de r\u00e9sultats que n\u00e9cessaire : plusieurs enfants pertinents peuvent appartenir au m\u00eame parent, il faut donc une marge avant de d\u00e9dupliquer et de ne garder que les <code>k<\/code> meilleurs parents.<\/p>\n<pre><code>CALL db.index.vector.queryNodes(&#36;index_name, &#36;k * 4, &#36;question_embedding)\nYIELD node, score\nMATCH (node)&lt;-[:HAS_CHILD]-(parent)\nWITH parent, max(score) AS score\nRETURN parent.text AS text, score\nORDER BY score DESC\nLIMIT toInteger(&#36;k)\n<\/code><\/pre>\n<p>Retiens la ligne <code>max(score)<\/code> : chaque parent est class\u00e9 selon son enfant le plus proche de la question, et non selon une moyenne dilu\u00e9e. C&rsquo;est la traduction concr\u00e8te de \u00ab chercher petit, lire grand \u00bb.<\/p>\n<h3>Quelle taille choisir ? Un exemple chiffr\u00e9<\/h3>\n<p>Le livre sur GraphRAG rapporte une exp\u00e9rience de chercheurs de MS GraphRAG qui comparent plusieurs tailles de fragments. Attention au contexte : la mesure porte sur l&rsquo;extraction d&rsquo;entit\u00e9s, pas sur la r\u00e9cup\u00e9ration d&rsquo;une r\u00e9ponse.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef471ef239&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef471ef239\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2250\" height=\"1500\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch07_chunk_size_entites.png\" alt=\"Courbes du nombre d'entit\u00e9s d\u00e9tect\u00e9es selon le nombre d'it\u00e9rations d'auto-r\u00e9flexion, pour des fragments de 600, 1200 et 2400 tokens\" class=\"wp-image-187\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch07_chunk_size_entites.png 2250w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch07_chunk_size_entites-300x200.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch07_chunk_size_entites-1024x683.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch07_chunk_size_entites-768x512.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch07_chunk_size_entites-1536x1024.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b2_ch07_chunk_size_entites-2048x1365.png 2048w\" sizes=\"auto, (max-width: 2250px) 100vw, 2250px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Sur le graphique, la courbe des fragments de 600 tokens domine celles de 1 200 et de 2 400 tokens, avec un \u00e9cart d&rsquo;environ 24 000 entit\u00e9s d\u00e9tect\u00e9es contre environ 10 500 au plus haut. Les petits fragments retrouvent davantage d&rsquo;entit\u00e9s. Ce r\u00e9sultat ne se transpose pas m\u00e9caniquement \u00e0 ton cas, mais il confirme le sens de l&rsquo;arbitrage : plus petit veut dire plus pr\u00e9cis.<\/figcaption><\/figure>\n\n\n<h2>Lire les r\u00e9sultats : comment savoir si ton d\u00e9coupage est le bon<\/h2>\n<p>Choisir sans mesurer, c&rsquo;est deviner. Le livre distingue deux m\u00e9triques de r\u00e9cup\u00e9ration que tu connais peut-\u00eatre : la pr\u00e9cision (parmi les documents r\u00e9cup\u00e9r\u00e9s, combien \u00e9taient pertinents ?) et le rappel (parmi tous les documents pertinents, combien ont \u00e9t\u00e9 r\u00e9cup\u00e9r\u00e9s ?). En RAG, la pr\u00e9cision@k est la plus parlante, puisque seuls les tout premiers r\u00e9sultats servent \u00e0 l&rsquo;augmentation.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef4720be40&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef4720be40\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2250\" height=\"1650\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch05_precision_rappel.png\" alt=\"Diagramme de Venn : documents r\u00e9cup\u00e9r\u00e9s et documents pertinents se recouvrent, l'intersection est celle des vrais positifs\" class=\"wp-image-188\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch05_precision_rappel.png 2250w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch05_precision_rappel-300x220.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch05_precision_rappel-1024x751.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch05_precision_rappel-768x563.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch05_precision_rappel-1536x1126.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch05_precision_rappel-2048x1502.png 2048w\" sizes=\"auto, (max-width: 2250px) 100vw, 2250px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Sur le sch\u00e9ma, la pr\u00e9cision est la part de l&rsquo;intersection dans \u00ab r\u00e9cup\u00e9r\u00e9s \u00bb, le rappel sa part dans \u00ab pertinents \u00bb. Un rappel parfait est trivial : il suffit de tout r\u00e9cup\u00e9rer. C&rsquo;est pourquoi on ne le regarde jamais seul.<\/figcaption><\/figure>\n\n\n<p>Pour ton objectif \u00ab du premier coup \u00bb, une troisi\u00e8me mesure est d\u00e9cisive : le rang de r\u00e9ciprocit\u00e9 moyen (MRR), qui moyenne sur un ensemble de requ\u00eates l&rsquo;inverse du rang du premier document pertinent. Il dit \u00e0 quelle vitesse le syst\u00e8me trouve un r\u00e9sultat pertinent, mais ignore tout ce qui suit ce premier r\u00e9sultat.<\/p>\n<blockquote>\n<p><strong>\ud83d\udca1 Intuition<\/strong> Une bonne r\u00e9ponse en position 1 vaut plus qu&rsquo;une bonne r\u00e9ponse en position 5 : c&rsquo;est exactement ce que capture le MRR. Compare deux d\u00e9coupages sur les m\u00eames questions et garde celui dont le MRR est le meilleur.<\/p>\n<\/blockquote>\n<p>S\u00e9pare aussi les deux sources d&rsquo;erreur. Sur un banc d&rsquo;essai, le livre GraphRAG obtient une exactitude de 0,7774, un rappel de contexte de 0,7941 et une fid\u00e9lit\u00e9 de 0,9657 : le mod\u00e8le invente rarement, mais la r\u00e9cup\u00e9ration ne capture pas toujours toute l&rsquo;information. Quand le rappel est le maillon faible, c&rsquo;est le d\u00e9coupage et la r\u00e9cup\u00e9ration qu&rsquo;il faut travailler, pas le mod\u00e8le.<\/p>\n<p>Enfin, garde un jeu de questions qui \u00e9volue : il devient une sp\u00e9cification vivante de ce que l&rsquo;agent doit savoir g\u00e9rer, et permet de d\u00e9tecter les r\u00e9gressions quand tu changes de d\u00e9coupage.<\/p>\n<h2>Pi\u00e8ges et limites<\/h2>\n<p><strong>Le contexte de l&rsquo;agent est un budget.<\/strong> Un contexte non pertinent ou mal structur\u00e9 distrait le mod\u00e8le ou d\u00e9passe les budgets de jetons sans b\u00e9n\u00e9fice ; il vaut mieux ne retrouver que les informations les plus utiles plut\u00f4t que d&rsquo;ajouter de gros blocs de texte. Plus tes fragments sont cibl\u00e9s, mieux ce budget est employ\u00e9.<\/p>\n<p><strong>Un fragment peut m\u00e9langer des sources.<\/strong> Des fragments partageant des mots-cl\u00e9s comme \u00ab payment \u00bb ou \u00ab terms \u00bb mais appartenant \u00e0 des contrats diff\u00e9rents peuvent se m\u00e9langer, et conduire le mod\u00e8le \u00e0 une r\u00e9ponse fragment\u00e9e, voire trompeuse. Le filtrage par m\u00e9tadonn\u00e9es (horodatage, auteur, cat\u00e9gorie) restreint la recherche aux fragments pertinents avant m\u00eame de la lancer.<\/p>\n<blockquote>\n<p><strong>\u26a0\ufe0f Pi\u00e8ge<\/strong> Un d\u00e9coupage parfait ne r\u00e9pond pas \u00e0 toutes les questions. Une question qui demande de filtrer, trier ou compter (\u00ab combien de contrats actifs avec tel client ? \u00bb) \u00e9choue avec de simples embeddings de texte, con\u00e7us pour retrouver du contenu proche, pas pour agr\u00e9ger.<\/p>\n<\/blockquote>\n<p><strong>Certaines questions r\u00e9sistent au d\u00e9coupage.<\/strong> Les requ\u00eates \u00e0 raisonnement multi-\u00e9tapes, les requ\u00eates vagues (difficiles \u00e0 faire correspondre \u00e0 des fragments pr\u00e9cis), les requ\u00eates longues ou complexes et les requ\u00eates implicites restent des points faibles r\u00e9currents. Le chunking n&rsquo;y change pas grand-chose ; il faut plut\u00f4t agir sur la requ\u00eate ou le raisonnement.<\/p>\n<p><strong>Une taille, un mod\u00e8le.<\/strong> Certains mod\u00e8les d&#8217;embeddings fonctionnent mieux avec des fragments d&rsquo;une taille pr\u00e9cise, et le mod\u00e8le doit rester strictement le m\u00eame tout au long de l&rsquo;application : en changer implique de recalculer tout l&rsquo;index.<\/p>\n<p><strong>Les enrichissements se paient.<\/strong> Le r\u00e9sum\u00e9 ajout\u00e9 \u00e0 chaque fragment et les techniques de pr\u00e9-r\u00e9cup\u00e9ration introduisent un surco\u00fbt de calcul, de latence et de stockage \u00e0 mettre en balance avec le gain attendu.<\/p>\n<p><strong>Et les tr\u00e8s grandes fen\u00eatres de contexte ?<\/strong> Elles permettent, pour des bases modestes, de transmettre tout le document sans d\u00e9coupage. Mais les \u00e9tudes cit\u00e9es montrent un co\u00fbt de calcul nettement sup\u00e9rieur, et rien ne garantit qu&rsquo;un mod\u00e8le rep\u00e8re l&rsquo;unique \u00e9l\u00e9ment pertinent dans une telle fen\u00eatre. Le consensus d\u00e9crit est qu&rsquo;une architecture hybride garde sa valeur.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6adef4720c38a&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6adef4720c38a\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"971\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch09_self_route-scaled.png\" alt=\"Sch\u00e9ma SELF-ROUTE : une requ\u00eate d\u00e9clenche d'abord la r\u00e9cup\u00e9ration de fragments ; si le mod\u00e8le peut r\u00e9pondre avec eux, il r\u00e9pond directement, sinon le contexte complet lui est envoy\u00e9\" class=\"wp-image-189\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch09_self_route-scaled.png 2560w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch09_self_route-300x114.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch09_self_route-1024x388.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch09_self_route-768x291.png 768w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch09_self_route-1536x583.png 1536w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/09\/b1_ch09_self_route-2048x777.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Suis le flux : le mod\u00e8le re\u00e7oit d&rsquo;abord les fragments r\u00e9cup\u00e9r\u00e9s et d\u00e9cide lui-m\u00eame s&rsquo;ils suffisent. Sinon seulement, le document complet lui est transmis. On garde ainsi le co\u00fbt r\u00e9duit du RAG et la s\u00e9curit\u00e9 du contexte long.<\/figcaption><\/figure>\n\n\n<h2>Aller plus loin<\/h2>\n<ul>\n<li><strong>Embedding<\/strong> : la repr\u00e9sentation vectorielle qui rend un fragment comparable \u00e0 une question ; sa qualit\u00e9 conditionne celle de ton d\u00e9coupage.<\/li>\n<li><strong>Filtrage par m\u00e9tadonn\u00e9es<\/strong> : restreindre la recherche par date, auteur ou cat\u00e9gorie avant la similarit\u00e9, pour r\u00e9duire le bruit.<\/li>\n<li><strong>Re-classement<\/strong> : r\u00e9ordonner les documents r\u00e9cup\u00e9r\u00e9s pour prioriser les plus pertinents, utile en r\u00e9cup\u00e9ration hybride.<\/li>\n<li><a href=\"\/blog\/agentic\/le-step-back-prompting\/\" title=\"Step-back prompting\">Step-back prompting<\/a> : \u00e9largir une question trop pointue pour am\u00e9liorer le rappel de la recherche vectorielle.<\/li>\n<\/ul>\n<h2>Questions fr\u00e9quentes<\/h2>\n<p><strong>Faut-il encore d\u00e9couper avec des fen\u00eatres d&rsquo;un million de jetons ?<\/strong> Oui dans la plupart des cas : m\u00eame quand le contexte peut absorber un article entier, on obtient de meilleurs r\u00e9sultats en le d\u00e9coupant en fragments de quelques centaines de caract\u00e8res avec recouvrement.<\/p>\n<p><strong>Quel chevauchement choisir ?<\/strong> Il n&rsquo;y a pas de r\u00e8gle chiffr\u00e9e. Les exemples vus varient : 200 caract\u00e8res pour 1 000, 40 pour 500 avec coupe sur les espaces, 40 mots pour des fragments de 1 000 mots.<\/p>\n<p><strong>Et pour l&rsquo;audio, la vid\u00e9o, les images ?<\/strong> Apr\u00e8s transcription en texte, le d\u00e9coupage reste proche de celui du texte. Sinon : d\u00e9tection d&rsquo;activit\u00e9 vocale pour segmenter l&rsquo;audio selon les silences, d\u00e9tection de changement de sc\u00e8ne pour la vid\u00e9o, et les images ne sont g\u00e9n\u00e9ralement pas d\u00e9coup\u00e9es.<\/p>\n<h2>\u00c0 retenir<\/h2>\n<ul>\n<li>Le bon d\u00e9coupage est celui qui place la r\u00e9ponse enti\u00e8re dans un fragment que le retriever peut faire ressembler \u00e0 la question.<\/li>\n<li>Pars d&rsquo;un d\u00e9coupage r\u00e9cursif ou structurel, puis red\u00e9coupe ce qui reste trop long : c&rsquo;est ce que montrent les 231 puis 285 fragments de la page cricket.<\/li>\n<li>Si le contexte manque, cherche sur des fragments \u00e9troits et renvoie le parent.<\/li>\n<li>Mesure avec pr\u00e9cision@k, rappel et surtout MRR, sur un jeu de questions qui grandit avec ton agent.<\/li>\n<li>Ne demande pas au d\u00e9coupage ce qu&rsquo;il ne sait pas faire : filtres, comptages et raisonnements multi-\u00e9tapes se r\u00e8glent ailleurs.<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Taille fixe, sections, s\u00e9mantique, parent-enfant : compare les m\u00e9thodes de d\u00e9coupage d&rsquo;un RAG et choisis celle qui fait remonter la bonne r\u00e9ponse en premier.<\/p>\n","protected":false},"author":1,"featured_media":271,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-190","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agentic"],"_links":{"self":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/comments?post=190"}],"version-history":[{"count":3,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"predecessor-version":[{"id":827,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/190\/revisions\/827"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media\/271"}],"wp:attachment":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}