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
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>
3.2 KiB
3.2 KiB
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:
- Embedding —
bge-m3(1024-dim) über Ollama, Query auf 2000 Zeichen gekappt. - Hybrid (RRF) —
searchHybrid(): dense + Volltext via Qdrant Query-API, RRF-Fusion. Fällt bei Fehler aufsearchDense()(reine Vektorsuche) zurück. - Binding-Augmentation —
searchBinding(): zieht die Top-source_class=binding_law-Treffer dazu, damit die Pflichtquelle immer Kandidat ist, auch wenn Guidance semantisch dominiert. - Control-Augmentation —
searchControls(): nur bei Control-Intent (siehe 05); tiefer dense-Pull, gefiltert auf Control-Pool-Rollen. - Graph-Augmentation —
expandViaGraph(): opt-in; zieht verbundene Normen über Zitations-Kanten. - Merge —
mergeDedupHits(): 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 ~8–9 — 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.go→searchInternal(),mergeDedupHits()legal_rag_http.go→searchHybrid(),searchDense(),searchBinding(),searchControls()legal_rag_graph.go→expandViaGraph()
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.