Salta ai contenuti

Chunky - Cheatsheet Toolkit RAG Chunking

Chunky - Cheatsheet Toolkit RAG Chunking

Chunky è un toolkit open-source per costruire pipeline di ingestione RAG affidabili, focalizzato sulla stage di chunking spesso trascurata. Converte PDF a Markdown, pulisce documenti, ti consente di ispezionare i chunk e confrontare le strategie di chunking fianco a fianco, e arricchisce i metadati dei chunk per le applicazioni LLM. Poiché la qualità del retrieval è limitata da come i documenti vengono divisi, il valore di Chunky è rendere lo stage di chunking visibile e sintonizzabile invece di un default cieco.

Installazione

MetodoComando
pippip install chunky
uvuv add chunky
Da sourcegit clone https://github.com/GiovanniPasq/chunky && cd chunky && pip install -e .
Verificapython -c "import chunky; print('ok')"

Stage Pipeline

StageScopo
ConvertTrasforma PDF/doc in Markdown pulito
CleanRimuovi boilerplate, ripara artefatti
ChunkDividi testo usando una strategia scelta
InspectVisualizza i chunk risultanti
CompareEsegui multiple strategie e confronta
EnrichAllega metadati (intestazioni, sorgente, posizione)

Convert & Clean

import chunky

# Converti un PDF a Markdown pulito
md = chunky.to_markdown("report.pdf")

# Pulisci artefatti comuni (intestazioni/footer, sillabazione, rumore)
md = chunky.clean(md)
FunzioneDescrizione
to_markdown(path)Converti un documento a Markdown
clean(text)Elimina boilerplate e normalizza

Strategie di Chunking

StrategiaDivide su
Fixed-sizeN token/caratteri con overlap
RecursiveParagrafi → frasi → parole come necessario
Markdown / header-awareStruttura documento (#, ##, sezioni)
SemanticLimiti di somiglianza dell”embedding
Token-aware refinementMerge undersized, dividi oversized chunk
chunks = chunky.chunk(
    md,
    strategy="header_aware",
    max_tokens=512,
    overlap=64,
    repeat_headers=True,   # trasporta intestazioni di sezione attraverso split di tabella
)
for c in chunks:
    print(len(c.tokens), c.metadata["heading"])

Inspect & Compare

Il differenziatore: vedi e confronta cosa ogni strategia produce prima di committere.

# Ispeziona i limiti dei chunk e le dimensioni
chunky.inspect(chunks)            # dimensioni, overlap, limiti

# Confronta strategie sullo stesso documento
report = chunky.compare(
    md,
    strategies=["fixed", "recursive", "header_aware", "semantic"],
    max_tokens=512,
)
print(report)   # statistiche per-strategia: conteggio, distribuzione dimensioni, frammentazione
FunzioneMostra
inspect(chunks)Distribuzione dimensioni, overlap, limiti
compare(text, strategies=[...])Metriche di strategie fianco a fianco

Arricchimento Metadati

MetadatoUso in retrieval
Heading pathEspansione contesto / filtraggio
Source + pageCitazioni
Position/indexOrdinamento e ricerca vicino
Token countBudget management al prompt time
enriched = chunky.enrich(chunks, source="report.pdf")
# ora ogni chunk.metadata trasporta heading path, page, source, index

Flussi di Lavoro Comuni

# End-to-end: PDF → Markdown pulito → chunk header-aware → arricchito
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")
# embed chunk.text, archivia chunk.metadata insieme nel tuo vector DB
# Scegli una strategia con evidenza, non col caso
print(chunky.compare(md, strategies=["recursive", "header_aware", "semantic"]))

Chunky vs Altri Approcci

AspettoChunkyFramework default splittersDocling
Confronto StrategiaFirst-classManualeLimitato
Conversion + cleanBuilt-inSeparatoBuilt-in
Migliore perSintonizzare lo stage di chunkingQuick startParse + chunk completo

Funziona bene con Docling per il parsing e il tuo vector DB per l”archiviazione — il lavoro di Chunky è ottenere la divisione giusta.

Risorse