# KI-Daten-Pipeline

Die KI-Daten-Pipeline ist ein zusammenhaengendes System aus drei Modulen, das den Datenfluss von der Erfassung bis zur semantischen Suche abbildet.

## Uebersicht

```mermaid
flowchart LR
    subgraph OCR["OCR-Labeling"]
        A[Klausur-Scans] --> B[OCR Erkennung]
        B --> C[Ground Truth Labels]
    end

    subgraph RAG["RAG Pipeline"]
        D[PDF Dokumente] --> E[Text-Extraktion]
        E --> F[Chunking]
        F --> G[Embedding]
    end

    subgraph SEARCH["Daten & RAG"]
        H[Qdrant Collections]
        I[Semantische Suche]
    end

    C -->|Export| D
    G -->|Indexierung| H
    H --> I
    I -->|Ergebnisse| J[Klausur-Korrektur]
```

## Module

| Modul | Pfad | Funktion | Backend |
|-------|------|----------|---------|
| **OCR-Labeling** | `/ai/ocr-labeling` | Ground Truth fuer Handschrift-OCR | klausur-service:8086 |
| **RAG Pipeline** | `/ai/rag-pipeline` | Dokument-Indexierung | klausur-service:8086 |
| **Daten & RAG** | `/ai/rag` | Vektor-Suche & Collection-Mapping | klausur-service:8086 |

## Datenfluss

### 1. OCR-Labeling (Eingabe)

Das OCR-Labeling-Modul erfasst Ground Truth Daten fuer das Training von Handschrift-Erkennungsmodellen:

- **Upload**: Klausur-Scans (PDF/Bilder) werden hochgeladen
- **OCR-Verarbeitung**: Mehrere OCR-Modelle erkennen den Text
  - `llama3.2-vision:11b` - Vision LLM (beste Qualitaet)
  - `trocr` - Microsoft Transformer (schnell)
  - `paddleocr` - PaddleOCR + LLM (4x schneller)
  - `donut` - Document Understanding (strukturiert)
- **Labeling**: Manuelles Pruefen und Korrigieren der OCR-Ergebnisse
- **Export**: Gelabelte Daten koennen exportiert werden fuer:
  - TrOCR Fine-Tuning
  - Llama Vision Fine-Tuning
  - Generic JSON

### 2. RAG Pipeline (Verarbeitung)

Die RAG Pipeline verarbeitet Dokumente und macht sie suchbar:

```mermaid
flowchart TD
    A[Datenquellen] --> B[OCR/Text-Extraktion]
    B --> C[Chunking]
    C --> D[Embedding]
    D --> E[Qdrant Indexierung]

    subgraph sources["Datenquellen"]
        S1[NiBiS PDFs]
        S2[Eigene EH]
        S3[Rechtskorpus]
        S4[Schulordnungen]
    end
```

**Verarbeitungsschritte:**

1. **Dokumentenextraktion**: PDFs und Bilder werden per OCR in Text umgewandelt
2. **Chunking**: Lange Texte werden in Abschnitte aufgeteilt
   - Chunk-Groesse: 1000 Zeichen
   - Ueberlappung: 200 Zeichen
3. **Embedding**: Jeder Chunk wird in einen Vektor umgewandelt
   - Modell: `text-embedding-3-small`
   - Dimensionen: 1536
4. **Indexierung**: Vektoren werden in Qdrant gespeichert

### 3. Daten & RAG (Ausgabe)

Das Daten & RAG Modul ermoeglicht die Verwaltung und Suche:

- **Collection-Uebersicht**: Status aller Qdrant Collections
- **Semantische Suche**: Fragen werden in Vektoren umgewandelt und aehnliche Dokumente gefunden
- **Regulierungs-Mapping**: Zeigt welche Regulierungen indexiert sind

## Qdrant Collections

| Collection | Inhalt | Status |
|------------|--------|--------|
| `bp_nibis_eh` | Offizielle NiBiS Erwartungshorizonte | Aktiv |
| `bp_eh` | Benutzerdefinierte Erwartungshorizonte | Aktiv |
| `bp_schulordnungen` | Schulordnungen aller Bundeslaender | In Arbeit |
| `bp_legal_corpus` | Rechtskorpus (DSGVO, AI Act, BSI, etc.) | Aktiv |

