Chunking (Phase 2-3)
Ziel
Der gespeicherte Volltext wird in explizite Struktureinheiten zerlegt und daraus technisch handhabbare Verarbeitungseinheiten (Chunks) erzeugt. Chunking ist eine technische Maßnahme, keine semantische Interpretation.
Phase 2: Strukturelle Zerlegung
Seitenzerlegung
- Text wird in Seiten zerlegt (sofern Ursprungsformat Seiten kennt)
- Eindeutige und stabile Seitenreihenfolge
- Jede Seite erhält: Seiten-ID, Position, Dokument-Referenz
Semantische Abschnitte
- Kapitel und Überschriftenbereiche
- Logisch zusammenhängende Sinnblöcke
- Erkennung über explizite Überschriftenstrukturen und formale Marker
Phase 3: Chunk-Erzeugung
Chunking-Regeln
| Parameter | Wert | Beschreibung |
|---|---|---|
| chunk_size | 500-800 Token | Zielgröße pro Chunk |
| overlap | 50-100 Token | Überlappung für Kontextstabilisierung |
| max_embed_chars | 800 Zeichen | Limit für mxbai-embed-large |
Erzeugungsregeln
- Jeder Chunk entsteht aus genau einem Abschnitt
- Ein Abschnitt kann mehrere Chunks erzeugen
- Kein Chunk überschreitet Abschnittsgrenzen
- Erhalt vollständiger Sätze
Semantische Rolle
Jedem Chunk wird eine semantische Rolle zugewiesen:
- Fließtext
- Definition
- Aufzählung
- Beispiel
- Sonstiges
Chunk-Metadaten
- Stabile Chunk-ID (unabhängig von Speicherung in anderen Systemen)
- Referenz auf Dokumenten-ID und Abschnitts-ID
- Positionsangabe innerhalb des Abschnitts
- Vollständiger Chunk-Text
- Token-Count und Heading-Path
Beteiligte Komponenten
| Komponente | Pfad | Funktion |
|---|---|---|
| chunk_document() | pipeline/chunk.py | Chunking-Logik |
| chunks-Tabelle | ki_content.chunks | Chunk-Speicherung (SQL = Source of Truth) |
Datenbank-Schema
chunks: id, document_id, section_id, chunk_index, content, token_count, heading_path, semantic_role, metadata, qdrant_id, created_at
Prüfbedingungen für Supervision
- Jeder Chunk ist exakt einem Abschnitt zugeordnet
- Kein Chunk überschreitet Abschnittsgrenzen
- Chunk-Erzeugung ist reproduzierbar bei identischem Input
- Alle Chunks sind in der SQL-Datenbank vollständig gespeichert (nicht nur in Qdrant!)