Wie implementiert man ein effektives 'Small-to-Big' Retrieval-Schema, bei dem Child-Chunks für die Suche und Parent-Chunks für die Generierung genutzt werden?

Die technische Umsetzung eines Small-to-Big Retrieval-Schemas basiert auf der Entkopplung von Indexierung und Kontextbereitstellung. Wir implementieren diesen Ansatz über eine hierarchische Datenstruktur, die in vier Schritten erfolgt:

  1. Hierarchisches Chunking: Ein Dokument wird zunächst in große Parent-Chunks (z. B. 1.000 bis 2.000 Token) unterteilt. Diese Parent-Chunks werden anschließend in kleinere Child-Chunks (z. B. 100 bis 200 Token) gesplittet.
  2. Vektorisierung und Indexierung: Nur die Child-Chunks werden in den Vektorraum eingebettet und in der Vektordatenbank gespeichert. Jeder Child-Chunk erhält ein Metadaten-Feld, das die eindeutige ID des zugehörigen Parent-Chunks enthält.
  3. Retrieval-Prozess: Die Ähnlichkeitssuche (Cosine Similarity) erfolgt ausschließlich auf der Ebene der Child-Chunks. Dies erhöht die Präzision, da kurze Textabschnitte eine schärfere semantische Signatur aufweisen als lange Texte.
  4. Kontext-Expansion: Sobald die relevantesten Child-Chunks identifiziert sind, nutzen wir die hinterlegten IDs, um die entsprechenden Parent-Chunks aus einem Key-Value-Store (z. B. Redis oder MongoDB) abzurufen. Diese Parent-Chunks bilden den finalen Kontext für das Large Language Model (LLM).

Die funktionale Aufteilung lässt sich wie folgt zusammenfassen:

KomponenteFunktionZiel
Child-ChunkVektorsucheMaximierung der Retrieval-Präzision
Parent-ChunkKontext-FeedSicherstellung der semantischen Vollständigkeit
Mapping-IDVerknüpfungEffizienter Zugriff auf den übergeordneten Kontext

Dieser Prozess erfordert ein präzises Data Engineering, um die Konsistenz zwischen den Chunk-Ebenen sicherzustellen und Latenzen beim Abruf der Parent-Dokumente zu minimieren.

Wir empfehlen, die Parent-Chunks nicht als statische Blöcke zu definieren, sondern ein dynamisches Windowing-Verfahren zu nutzen. Ein starres Parent-Child-Verhältnis führt oft zu Informationsverlust an den Chunk-Grenzen. Die technisch überlegene Lösung ist ein überlappendes Fenster, bei dem der Kontext dynamisch um den gefundenen Child-Chunk herum erweitert wird, anstatt auf vordefinierte Parent-Grenzen zu vertrauen.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt