Seit zwei Jahren betreiben wir einen Vektorstore-basierten Retriever für technische Fragen über Pre-Construction-Dokumente. Er ist schnell, einfach und — bei den Fragen, die unsere Nutzer wirklich stellen — frustrierend mittelmäßig. Diese Notiz beschreibt das Experiment, das uns dazu gebracht hat, mit dem Streiten aufzuhören: ein Head-to-head zwischen Embedding-Ähnlichkeit und Graph-RAG auf einem Korpus von einundvierzigtausend Absätzen, die mindestens eine DIN-Norm zitieren, ausgewertet an einem handgebauten Set von 312 Fragen, gestaffelt nach Reasoning-Tiefe.1
Das Ergebnis ist nicht subtil. Vektor-Retrieval gewinnt bei flachen faktischen Lookups — wir nennen sie „1-Hop"-Fragen — und verliert, manchmal katastrophal, bei allem, was die Verbindung von zwei oder mehr Entitäten erfordert. Bei 3-Hop-Fragen („Welche Mängel, von welchem Bauleiter auf Projekt X gemeldet, haben ihre Frist überschritten?") ist der Embedding-Retriever im Wesentlichen Rauschen.
Der Aufbau
Der Korpus ist ein kuratierter Ausschnitt aus unserem internen Projektsteuerer-Protokollarchiv: 41.213 Absätze aus Jour-fixe-Protokollen, Vergabevermerken und Bauprotokollen, jeweils mit mindestens einer DIN-Referenz versehen (DIN 276, DIN 18960, DIN EN 1990, etc.). Die Absätze wurden nach Retrieval-Dichte ausgewählt — kurze Prosa mit mindestens drei benannten Entitäten und mindestens einer Verpflichtung. Die Graph-Version desselben Korpus ist das v0.4-Schema, das in Eintrag № 024 beschrieben wird, mit einem Knoten pro Entitäts-Erwähnung und typisierten Kanten, aufgelöst durch unseren Entity-Linker.
Das Frageset wurde von zwei Engineers und einem Projektsteuerer in einer Woche gebaut. Jede Frage ist mit ihrer Hop-Tiefe annotiert:
- 1-Hop (96 Fragen): „Was fordert DIN 18960 §4.2 zur Barrierefreiheit von Treppen?"
- 2-Hop (124 Fragen): „Welche Mängel auf BV Riemerschmidt zitieren DIN 18960?"
- 3-Hop (92 Fragen): „Welches Gewerk hat pro Projektsteuerer auf Projekten in Bayern die meisten überfälligen Aufgaben?"
Beide Retriever bekamen denselben Downstream-LLM (Claude 3.5 Sonnet, Temperatur 0) und dieselbe Antwort-Auswertungspipeline (exakte Übereinstimmung für Faktantworten, LLM-as-Judge mit Rubrik für analytische Antworten, beide Auswerter blind gegenüber der Retriever-Identität).
Warum die Lücke existiert
Zwei Fehlerarten erklären fast alle Verluste des Vektor-Retrievers bei Multi-Hop-Anfragen.
Die erste ist „Anker neben dem Ziel". Embeddings sind extrem gut darin, Absätze zu finden, die aussehen wie die Anfrage — gleiche DIN-Referenz, gleiches Gewerk-Vokabular, gleicher Zahlenbereich — und extrem schlecht darin, Absätze zu finden, die eine Entität mit der Anfrage teilen. Wenn man fragt „Welche Mängel auf Projekt X zitieren DIN 18960?", liefert ein Vektor-Retriever fröhlich zehn Absätze über DIN 18960 aus irgendeinem Projekt, weil sie wie die Anfrage klingen. Ein Graph-Retriever kann nach dem Projekt-Knoten einschränken und nur den relevanten Subgraphen zurückgeben.2
Die zweite sind „abgerissene Ketten". 3-Hop-Fragen erfordern implizit das Durchlaufen typisierter Beziehungen: Projektsteuerer → managed → Projekt → contains → Prüfgegenstand → assigned_to → Gewerk. Vektor-Retrieval kennt keine typisierten Beziehungen; es liefert Absätze und hofft, dass das LLM die Kette rekonstruiert. Das LLM, in unserer Erfahrung, tut das nicht.
„Embedding-Ähnlichkeit ist ein Werkzeug, um Absätze zu finden, die wie eine Anfrage klingen. Eine Anfrage ist selten ein Absatz. Genau diese Diskrepanz ist der Grund, warum wir immer wieder Graphen brauchen."
Wo Vektor gewinnt
Es ist 2026 in Mode, Graph-RAG-Triumph-Posts zu schreiben. Wir versuchen, einen etwas ehrlicheren zu schreiben. Vektor-Retrieval schlägt den Graph an drei Stellen weiterhin:
- Cold-Start-Korpora. Die Graph-Version des Korpus erforderte vier Engineer-Wochen Entity-Linking und Kanten-Typisierung. Die Vektor-Indizierung war an einem Nachmittag fertig.
- Schema-fremde Fragen. Wenn ein Nutzer etwas fragt, das das Schema nicht zu typisieren weiß — „Finde mir poetische Beschreibungen schlechten Wetters in den täglichen Bauprotokollen" — gibt der Graph-Retriever nichts zurück. Der Vektor-Retriever liefert plausible Kandidaten, auch wenn sie falsch sind.
- Latenz im Kleinen. Bei 1-Hop-Anfragen antwortet unser Vektor-Retriever in 80 ms p50, der Graph-Retriever in 240 ms p50. Für interaktive Nutzung ist das relevant.
Unser Produktionssystem ist nun hybrid. Der Router klassifiziert eine Anfrage nach geschätzter Hop-Tiefe (ein kleiner feingetunter Klassifikator, F1 0,91 auf einem Hold-out-Set) und routet zu Vektor bei 1-Hop und zu Graph bei 2+. Unten die Routing-Regel, kürzer als die Diskussion, die sie hervorgebracht hat:
def route(query: str) -> Retriever:
depth = depth_classifier.predict(query)
if depth == 1: return vector_retriever
if depth >= 2: return graph_retriever
if confidence(depth) < 0.7: return ensemble(vector, graph)
return graph_retriever
Zweite Abbildung: Woher die Lücke kommt
Eine Möglichkeit, den Unterschied zu verstehen, ist, Recall als Funktion der Anzahl unterschiedlicher Entitäten in der Goldantwort zu plotten. Der Recall des Vektor-Retrievers fällt linear ab. Der Graph-Recall hält sich, bis er an der Schemagrenze (Entitäten, an denen der Linker gescheitert ist) abrupt einbricht.
Was wir als Nächstes tun
Drei offene Stränge:
- Schema-bewusste Embeddings. Trainieren eines Sentence-Encoders, der unsere Entitätstypen kennt, sodass „DIN 18960" und „DIN 18960 §4.2 Treppen" eng beieinander, aber unterscheidbar einbetten. Erste Ergebnisse legen nahe, dass das etwa ein Drittel der 2-Hop-Lücke schließt.
- Hybrid-Scoring. Statt eines harten Routers jeden Retrieval-Kandidaten mit beiden Retrievern bewerten und kombinieren. Langsamer, aber robuster bei Grenzfragen.
- Besserer Tiefen-Klassifikator. Die aktuellen 91 % sind irreführend; er versagt vorhersehbar bei Fragen, die wie 1-Hop formuliert sind, aber in der Goldantwort 2-Hop-Traversierung erfordern.
Der Benchmark und die Eval-Harness werden zusammen mit Eintrag № 022 zu Schema-Drift veröffentlicht. Den Datensatz halten wir zurück, bis unsere Kunden der Veröffentlichung der redigierten Bauprotokolle zustimmen, die ihn untermauern.
— V. T., München, 14. April 2026.