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éthode | Commande |
|---|
| pip | pip install chunky |
| uv | uv add chunky |
| Depuis la source | git clone https://github.com/GiovanniPasq/chunky && cd chunky && pip install -e . |
| Vérifier | python -c "import chunky; print('ok')" |
Étapes du pipeline
| Étape | But |
|---|
| Convertir | Transformer les PDFs/docs en Markdown propre |
| Nettoyer | Supprimer les boilerplate, corriger les artefacts |
| Chunker | Diviser le texte en utilisant une stratégie choisie |
| Inspecter | Visualiser les chunks résultants |
| Comparer | Exécuter plusieurs stratégies et comparer |
| Enrichir | Joindre 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)
| Fonction | Description |
|---|
to_markdown(path) | Convertir un document en Markdown |
clean(text) | Supprimer les boilerplate et normaliser |
Stratégies de chunking
| Stratégie | Divise sur |
|---|
| Taille fixe | N tokens/caractères avec chevauchement |
| Récursive | Paragraphes → phrases → mots selon les besoins |
| Markdown / conscience des en-têtes | Structure du document (#, ##, sections) |
| Sémantique | Limites de similitude d”intégration |
| Perfectionnement conscient des tokens | Fusionner 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
| Fonction | Affiche |
|---|
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ées | Utiliser en récupération |
|---|
| Chemin de l”en-tête | Expansion du contexte / filtrage |
| Source + page | Citations |
| Position/index | Classement et recherche de voisins |
| Nombre de tokens | Gestion 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
| Aspect | Chunky | Splitters par défaut du framework | Docling |
|---|
| Comparaison des stratégies | Première classe | Manuel | Limité |
| Conversion + nettoyage | Intégré | Séparé | Intégré |
| Meilleur pour | Affiner l”étape de chunking | Démarrage rapide | Parse + 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