add new md files

This commit is contained in:
team 1
2026-02-16 09:38:40 +01:00
parent c0b90c9dfd
commit 413c76d710
3 changed files with 608 additions and 690 deletions

368
TECHNICAL_ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,368 @@
# TECHNICAL_ARCHITECTURE.md
mitho AI Agent Enterprise Hybrid RAG System
Stand: Februar 2026
---
# 1. Zielsetzung
Diese Dokumentation beschreibt die vollständige technische Architektur des
mitho AI Agent RAG-Systems.
Ziele:
- Deterministisches Retrieval
- Governance-stabile Index-Struktur
- Versionierte Wissensbasis
- Reproduzierbare Builds
- Keine inkrementellen Vektor-Mutationen
- Job-basierte, asynchrone Ingest-Architektur
- Skalierbarkeit >200k Chunks
---
# 2. Architektur-Übersicht
Systemebenen:
1. Admin Layer (Symfony)
2. Ingest Layer
3. Storage Layer (NDJSON)
4. Vector Layer (FAISS)
5. Retrieval Layer (Hybrid)
6. Application Layer (LLM + SSE)
---
# 3. Core Architekturprinzipien
## 3.1 Determinismus
Gleiche Eingabe + gleiche Konfiguration → identisches Ergebnis.
- index.ndjson ist deterministisch
- FAISS wird vollständig neu gebaut
- Retrieval ist stabil reproduzierbar
- Keine impliziten Indexveränderungen
## 3.2 Governance
- Genau eine aktive Version pro Dokument
- Keine Inline-Rebuilds im HTTP-Request
- Strukturänderungen erzwingen Global Reindex
- Locking verhindert Parallel-Ingest
## 3.3 Skalierbarkeit
- NDJSON statt JSON-Array
- Streaming-Append
- Streaming-Compaction
- Kein RAM-Full-Load
---
# 4. Domain Model
## 4.1 Document
Primäre Wissenseinheit.
Eigenschaften:
- id (UUID)
- title
- createdAt
- createdBy
- archived (bool)
- currentVersion (ManyToOne → DocumentVersion)
## 4.2 DocumentVersion
Immutable Inhaltsversion.
Eigenschaften:
- id (UUID)
- document (ManyToOne)
- versionNumber
- filePath
- checksum
- active (bool)
- ingestStatus (PENDING, RUNNING, INDEXED, FAILED)
Regel:
Nur eine Version pro Dokument darf active = true sein.
---
# 5. Ingest Architektur
## 5.1 Grundsatz
Kein Ingest läuft synchron im HTTP-Request.
Jede Indexänderung läuft über:
IngestJob → CLI Runner → IngestOrchestrator → IngestFlow
---
## 5.2 IngestJob
Entity mit:
- id
- type
- status
- documentId
- documentVersionId
- startedAt
- finishedAt
- errorMessage
Job-Typen:
DOCUMENT_VERSION_ACTIVATE
DOCUMENT
GLOBAL_REINDEX
Status:
QUEUED
RUNNING
COMPLETED
FAILED
ABORTED
---
## 5.3 Job-Execution
Start:
php bin/console mto:agent:ingest:run <jobId>
Execution-Flow:
1. LockService.acquire()
2. Job → RUNNING
3. IngestFlow ausführen
4. Job → COMPLETED / FAILED
5. LockService.release()
---
# 6. IngestFlow Details
## 6.1 Local Ingest (Version aktivieren oder neue Datei)
Ablauf:
1. Extract (PDF/Text)
2. Normalize
3. Chunk deterministisch
4. Streaming Compaction:
- Entferne alle Chunks mit document_id
5. Append neue Chunks
6. Full FAISS Rebuild
Wichtig:
Es werden immer alle alten Chunks des Dokuments entfernt.
---
## 6.2 Global Reindex
Wird ausgelöst bei:
- embedding_model Änderung
- embedding_dimension Änderung
- chunk_size Änderung
- scoring_version Änderung
- index_format Änderung
Ablauf:
1. Alle aktiven Versionen extrahieren
2. Komplettes index.ndjson neu schreiben
3. FAISS neu bauen
4. index_version++
---
# 7. Storage Layer
## 7.1 index.ndjson
Single Source of Truth.
Eigenschaften:
- 1 JSON-Objekt pro Zeile
- Streaming-lesbar
- Append-only
- Compaction by document_id
Beispiel:
{
"chunk_id": "...",
"document_id": "...",
"document_version_id": "...",
"text": "...",
"meta": {...}
}
---
## 7.2 index_meta.json
Enthält:
- index_version
- embedding_model
- embedding_dimension
- chunk_size
- chunk_overlap
- scoring_version
- index_format
- vector_backend
Bei strukturellem Mismatch:
→ Global Reindex zwingend.
---
# 8. Vector Layer (FAISS)
## 8.1 Build
vector_ingest.py:
- stream index.ndjson
- Embeddings berechnen
- FAISS IndexFlatIP bauen
- vector.index schreiben
- vector_meta.json schreiben
Immer vollständiger Rebuild.
Keine Partial Updates.
## 8.2 Search
vector_search.py:
Input:
- Query
- Top-K
Output:
- chunk_id
- score
---
# 9. Hybrid Retrieval
Ablauf:
1. Keyword Retrieval (NDJSON Keyword Search)
2. Vector Retrieval (FAISS)
3. Score Fusion
4. Chunk Lookup
5. Context Builder
6. Prompt Builder
7. LLM
Keyword bleibt Primärsignal.
Vector ergänzt semantische Nähe.
---
# 10. Locking
LockService schützt:
- NDJSON Mutationen
- FAISS Rebuild
- Global Reindex
- Aktivierungs-Parallelität
Keine zwei Ingest-Jobs gleichzeitig erlaubt.
---
# 11. Admin Flows
## 11.1 Neue Datei hochladen
1. Document + Version 1 erstellen
2. Version aktiv
3. DOCUMENT_VERSION_ACTIVATE Job anlegen
4. Async Runner starten
5. Redirect auf Job-Seite
## 11.2 Version aktivieren
1. DB-Status ändern
2. IngestStatus → PENDING
3. DOCUMENT_VERSION_ACTIVATE Job anlegen
4. Async Runner starten
## 11.3 Manuelles Ingest
1. DOCUMENT Job anlegen
2. Async Runner starten
---
# 12. Error Handling
Typische Fehler:
- exec deaktiviert → Async Start nicht möglich
- Lock aktiv → paralleler Ingest blockiert
- index_meta mismatch → Reindex erforderlich
- Vector-Dateien fehlen → Rebuild ausführen
---
# 13. Security & Stability
- Keine User-Uploads direkt ins Retrieval
- Kein Self-Learning
- Kein unkontrollierter Index-Mutate
- Strict Separation:
- Admin Layer
- Ingest Layer
- Retrieval Layer
- LLM Layer
---
# 14. System Guarantees
Dieses System garantiert:
- Reproduzierbarkeit
- Drift-Freiheit
- Auditierbarkeit
- Versionierte Wissensbasis
- Deterministische Retrieval-Ergebnisse
- Enterprise-taugliche Skalierbarkeit
---
# 15. Zusammenfassung
Das mitho AI Agent System ist eine:
- deterministische Hybrid-RAG Engine
- NDJSON-basierte Wissensplattform
- Full-Rebuild-FAISS Architektur
- Job-basierte Ingest-Pipeline
- Versionierte, governance-stabile Wissensstruktur
Keine Inline-Rebuilds.
Keine inkrementellen Vektor-Updates.
Keine impliziten Strukturänderungen.
Alles läuft kontrolliert über das Job-System.