Aller au contenu

Chunky - Kit d'outils RAG Chunking

Chunky - Kit d”outils RAG Chunking

Chunky est un kit d”outils open-source pour construire les pipelines d”ingestion RAG fiables, axé sur l”étape de chunking souvent négligée. Il convertit les PDFs en Markdown, nettoie les documents, vous permet d”inspecter les chunks et de comparer les stratégies de chunking côte à côte, et enrichit les métadonnées des chunks pour les applications LLM. Parce que la qualité de la récupération est plafonnée par la façon dont les documents sont divisés, la valeur de Chunky est de rendre l”étape de chunking visible et adaptable au lieu d”un défaut aveugle.

Installation

MéthodeCommande
pippip install chunky
uvuv add chunky
Depuis la sourcegit clone https://github.com/GiovanniPasq/chunky && cd chunky && pip install -e .
Vérifierpython -c "import chunky; print('ok')"

Étapes du pipeline

ÉtapeBut
ConvertirTransformer les PDFs/docs en Markdown propre
NettoyerSupprimer les boilerplate, corriger les artefacts
ChunkerDiviser le texte en utilisant une stratégie choisie
InspecterVisualiser les chunks résultants
ComparerExécuter plusieurs stratégies et comparer
EnrichirJoindre les métadonnées (en-têtes, source, position)

Convertir et nettoyer

import chunky

# Convertir un PDF en Markdown propre
md = chunky.to_markdown("report.pdf")

# Nettoyer les artefacts courants (en-têtes/pieds de page, coupures de mots, bruit)
md = chunky.clean(md)
FonctionDescription
to_markdown(path)Convertir un document en Markdown
clean(text)Supprimer les boilerplate et normaliser

Stratégies de chunking

StratégieDivise sur
Taille fixeN tokens/caractères avec chevauchement
RécursiveParagraphes → phrases → mots selon les besoins
Markdown / conscience des en-têtesStructure du document (#, ##, sections)
SémantiqueLimites de similitude d”intégration
Perfectionnement conscient des tokensFusionner les petits, diviser les grands chunks
chunks = chunky.chunk(
    md,
    strategy="header_aware",
    max_tokens=512,
    overlap=64,
    repeat_headers=True,   # transporter les en-têtes de section sur les divisions de tableau
)
for c in chunks:
    print(len(c.tokens), c.metadata["heading"])

Inspecter et comparer

Le différentiateur: voir et comparer ce que chaque stratégie produit avant de s”engager.

# Inspecter les limites des chunks et les tailles
chunky.inspect(chunks)            # tailles, chevauchements, limites

# Comparer les stratégies sur le même document
report = chunky.compare(
    md,
    strategies=["fixed", "recursive", "header_aware", "semantic"],
    max_tokens=512,
)
print(report)   # stats par stratégie: compte, distribution des tailles, fragmentation
FonctionAffiche
inspect(chunks)Distribution des tailles, chevauchement, limites
compare(text, strategies=[...])Métriques des stratégies côte à côte

Enrichissement des métadonnées

MétadonnéesUtiliser en récupération
Chemin de l”en-têteExpansion du contexte / filtrage
Source + pageCitations
Position/indexClassement et recherche de voisins
Nombre de tokensGestion du budget à l”heure du prompt
enriched = chunky.enrich(chunks, source="report.pdf")
# chaque chunk.metadata transporte maintenant le chemin d''en-tête, la page, la source, l''index

Flux de travail courants

# Bout en bout: PDF → Markdown propre → chunks conscients des en-têtes → enrichis
import chunky
md = chunky.clean(chunky.to_markdown("manual.pdf"))
chunks = chunky.chunk(md, strategy="header_aware", max_tokens=512, overlap=64)
chunks = chunky.enrich(chunks, source="manual.pdf")
# intégrer chunk.text, stocker chunk.metadata à côté dans votre vector DB
# Choisir une stratégie avec preuve, pas au hasard
print(chunky.compare(md, strategies=["recursive", "header_aware", "semantic"]))

Chunky vs Autres approches

AspectChunkySplitters par défaut du frameworkDocling
Comparaison des stratégiesPremière classeManuelLimité
Conversion + nettoyageIntégréSéparéIntégré
Meilleur pourAffiner l”étape de chunkingDémarrage rapideParse + chunk complet

Fonctionne bien avec Docling pour l”analyse et votre vector DB pour le stockage — le travail de Chunky est d”obtenir la division correcte.

Ressources