KI & Agents
RAGTokenisierungMarkdownRetrieval

Chunking für RAG – Textabschnitte mit genügend Kontext

Gutes Chunking für RAG trennt Dokumente entlang ihrer Struktur, erhält Überschriften und Warnhinweise im Kontext und prüft echte Token-Limits.

LKLukas Kopischke
Zuletzt aktualisiert am
Erstellt am

Deine Suche liefert den Satz „Der Link ist 30 Minuten lang gültig“ – aber im gefundenen Ausschnitt fehlt jeder Hinweis darauf, um welchen Link es überhaupt geht. Im Originaldokument stand zwei Sätze weiter oben die Überschrift „Passwort zurücksetzen“. Wie zerlegst du lange Dokumente so, dass jeder Treffer für sich allein verständlich bleibt?

Beim Chunking teilst du längere Dokumente vor dem Einbetten in kleinere, thematisch geschlossene Textabschnitte auf. Schneidest du zu grob, verschwimmen verschiedene Themen in einem einzigen Durchschnittsvektor; schneidest du blind nach Zeichenzahl, trennst du Überschriften, Voraussetzungen und Warnhinweise von der eigentlichen Anleitung. Statt nach einer magischen Standardgröße zu suchen, orientierst du die Schnittkanten an der Dokumentstruktur, gibst jedem Abschnitt seinen Überschriften-Kontext mit und misst die Länge direkt mit dem Tokenizer deines Modells.

Merksatz

Ein guter Chunk ist fokussiert genug für einen präzisen Vektortreffer und vollständig genug, um ohne den Rest des Dokuments keine falschen Schlüsse zuzulassen.

Was darf beim Schneiden niemals getrennt werden?

Jeder Chunk ist ein potenzielles Belegstück für den Leser oder ein nachgelagertes Sprachmodell. Fehlt im Textausschnitt die entscheidende Vorbedingung, entsteht selbst aus einem korrekten Dokument eine gefährliche Halbwahrheit:

  • Aussage und Bedingung zusammenhalten: In unserem deutschen Support-Datensatz enthält die MFA-Anleitung den wichtigen Hinweis: „Ein neues Passwort ersetzt den zweiten Faktor nicht.“ Wird dieser Satz beim Chunking abgetrennt, leitet der verbleibende Rest den Nutzer in die Irre.
  • Hierarchischen Kontext vererben: Ein Absatz, der nur mit „Gehe dazu in die Einstellungen…“ beginnt, ist ohne seine Kapitelüberschrift wertlos. Stelle dem Chunk beim Einbetten den Dokumenttitel und den aktuellen Überschriftenpfad (z. B. Konto > Sicherheit > Zweiten Faktor verloren) voran.
  • Metadaten am Chunk verankern: Speichere neben dem eingebetteten Text immer die document_id, die Abschnittsposition, die Produktversion (version) und den unveränderten Originaltext für die spätere Quellenanzeige.

Welche Chunking-Strategie passt zu welchem Inhalt?