## Technische Architektur

### Services

```mermaid
graph TB
    subgraph Frontend["Admin-v2 (Next.js)"]
        F1["/ai/ocr-labeling"]
        F2["/ai/rag-pipeline"]
        F3["/ai/rag"]
    end

    subgraph Backend["klausur-service (Python)"]
        B1[OCR Endpoints]
        B2[Indexierungs-Jobs]
        B3[Such-API]
    end

    subgraph Storage["Datenbanken"]
        D1[(PostgreSQL)]
        D2[(Qdrant)]
        D3[(MinIO)]
    end

    F1 --> B1
    F2 --> B2
    F3 --> B3

    B1 --> D1
    B1 --> D3
    B2 --> D2
    B3 --> D2
```

### Backend-Endpunkte

#### OCR-Labeling (`/api/v1/ocr-label/`)

| Endpoint | Methode | Beschreibung |
|----------|---------|--------------|
| `/sessions` | GET/POST | Session-Verwaltung |
| `/sessions/{id}/upload` | POST | Bilder hochladen |
| `/queue` | GET | Labeling-Queue |
| `/confirm` | POST | OCR bestaetigen |
| `/correct` | POST | OCR korrigieren |
| `/skip` | POST | Item ueberspringen |
| `/stats` | GET | Statistiken |
| `/export` | POST | Trainingsdaten exportieren |

#### RAG Pipeline (`/api/ai/rag-pipeline`)

| Action | Beschreibung |
|--------|--------------|
| `jobs` | Indexierungs-Jobs auflisten |
| `dataset-stats` | Datensatz-Statistiken |
| `create-job` | Neue Indexierung starten |
| `pause` | Job pausieren |
| `resume` | Job fortsetzen |
| `cancel` | Job abbrechen |

#### Legal Corpus (`/api/legal-corpus/`)

| Endpoint | Beschreibung |
|----------|--------------|
| `/status` | Collection-Status |
| `/search` | Semantische Suche |
| `/ingest` | Dokumente indexieren |

## Integration mit Klausur-Korrektur

Die KI-Daten-Pipeline liefert Erwartungshorizont-Vorschlaege fuer die Klausur-Korrektur:

```mermaid
sequenceDiagram
    participant L as Lehrer
    participant K as Klausur-Korrektur
    participant R as RAG-Suche
    participant Q as Qdrant

    L->>K: Schueler-Antwort pruefen
    K->>R: EH-Vorschlaege laden
    R->>Q: Semantische Suche
    Q->>R: Top-k Chunks
    R->>K: Relevante EH-Passagen
    K->>L: Bewertungsvorschlaege
```

## Deployment

Die Module werden als Teil des admin-v2 Containers deployed:

```bash
# 1. Sync
rsync -avz --delete --exclude 'node_modules' --exclude '.next' --exclude '.git' \
  /Users/benjaminadmin/Projekte/breakpilot-pwa/admin-v2/ \
  macmini:/Users/benjaminadmin/Projekte/breakpilot-pwa/admin-v2/

# 2. Build & Deploy
ssh macmini "/usr/local/bin/docker compose \
  -f /Users/benjaminadmin/Projekte/breakpilot-pwa/docker-compose.yml \
  build --no-cache admin-v2 && \
  /usr/local/bin/docker compose \
  -f /Users/benjaminadmin/Projekte/breakpilot-pwa/docker-compose.yml \
  up -d admin-v2"
```

## Verwandte Dokumentation

- [OCR Labeling Spezifikation](../klausur-service/OCR-Labeling-Spec.md)
- [RAG Admin Spezifikation](../klausur-service/RAG-Admin-Spec.md)
- [NiBiS Ingestion Pipeline](../klausur-service/NiBiS-Ingestion-Pipeline.md)
- [Multi-Agent Architektur](../../architecture/multi-agent.md)
