Zum Inhalt springen

Chunky - RAG Chunking Toolkit Spickzettel

Chunky - RAG Chunking Toolkit Spickzettel

Chunky ist ein Open-Source-Toolkit zum Erstellen zuverlässiger RAG-Ingestionspipelines, konzentriert auf die oft vernachlässigte Chunking-Phase. Es konvertiert PDFs zu Markdown, ermöglicht es dir, Chunks zu inspizieren und Chunking-Strategien nebeneinander zu vergleichen, und bereichert Chunk-Metadaten für LLM-Anwendungen. Da die Abrufqualität durch die Aufteilung von Dokumenten begrenzt ist, besteht der Wert von Chunky darin, den Chunking-Schritt sichtbar und abstimmbar zu machen, anstatt ihn als blindes Standard-Verfahren zu behandeln.

Installation

MethodeBefehl
pippip install chunky
uvuv add chunky
Aus Quellegit clone https://github.com/GiovanniPasq/chunky && cd chunky && pip install -e .
Überprüfungpython -c "import chunky; print('ok')"

Pipeline-Stufen

StufeZweck
ConvertPDFs/Dokumente in sauberes Markdown umwandeln
CleanBoilerplate entfernen, Artefakte beheben
ChunkText mit gewählter Strategie aufteilen
InspectResultierende Chunks visualisieren
CompareMehrere Strategien ausführen und vergleichen
EnrichMetadaten anfügen (Überschriften, Quelle, Position)

Konvertieren und Bereinigen

import chunky

# PDF in sauberes Markdown konvertieren
md = chunky.to_markdown("report.pdf")

# Häufige Artefakte bereinigen (Kopfzeilen/Fußzeilen, Silbentrennung, Rauschen)
md = chunky.clean(md)
FunktionBeschreibung
to_markdown(path)Dokument in Markdown konvertieren
clean(text)Boilerplate entfernen und normalisieren

Chunking-Strategien

StrategieTeilt auf
Fixed-sizeN Token/Zeichen mit Überlappung
RecursiveAbsätze → Sätze → Wörter bei Bedarf
Markdown / Header-AwareDokumentstruktur (#, ##, Abschnitte)
SemanticEmbedding-Ähnlichkeitsgrenzen
Token-Aware RefinementUntergeordnete zusammenführen, übergroße aufteilen
chunks = chunky.chunk(
    md,
    strategy="header_aware",
    max_tokens=512,
    overlap=64,
    repeat_headers=True,   # Abschnittskopfzeilen über Tabellensplits tragen
)
for c in chunks:
    print(len(c.tokens), c.metadata["heading"])

Inspizieren und Vergleichen

Der Unterschied: Sehe und vergleiche, was jede Strategie produziert, bevor du dich festlegst.

# Chunk-Grenzen und Größen inspizieren
chunky.inspect(chunks)            # Größen, Überlappungen, Grenzen

# Strategien am selben Dokument vergleichen
report = chunky.compare(
    md,
    strategies=["fixed", "recursive", "header_aware", "semantic"],
    max_tokens=512,
)
print(report)   # Pro-Strategie-Statistiken: Anzahl, Größenverteilung, Fragmentierung
FunktionZeigt
inspect(chunks)Größenverteilung, Überlappung, Grenzen
compare(text, strategies=[...])Nebeneinander-Strategie-Metriken

Metadaten-Anreicherung

MetadatenVerwendung bei Abruf
ÜberschriftspfadKontexterweiterung / Filterung
Quelle + SeiteZitierungen
Position/IndexReihenfolge und Nachbar-Suche
Token-AnzahlBudget-Verwaltung bei Eingabezeit
enriched = chunky.enrich(chunks, source="report.pdf")
# jeder chunk.metadata trägt jetzt Überschriftspfad, Seite, Quelle, Index

Häufige Workflows

# End-to-End: PDF → sauberes Markdown → Header-Aware Chunks → angereichert
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")
# chunk.text einbetten, chunk.metadata daneben im Vector DB speichern
# Strategie mit Belegen wählen, nicht nach Vermutung
print(chunky.compare(md, strategies=["recursive", "header_aware", "semantic"]))

Chunky vs Andere Ansätze

AspektChunkyFramework Standard SplitterDocling
Strategie-VergleichErste KlasseManuellBegrenzt
Konvertierung + BereinigungEingebautSeparateEingebaut
Am besten fürChunking-Phase abstimmenSchneller StartVollständige Parse + Chunk

Funktioniert gut mit Docling zum Parsen und deinem Vector DB zum Speichern — Chunkys Aufgabe ist es, die Aufteilung richtig zu machen.

Ressourcen