GraphRAG-Retrieval in Synapse messen
Acht paraphrasierte Anfragen gegen eine geseedete Neo4j-Fixture: Hit@1 88 %, MRR 0.92. Was Synapses Eval-Harness misst, und was es bewusst nicht behauptet.
Die meisten RAG-Projekte werden ausgeliefert, ohne Retrieval überhaupt zu
messen. Synapse bringt ein kleines Harness mit, backend/eval/, das aus
„fühlt sich grounded an“ Zahlen macht, die sich über Änderungen hinweg
verfolgen lassen. Diese Notiz dokumentiert, was gemessen wird und wie die
Ergebnisse zu lesen sind.
Aufbau
Das Harness seedet einen Fixture-Graphen nach Neo4j (15 Entitäten, 10
Relationen), führt für jede Anfrage den Produktions-Retrieval-Pfad aus
(retrieve_subgraph) und bewertet die zurückgegebenen Entitäten. Embeddings
werden lokal mit fastembed berechnet, das Ganze läuft also offline:
docker compose up -d neo4j
make eval # schreibt backend/eval/results.md
Die 8 Anfragen sind bewusst so paraphrasiert, dass sie keinerlei lexikalische Überlappung mit den Entitätsnamen haben. „Welche Technologie speichert Daten als verbundene Knoten und Kanten?“ muss Neo4j über Embedding-Ähnlichkeit erreichen; eine Stichwortsuche würde den Großteil des Sets verfehlen. Genau diese Eigenschaft wird getestet: Hybrides Retrieval (Vektor- und Volltext-Seeds, dann 1-Hop-Graph-Expansion) soll Paraphrase überleben.
Ergebnisse
| Metrik | Wert |
|---|---|
| Hit@1 | 88 % |
| Recall@8 | 100 % |
| Precision@8 | 17 % |
| MRR | 0.917 |
Hit@1 und MRR sind das Qualitätssignal: Bei 7 von 8 Anfragen ist die top-platzierte Entität eine korrekte, und jede Anfrage hat alle erwarteten Entitäten irgendwo in den Top 8. MRR ist der mittlere reziproke Rang, also der Durchschnitt von eins geteilt durch die Position der ersten korrekten Entität; 0.917 heißt, dass der erste Treffer fast immer ganz oben steht.
Precision@8 wirkt alarmierend, bis man sieht, dass sie konstruktionsbedingt niedrig ist. Die meisten Anfragen haben nur ein oder zwei relevante Entitäten, und der Retriever gibt 8 Kandidaten zurück, weil die UI eine Nachbarschaft hervorhebt, nicht einen einzelnen Knoten. Weniger Kandidaten zurückzugeben würde die Precision erhöhen und das Produkt verschlechtern.
Was hier nicht behauptet wird
Das ist eine Eval in Fixture-Größe: 8 Anfragen über einen Graphen mit 15 Entitäten. Sie fängt Regressionen im Retrieval-Pfad und validiert, dass Paraphrase den Weg durch die Embeddings übersteht, und genau das brauche ich von der CI. Über Retrieval-Qualität auf großen Graphen, verrauschten Extraktionen oder adversarialen Anfragen sagt sie nichts.
Sie erbt außerdem eine subtilere Schwäche des Entity-Level-Scorings selbst, aus der eine eigene Untersuchung wurde: Eine Scoring-Regel, die Entitätsnamen anrechnet, lässt sich von einem Retriever austricksen, der nichts anderes zurückgibt. Dieses Ergebnis, ein Null-Kontroll-Audit des Containment-Scorings mit Replikation auf HotpotQA und LightRAG, ist separat aufgeschrieben in dem Paper.