Files
breakpilot-compliance/docs-src/architecture/01-retrieval.md
T
Benjamin Admin a3053c3c86
CI / detect-changes (push) Successful in 14s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / build-sha-integrity (push) Successful in 9s
CI / validate-canonical-controls (push) Successful in 19s
CI / loc-budget (push) Successful in 23s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Has been skipped
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Has been skipped
CI / test-python-document-crawler (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
docs(architecture): RAG retrieval engine architecture set (01-09)
9 docs + index in docs-src/architecture/ documenting the deterministic
retrieval engine: retrieval pipeline, authority rerank, source_class,
source_role, control-intent + diversity, assessment, confidence,
explainability + supersede, framework_* layer. Each doc carries the exact
constants, the rationale behind them, code refs, and the failure class
it addresses. Audit/onboarding reference.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-25 09:25:22 +02:00

3.2 KiB
Raw Blame History

01 — Retrieval-Pipeline

Zweck: Einen Kandidaten-Pool bauen, der die richtigen Quellen enthält (Pflichtquelle und Controls) — auch dann, wenn reine Semantik sie verfehlen würde. Re-Ranking (02) kann nur ordnen, was im Pool liegt; deshalb ist der Pool-Aufbau die erste Verteidigungslinie gegen Recall-Lücken.

Mechanik

searchInternal() (legal_rag_client.go) orchestriert den Pool in fester Reihenfolge — jede Stufe augmentiert (ersetzt nie), Fehler degradieren still:

  1. Embeddingbge-m3 (1024-dim) über Ollama, Query auf 2000 Zeichen gekappt.
  2. Hybrid (RRF)searchHybrid(): dense + Volltext via Qdrant Query-API, RRF-Fusion. Fällt bei Fehler auf searchDense() (reine Vektorsuche) zurück.
  3. Binding-AugmentationsearchBinding(): zieht die Top-source_class=binding_law-Treffer dazu, damit die Pflichtquelle immer Kandidat ist, auch wenn Guidance semantisch dominiert.
  4. Control-AugmentationsearchControls(): nur bei Control-Intent (siehe 05); tiefer dense-Pull, gefiltert auf Control-Pool-Rollen.
  5. Graph-AugmentationexpandViaGraph(): opt-in; zieht verbundene Normen über Zitations-Kanten.
  6. MergemergeDedupHits(): konkateniert, behält die erste Vorkommnis je Punkt-ID, Reihenfolge erhalten.

Danach: Map auf LegalSearchResult → Authority-Rerank (02) → Control-Diversity (05) → Truncate auf topK.

Konstanten + Warum

Konstante Wert Warum
prefetchLimit (hybrid) 20, bzw. topK*4 bei topK>20 Fusion-Fenster: genug dense-Kontext für RRF, ohne den Volltext-Anteil zu verwässern
controlPoolDepth 60 Gemessen: für EU-Cyber-Control-Queries liegen die relevanten Control-Quellen (NIST, CRA-Anhang) bei dense-Rang ~89 — weit unter dem kleinen top-K. Auf dem größeren (95k) synced Korpus reicht ein fixer Tiefen-Pull von 60, um sie zum Kandidaten zu machen
graphSeedCount 5 nur die Top-Hits als Graph-Saat (Begrenzung der Expansion)
graphMaxExpand 15 Obergrenze der über Kanten gezogenen Normen
graphHopPenalty 0.05 leichte Distanz-Strafe pro Kante (Pool-Expansion, kein Ranking-Hebel)
RAG_GRAPH_EXPANSION env, default aus Opt-in: kein gemessener Rang-Nutzen ggü. der Binding-Augmentation, +1 Qdrant-Call/Suche, Flutungsrisiko über Reverse-Kanten. Bleibt als Recall-Sicherheitsnetz

Forward-Kanten (references_out) treiben die Graph-Expansion; Reverse-Kanten (references_in) werden nur als Metadaten geführt (sonst flutet ein populärer Anhang den Pool).

Code

  • legal_rag_client.gosearchInternal(), mergeDedupHits()
  • legal_rag_http.gosearchHybrid(), searchDense(), searchBinding(), searchControls()
  • legal_rag_graph.goexpandViaGraph()

Adressierte Fehlerklassen

  • „Pflichtquelle nicht im Pool" → Binding-Augmentation (Stufe 3) garantiert die binding_law-Quelle als Kandidat.
  • „Control-Quelle unter top-K" → Control-Augmentation + controlPoolDepth (Stufe 4) holt tiefliegende NIST/CRA-Anhang-Treffer.
  • „Recall-Lücke bei Synonymen" → Hybrid (RRF) deckt lexikalische Treffer ab, die rein semantisch fehlen.