Wie implementiert man ein Parent-Document Retrieval-System, um die Balance zwischen präzisem Retrieval kleiner Chunks und ausreichendem Kontext für die Generierung zu wahren?

Die Implementierung eines Parent-Document Retrieval-Systems basiert auf der Entkopplung von Indexierung und Kontextbereitstellung. Wir trennen die Daten in zwei Hierarchieebenen: Child-Chunks für die Vektorsuche und Parent-Chunks für die LLM-Generierung.

KomponenteZweckGröße (Beispiel)Speicherort
Child ChunkPräzise semantische Suche100-200 TokensVector Store (Embeddings)
Parent ChunkKontext für das LLM500-1500 TokensDoc Store (Key-Value/NoSQL)

Der technische Workflow gliedert sich in folgende Schritte:

  1. Hierarchisches Splitting: Wir unterteilen das Quelldokument zunächst in größere Parent-Chunks. Diese bilden die logische Einheit für die Antwortgenerierung.
  2. Granulare Segmentierung: Jeder Parent-Chunk wird in mehrere kleinere Child-Chunks zerlegt. Diese dienen ausschließlich als Anker für die semantische Suche.
  3. Referenzierung: In der Vektordatenbank speichern wir die Embeddings der Child-Chunks zusammen mit einer eindeutigen ID, die auf den übergeordneten Parent-Chunk verweist.
  4. Retrieval-Logik: Bei einer Nutzeranfrage führen wir die Ähnlichkeitssuche über die Child-Chunks aus. Anstatt die gefundenen Fragmente direkt an das LLM zu übergeben, nutzen wir die referenzierten IDs, um die vollständigen Parent-Chunks aus dem Dokumentenspeicher abzurufen.

Dieser Prozess verhindert, dass das LLM aufgrund zu kurzer Textfragmente den Zusammenhang verliert, während die Suchpräzision durch die kleinen Child-Chunks hoch bleibt. Die Implementierung erfordert ein präzises Data Engineering, um die Synchronisation zwischen dem Vector Store und dem Doc Store sicherzustellen, insbesondere bei Updates oder Löschungen von Quelldokumenten.

Wir empfehlen, die Child-Chunks so klein wie möglich zu halten, um das Rauschen bei der Vektorsuche zu minimieren, während die Parent-Chunks eine feste Überlappung von 10-15 % aufweisen sollten. Die Wahl der Parent-Größe muss sich strikt am Kontextfenster des genutzten LLMs orientieren. Ein zu großer Parent-Kontext führt zu "Lost-in-the-Middle"-Effekten, weshalb wir eine strikte Begrenzung auf maximal drei Parent-Chunks pro Prompt raten, um die Antwortqualität stabil zu halten.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt