Back to flin
flin

Découpage conscient du code pour le RAG

Comment la fonction chunk_text() de FLIN divise les documents en segments appropriés pour l'embedding tout en respectant les frontières de paragraphes, les blocs de code, les titres et la cohérence sémantique.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 4 min flin
EN/ FR/ ES
flinchunkingragcodeai

Les modèles d'embedding ont une fenêtre de contexte fixe. La plupart des modèles acceptent 512 tokens (environ 400 mots). Certains acceptent 8 192 tokens. Aucun n'accepte un document entier de 50 pages en entrée. Pour intégrer un long document, vous devez le diviser en chunks qui tiennent dans la fenêtre de contexte du modèle.

Le découpage naïf -- diviser tous les 500 caractères sans tenir compte du contenu -- produit de terribles embeddings. Un chunk qui commence au milieu d'une phrase et se termine au milieu d'un bloc de code n'a pas de sens cohérent. L'embedding est une moyenne floue de deux sujets sans rapport.

La fonction chunk_text() de FLIN est consciente de la structure du document. Elle divise le texte aux frontières sémantiques : sauts de paragraphe, frontières de titres, délimiteurs de blocs de code et fins de phrases. Le résultat est des chunks qui représentent chacun une seule idée cohérente.

La fonction chunk_text()

flinchunks = chunk_text(text, {
    max_size: 500,        // Taille maximale par chunk en caractères
    overlap: 50,          // Caractères de chevauchement entre chunks
    strategy: "semantic"  // "fixed", "paragraph", "semantic", "code"
})

Stratégies de découpage

Taille fixe

La stratégie la plus simple. Divise aux frontières exactes de caractères. À utiliser uniquement pour du texte non structuré sans titres, blocs de code ou frontières de paragraphe claires.

Conscient des paragraphes

Divise aux frontières de paragraphe (doubles sauts de ligne), en gardant les paragraphes intacts quand possible.

Sémantique (par défaut)

La stratégie la plus sophistiquée. Respecte les titres, paragraphes, listes et frontières sémantiques naturelles. Suit une hiérarchie de priorité :

  1. Ne jamais diviser au milieu d'un bloc de code. Un extrait de code est atomique.
  2. Préférer diviser aux titres. Un titre marque le début d'un nouveau sujet.
  3. Préférer diviser aux frontières de paragraphe.
  4. Préférer diviser aux frontières de phrase.
  5. En dernier recours, diviser aux frontières de mots.

Conscient du code

Une stratégie spécialisée pour le code source et la documentation technique avec beaucoup de code. Reconnaît les définitions de fonctions, les définitions de classes/structures, les blocs d'imports et les commentaires.

Chevauchement entre chunks

Les chunks peuvent se chevaucher pour s'assurer que l'information aux frontières des chunks n'est pas perdue. Le chevauchement (50 caractères par défaut) signifie qu'une requête portant sur une phrase qui enjambe la frontière correspondra aux deux chunks.

Le compromis est le stockage. Un chevauchement de 200 caractères signifie environ 20 % de chunks et d'embeddings en plus. Pour la plupart des applications, ce coût est négligeable comparé à l'amélioration de la qualité des résultats de recherche.

Exemple pratique : indexer un site de documentation

flin// Indexation par lot de toute la documentation
docs_dir = ".flindb/documents/"
files = list_files(docs_dir)

total_chunks = 0

for file_path in files {
    parsed = parse_document(file_path)

    doc = Document {
        title: parsed.metadata.title || file_name(file_path),
        file_path: file_path,
        format: parsed.format,
        full_text: parsed.text
    }
    save doc

    chunks = chunk_text(parsed.text, {
        max_size: 500,
        overlap: 50,
        strategy: if file_path.ends_with(".md") { "code" } else { "semantic" }
    })

    for chunk in chunks {
        save DocumentChunk {
            document_id: doc.id,
            content: chunk.text,     // semantic text -- auto-embedded
            position: chunk.position,
            chunk_index: chunk.index
        }
    }

    total_chunks = total_chunks + chunks.len
    log_info("Indexé {file_path}: {chunks.len} chunks")
}

log_info("Total: {files.len} documents, {total_chunks} chunks")

Le découpage est le pont entre les documents bruts et les embeddings recherchables. Si vous le faites mal, votre système RAG retourne des résultats non pertinents quel que soit la qualité du modèle d'embedding ou du LLM. Si vous le faites bien, chaque chunk représente un morceau de connaissance focalisé et récupérable.

Dans le prochain article, nous explorons la recherche hybride de documents -- combinant la recherche par mots-clés BM25 avec la recherche sémantique pour le meilleur des deux mondes.


Ceci est la partie 122 de la série « Comment nous avons construit FLIN », documentant comment un CEO à Abidjan et un CTO IA ont conçu et construit un langage de programmation à partir de zéro.

Navigation de la série : - [121] Analyse de documents : PDF, DOCX, CSV, JSON, YAML - [122] Découpage conscient du code pour le RAG (vous êtes ici) - [123] Recherche hybride de documents : BM25 + sémantique - [124] Conception d'un langage IA-first

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude thales

Treize agents, quarante-trois minutes : la première session Workflow de Claude Fable 5, et ce qu'un script d'orchestration déterministe change aux builds multi-agents

Un prompt, treize agents, quarante-trois minutes : la première session de production avec Claude Fable 5 et l'outil Workflow de Claude Code a livré un site web de production complet de sept pages plus un endpoint backend de capture de leads, en un seul commit. Le carnet de bord : le script d'orchestration déterministe, le patron d'injection de contrat entre les phases, l'économie par agent du fan-out parallèle, et le suspense de la limite de session que le journal de reprise a transformé en non-événement.

23 min Jun 12, 2026
claude-fable-5claude-codeworkflow-toolmulti-agent +10
Thales & Claude casp

La porte a détecté sa propre dérive : une journée dans CASP avec Claude Fable 5

Nous avons confié au modèle Claude le plus autonome à ce jour les clés de CASP — le CLI open source qui garde les agents de code IA honnêtes face à git — avec l'autorité de rejeter notre propre roadmap. Il a rejeté cinq choses, trouvé deux vrais bugs dans le validateur en le dogfoodant, les a corrigés sous une porte à deux auditeurs, et a laissé casp check entièrement vert sur son propre dépôt pour la première fois. CASP 0.3.0 en est le résultat.

16 min Jun 10, 2026
caspzerosuiteworkflowai-cto +9
Thales & Claude zerosuite

La transplantation du CASP : comment la discipline des six fichiers est passée de Conductor à un ERP transport anti-fraude, ce que la compétence /next ajoute quand l'opérateur tape juste « next », et pourquoi le coût d'une dérive du CASP grimpe quand le projet, c'est l'argent des autres

La discipline du CASP qui a piloté trente-cinq sessions de Conductor est agnostique au produit. Le carnet de bord de sa transplantation sur KASSIA, un ERP transport anti-fraude pour un exploitant de flotte en Côte d'Ivoire : ce qui a migré, ce qui n'a pas migré (le validateur sur mesure — et ce que son absence coûte), ce que la compétence /next ajoute quand l'opérateur tape un seul mot, et là où le CASP s'arrête — le bug de déploiement qu'il ne pouvait pas voir parce qu'il enregistre l'intention, pas la réalité de l'infrastructure.

23 min Jun 8, 2026
kassiaerp-kassia-transport-logistiquezerosuiteCASP +15