Files
MtoRagSystem/PHASE_A_AUDIT.md
2026-02-22 13:51:45 +01:00

80 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Technische Projektdokumentation
## RAG-System Phase A Abschluss
**Projekt:** KI-RAG System
**Architekturstand:** Phase A abgeschlossen
**Datum:** Februar 2026
**Status:** Verbindliche Referenzdokumentation
---
# 1. Zielsetzung von Phase A
Phase A hatte das Ziel, das bestehende Retrieval-Augmented-Generation-System strukturell zu stabilisieren und produktionsreif zu machen.
Im Fokus standen:
- Speicherstabilität (Streaming statt RAM-Load)
- Deterministische Indexierung
- Strikte Trennung von Domain (PHP) und Runtime (Python)
- Zentrale Konfigurationssteuerung
- Drift-Sicherheit des Vector-Index
Phase A beinhaltete **keine funktionale Erweiterung**, sondern ausschließlich strukturelle und architektonische Stabilisierung.
---
# 2. Architekturprinzipien
Das System folgt folgenden verbindlichen Grundprinzipien:
1. **NDJSON ist Single Source of Truth**
Alle Vektoren werden deterministisch aus `index.ndjson` erzeugt.
2. **Full Rebuild statt inkrementeller Mutation**
Der FAISS-Index wird bei Änderungen vollständig neu aufgebaut.
3. **Streaming statt Full-RAM-Load**
Keine vollständigen JSON-Arrays im Speicher.
4. **Runtime und Domain sind strikt getrennt**
PHP enthält Orchestrierung und Governance, Python enthält Vektor-Runtime.
5. **Atomare Dateioperationen**
Schreibvorgänge erfolgen über `.tmp` + `rename()`.
6. **Konfigurationszentrierung**
Alle Pfade und Script-Referenzen sind über `services.yaml` parametriert.
---
# 3. Umsetzung Phase A
## A1 Streaming-Architektur
### Problem
RAM-basierte JSON-Verarbeitung hätte bei steigender Chunk-Zahl zu Speicherproblemen geführt.
### Umsetzung
- Einführung von NDJSON als persistentes Format
- Streaming-Verarbeitung in:
- `ChunkManager::streamAll()`
- `ChunkManager::countAllChunks()`
- `ChunkManager::compactByDocument()`
- `ChunkManager::rewriteAll()`
- Entfernung von `iterator_to_array` im IngestFlow
### Ergebnis
- Speicherverbrauch unabhängig von Chunk-Anzahl
- Stabil bis mindestens 120.000 Chunks
---
## A2 Strukturtrennung Runtime / Domain
### Umsetzung
Python-Runtime wurde vollständig aus `src/` entfernt und ausgelagert nach: