2026-02-26 17:43:22 +01:00
2026-02-11 14:15:08 +01:00
2026-02-23 11:47:05 +01:00
2026-02-26 10:29:50 +01:00
2026-02-17 16:14:37 +01:00
2026-02-26 17:43:22 +01:00
2026-02-26 07:02:07 +01:00
2026-02-18 11:41:58 +01:00
2026-02-25 09:23:02 +01:00
2026-02-22 13:51:45 +01:00
2026-02-22 13:51:45 +01:00
2026-02-23 21:02:55 +01:00
2026-02-25 09:23:02 +01:00

RAG-System Technische Projektdokumentation

Version: 1.0
Stand: Februar 2026
Autor: mitho
Status: Verbindliche Referenzarchitektur (System Freeze)


1. Ziel des Systems

Das RAG-System dient der deterministischen, governance-stabilen Beantwortung von Nutzeranfragen auf Basis versionierter, kontrollierter Wissensquellen.

Grundprinzip:

„Wir nutzen KI nicht, um kreativ zu raten, sondern um verlässlich auf Basis Ihres Wissens zu antworten.“

Das System kombiniert:

  • Versionierte Dokumentverwaltung
  • Deterministisches Chunking
  • NDJSON als Single Source of Truth
  • Vollständigen FAISS-Rebuild
  • Hybrid Retrieval (Keyword + Vector + Tag)
  • Job-basierte Orchestrierung
  • Rollen- und Guardrail-Architektur
  • SSE-Streaming

2. Architekturüberblick

2.1 Systemebenen

1. Admin-Ebene (Symfony Backend)

  • Dokumentverwaltung
  • Versionierung
  • Tag-Management
  • Job-Steuerung
  • System-Prompt-Verwaltung
  • KI-Endpoint-Konfiguration

2. Wissensebene

  • Dokumente (immutable)
  • DocumentVersion
  • Chunks
  • index.ndjson
  • index_meta.json

3. Vector-Ebene (Python)

  • Embedding-Modell (lokal)
  • FAISS-Index (Chunks)
  • FAISS-Index (Tags)
  • Persistenter Vector-Service
  • CLI-Fallback

4. Agent-Ebene

  • Retrieval-Fusion
  • PromptBuilder
  • SSE-Streaming
  • Chat-History-Verarbeitung

3. Dokumentenarchitektur

3.1 Primärquellen

  • Dokumente sind immutable.
  • Jede Änderung erzeugt eine neue DocumentVersion.
  • Pro Dokument existiert genau eine aktive Version.

3.2 Aktivierungsprozess

  1. Aktivierung einer Version
  2. Erstellung eines IngestJob
  3. Async-Start:
    bin/console mto:agent:ingest:run <jobId>
    
  4. IngestOrchestrator:
    • Guardrail-Validierung
    • NDJSON Compaction by document_id
    • Chunking
    • Streaming Append
    • Vollständiger FAISS-Rebuild
    • index_meta.json Update
    • Status COMPLETED/FAILED

4. NDJSON-Architektur

4.1 index.ndjson (Single Source of Truth)

  • Streamingfähiges Format
  • Kein JSON-Array
  • Append-only mit Compaction
  • Keine vollständige RAM-Verarbeitung
  • Atomare Datei-Switches (.tmp → rename)

4.2 index_meta.json

Enthält:

  • index_version
  • embedding_model
  • embedding_dimension
  • chunk_size
  • overlap
  • scoring_version
  • index_format

Guardrail-Mechanismus

Bei strukturellen Änderungen (Embedding, Chunking, Scoring):

  • Lokaler Ingest wird blockiert
  • Global Reindex erforderlich

5. Chunk-Management

Verantwortlich: ChunkManager

Eigenschaften:

  • Streaming-basiertes Schreiben
  • Deterministische Reproduktion
  • Hard Limit: 120.000 Chunks
  • Warnlimit: 100.000 Chunks
  • Kein vollständiger JSON-RAM-Load

6. Vector-Architektur

6.1 Betriebsmodi

A) Persistenter Vector-Service (bevorzugt)

  • Lädt Embedding-Modell einmal
  • Lädt FAISS-Indizes in RAM
  • REST-Endpunkte:
    • /search-chunks
    • /search-tags

B) CLI-Fallback

  • Python-Skripte
  • Wird genutzt, falls Service nicht verfügbar ist

6.2 Rebuild-Strategie

  • Immer vollständiger FAISS-Rebuild
  • Kein inkrementelles Patchen
  • Atomarer Index-Switch
  • Deterministisch und drift-sicher

7. Hybrid Retrieval

7.1 Retrieval-Komponenten

  1. Keyword-Retrieval (führend)
  2. FAISS-Chunk-Retrieval (ergänzend)
  3. Tag-Routing (Soft-Gate)

7.2 Score-Fusion

  • Keyword hat Priorität
  • Vector ergänzt semantische Nähe
  • Tags dienen als Routing-Verstärker

8. Tag-System

8.1 Entities

  • Tag
  • DocumentTag
  • TagRebuildJob

8.2 Trigger-Logik

Ein Rebuild wird ausgelöst bei:

  • Tag-Erstellung
  • Tag-Löschung
  • Tag-Zuweisung
  • Tag-Entfernung

8.3 Job-Mechanik

  • Async-Start via:
    php bin/console mto:agent:tags:job:run <jobId>
    
  • Logfile unter:
    var/log/tags/job_<uuid>.log
    

8.4 Stale-Protection

  • QUEUED-Jobs älter als 5 Minuten → FAILED
  • System kann nicht dauerhaft blockieren
  • Coalescing (max. 1 aktiver Job)

8.5 Tag-Index

  • tags.ndjson
  • vector_tags.index
  • Vollständiger Rebuild bei Änderung

9. Job-Architektur

Statusmodell:

  • QUEUED
  • RUNNING
  • COMPLETED
  • FAILED

Eigenschaften:

  • Async exec
  • LockService gegen Parallel-Ausführung
  • Self-Healing gegen blockierte Jobs
  • Logging pro Job

10. Governance & Guardrails

10.1 Rollen

  • Super Admin
  • Knowledge Admin
  • Redaktion
  • Frontend-User

10.2 Schutzmechanismen

  • Dokumente immutable
  • Keine manuelle Chunk-Manipulation
  • Versionierte Ingest-Profile
  • Versionierte System-Prompts
  • Konfigurierbare KI-Endpunkte
  • Logging & Audit-Fähigkeit

11. Agent-Architektur

  • SSE-Streaming
  • Historienverarbeitung korrekt implementiert
  • Deterministischer PromptBuilder
  • Retrieval-Kontext explizit eingebettet
  • Kein Think-Mode-Leak

12. Skalierbarkeit

Zielgröße:

  • 120.000 Chunks

Ermöglicht durch:

  • NDJSON Streaming
  • Kein Full-RAM-JSON
  • Vollständiger FAISS-Rebuild
  • Persistenter Vector-Service
  • Atomare Switches
  • Locking-Mechanismen

13. Stabilitätsstatus (Freeze-Zustand)

Bereich Status
Dokument-Ingest Stabil
NDJSON-Architektur Enterprise-Stabil
FAISS-Rebuild Deterministisch
Tag-System Stabil mit Stale-Recovery
Async-Jobs Blockiersicher
Retrieval-Fusion Funktional
SSE Stabil
Governance Aktiv

14. System-Freeze-Definition

Dieses Dokument definiert den verbindlichen Referenzstand des Systems.

Ab diesem Punkt gilt:

  • Keine strukturellen Änderungen ohne explizite Freigabe.
  • Erweiterungen nur inkrementell.
  • Keine Architektur-Rewrites.
  • Determinismus und Reproduzierbarkeit sind oberstes Prinzip.

15. Zusammenfassung

Das System ist:

  • deterministisch
  • drift-sicher
  • governance-konform
  • skalierbar
  • blockiersicher
  • debugbar
  • enterprise-ready

Es erfüllt die Anforderungen an ein kontrolliertes, reproduzierbares RAG-System mit klarer Trennung zwischen Wissensquelle, Index, Retrieval und Generierung.

Description
No description provided
Readme 26 MiB
Languages
PHP 79%
Twig 13%
HTML 2.8%
Python 2.4%
JavaScript 1.8%
Other 1%