StrategieWie wird getrennt?Wann ist das der beste Startpunkt?Wo liegt die typische Schwäche?
Feste Länge (Fixed-Size)Hart nach einer bestimmten Token- oder WortanzahlSchnelle Baseline für unstrukturierte Fließtexte ohne FormatierungZerreißt Sätze, Tabellen und zusammengehörige Bedingungen mitten im Gedanken
StrukturorientiertEntlang von Markdown-Headings (##, ###), HTML-Tags oder AbsätzenTechnische Dokumentation, Handbücher, Support-Artikel und WikisSehr lange Unterkapitel überschreiten das Token-Limit und müssen weiter geteilt werden
RekursivErst nach großen Strukturblöcken (Kapitel), bei Überlänge schrittweise nach Absatz und SatzGemischte Dokumentbestände mit unterschiedlich langen AbschnittenDie Qualität hängt stark von einer sauberen Hierarchie der Trennzeichen ab
SemantischSchneidet dort, wo die Embedding-Ähnlichkeit aufeinanderfolgender Sätze stark abfälltLange Transkripte oder Texte ohne verlässliche ZwischenüberschriftenHöherer Rechenaufwand beim Indexieren und zusätzliche Schwellenwert-Parameter

In der Praxis ist eine kombiniert strukturorientiert-rekursive Strategie für technische Dokumentation fast immer der robusteste Ausgangspunkt: Du respektierst vorhandene Überschriften und teilst nur jene Abschnitte weiter auf, die für das Modell zu lang sind. Die Weaviate-Dokumentation zu Chunking zeigt anschaulich, wie sich diese Ansätze auf Retrieval-Präzision und Kontextumfang auswirken.

Zeichenlimits schützen nicht vor Token-Abschnitt

Jedes Embedding-Modell besitzt ein hartes Eingabelimit (z. B. 512 Tokens bei multilingual-e5-base). Da die je nach Modell variiert und vorangestellte Überschriften oder Query-Präfixe mitzählen, schneiden viele Modelle überlange Chunks ab Token 513 kommentarlos ab. Prüfe die Länge daher immer mit dem echten Tokenizer des Modells.

Wann hilft Überlappung (Overlap) – und wann schadet sie?

Mit einem verhinderst du, dass ein Gedanke genau an einer künstlichen Längengrenze verloren geht. Das ist vor allem dann sinnvoll, wenn du einen langen Fließtext ohne Zwischenüberschriften rekursiv aufteilen musst.

Überlappung ist jedoch kein Heilmittel für unsaubere Dokumentgrenzen:

  • Keine Überlappung über Kapitelgrenzen hinweg: Wenn Kapitel A die „Kündigung des Tarifs“ und Kapitel B das „Endgültige Löschen des Kontos“ behandelt, darf ein Overlap beide Themen niemals in einen gemeinsamen Chunk mischen.
  • Duplikate im Retrieval beachten: Stark überlappende Chunks ähneln sich auch im Vektorraum. Ohne Deduplizierung auf Dokumentebene belegen sonst drei fast identische Ausschnitte desselben Artikels deine Top-k-Ergebnisliste.

Vergleiche im Zweifel immer einen Lauf ohne Overlap gegen einen Lauf mit moderatem Overlap (z. B. 10–15 % innerhalb desselben Kapitels) auf deinen echten Suchfragen.

Tabellen, Codeblöcke und mehrstufiger Kontext

Klassisches Text-Splitting scheitert zuverlässig an zwei Stellen: Tabellen und Quellcode. Eine einzelne Tabellenzeile wie | Pro | 49 € | 100 GB | ist ohne die Kopfzeile der Tabelle unbrauchbar, und ein mitten in der if-Bedingung zerschnittener Codeblock hilft keinem Entwickler.

Strukturtreue & Parent-Child-Kontext
  • Wiederhole bei aufgeteilten Tabellen in jedem Chunk die Spaltenüberschriften und relevante Einheiten.
  • Halte Codeblöcke samt Funktionssignatur und unmittelbarer Erklärung zusammen.
  • Nutze bei langen Texten Small-to-Big Retrieval: Suche präzise auf kleinen Absätzen, lade für die Antwort aber den übergeordneten Abschnitt (unter Beachtung derselben Zugriffsrechte) nach.
Blindes Zeichen-Splitting über alle Formate
  • Markdown-Tabellen oder JSON-Blöcke mitten in der Zeile nach 500 Zeichen hart abschneiden.
  • Absätze ohne ihren Kapitel- und Dokumenttitel einbetten.
  • Beim Nachladen größerer Nachbarabschnitte die Berechtigungs- oder Versionsgrenzen des Dokuments ignorieren.

Checkliste vor der Indexierung

  • Jeder Chunk trägt seinen Dokumenttitel und Überschriftenpfad sichtbar im eingebetteten Text oder als strukturiertes Kontextfeld.
  • Kein Chunk überschreitet inklusive Präfixen und Überschriften das maximale Token-Limit des verwendeten Embedding-Modells.
  • Tabellen behalten ihre Kopfzeilen, Codeblöcke bleiben syntaktisch zusammenhängend und Warnhinweise kleben an ihrer Handlungsanweisung.
  • Bei der Auswertung und Anzeige werden mehrere Chunks derselben Quelle sauber über ihre document_id zusammengeführt.

Quellen und nächste Schritte

Wie deine fertig geschnittenen Chunks über Vektoren durchsuchbar werden, erfährst du in Semantische Suche. Wie daraus schließlich ein sauber abgegrenzter Prompt-Kontext mit überprüfbaren Quellen wird, zeigt die Kachel RAG.