# Fachliche Anforderungen: KI-Prompt Flexibilisierung
**Modul:** v9f  
**Status:** Fachlich freigegeben, technische Implementierung ausstehend  
**Letzte Aktualisierung:** März 2026

---

## 1. Überblick

Das bestehende KI-Prompt-System wird von einer fixen Sammlung vordefinierter
Prompts zu einer vollständig konfigurierbaren Prompt-Bibliothek erweitert.
Admins können Prompts kategorisieren, duplizieren, bearbeiten und mit einem
visuellen Platzhalter-Browser ausstatten. Die Pipeline wird konfigurierbar –
mehrere Konfigurationen für unterschiedliche Analysezwecke sind möglich.

---

## 2. Prompt-Bibliothek

### 2.1 Kategorien

Alle Prompts werden einer Kategorie zugeordnet:

| Kategorie | Beschreibung | Beispiel-Prompts |
|-----------|-------------|-----------------|
| Körper | Gewicht, KF, Umfänge, Caliper | Körperkomposition, Gewichtstrend |
| Ernährung | Kalorien, Makros, Timing | Kalorienbilanz, Proteinversorgung |
| Training | Volumen, Typen, HF | Trainingsanalyse, Erholungsstatus |
| Schlaf | Qualität, Dauer, Muster | Schlafauswertung, Schlaftrend |
| Vitalwerte | Ruhepuls, HRV, VO2Max | Leistungsfähigkeit, Erholung |
| Mentales | Stress, Stimmung, Energie | Wohlbefinden, Stressanalyse |
| Ziele | Fortschritt, Prognose, Zeitplan | Zielerreichung, Zeitplanung |
| Ganzheitlich | Korrelationen, Übersicht | Gesamtanalyse, Pipeline-Synthese |

### 2.2 Prompt-Verwaltung (Admin)

Ein Admin kann mit jedem Prompt folgendes tun:

**Aktivieren / Deaktivieren**
- Inaktive Prompts sind für Nutzer nicht sichtbar und nicht ausführbar
- Pipeline-Prompts können separat aktiviert/deaktiviert werden

**Duplizieren und anpassen**
- Bestehenden Prompt als Vorlage kopieren
- Kopie erhält Suffix " (Kopie)" und kann unabhängig bearbeitet werden

**Neu erstellen**
- Titel, Beschreibung, Kategorie, Template
- Platzhalter über den Platzhalter-Browser einfügen (siehe Abschnitt 3)

**Kategorie zuordnen**
- Beim Erstellen und Bearbeiten wählbar
- Nachträgliche Änderung möglich

**Reihenfolge festlegen**
- Drag & Drop oder Zahleneingabe (sort_order)
- Reihenfolge bestimmt Anzeige in der Nutzer-Ansicht

**Auf Standard zurücksetzen**
- Systemseitig definierte Prompts haben einen "Standard"-Zustand
- Reset stellt Original-Template wieder her
- Eigens erstellte Prompts haben keinen Standard-Reset

### 2.3 Prompt-Felder

Jeder Prompt hat:
- **Titel** – kurzer Name (z.B. "Körperkomposition")
- **Beschreibung** – wofür ist dieser Prompt? (für Admin sichtbar)
- **Kategorie** – aus der Kategorienliste
- **Template** – der eigentliche Prompt-Text mit Platzhaltern
- **Aktiv** – true/false
- **Reihenfolge** – Zahl für Sortierung
- **Typ** – `single` (Einzelanalyse) oder `pipeline` (Pipeline-Stufe)
- **Pipeline-Stufe** – nur bei Typ `pipeline`: Stufen-Nummer (1, 2, 3...)

---

## 3. Platzhalter-System

### 3.1 Platzhalter-Browser

Beim Bearbeiten eines Prompts steht ein visueller Platzhalter-Browser zur
Verfügung – Admin tippt Platzhalter nicht mehr manuell, sondern wählt sie aus.

**Funktionen:**
- **Filterung nach Kategorie** – zeigt nur Platzhalter der gewählten Kategorie
- **Beispielwert** – zeigt was der Platzhalter aktuell mit echten Daten ausgeben würde
- **Klick zum Einfügen** – Platzhalter wird an Cursor-Position ins Template eingefügt
- **Warnung bei fehlendem Platzhalter** – wenn ein eingetippter Platzhalter nicht existiert
- **Warnung bei fehlenden Daten** – wenn Daten für diesen Platzhalter nicht vorhanden sind (z.B. noch kein Schlaf-Tracking)

### 3.2 Prompt-Vorschau

Vor dem Speichern kann der Admin eine Vorschau anfordern:
- System befüllt alle Platzhalter mit echten aktuellen Daten
- Zeigt den fertigen Prompt-Text wie er an die KI gesendet würde
- KI wird dabei **nicht** aufgerufen – nur der Prompt-Text wird angezeigt

### 3.3 Platzhalter-Kategorien und Übersicht

**Körper:**
```
{{weight_aktuell}}         → "86,1 kg"
{{weight_trend}}           → "sinkend (-0,8 kg letzte 4 Wochen)"
{{kf_aktuell}}             → "19,9%"
{{kf_trend}}               → "stabil"
{{magermasse}}             → "69,4 kg"
{{whr}}                    → "0,90"
{{whtr}}                   → "0,51"
{{bmi}}                    → "27,2"
{{circ_summary}}           → "Taille: 88cm, Hüfte: 98cm, ..."
{{caliper_summary}}        → "KF nach Jackson/Pollock: 19,9%"
```

**Ernährung:**
```
{{kcal_avg}}               → "1.847 kcal/Tag (Ø 30 Tage)"
{{protein_avg}}            → "138g/Tag"
{{protein_ziel_low}}       → "138"
{{protein_ziel_high}}      → "172"
{{fat_avg}}                → "72g/Tag"
{{carb_avg}}               → "195g/Tag"
{{nutrition_summary}}      → kompakte Zusammenfassung
{{nutrition_detail}}       → ausführliche Tabelle
{{nutrition_days}}         → "28 Tage mit Daten"
{{activity_kcal_summary}}  → "Ø 320 kcal aktiver Verbrauch/Tag"
```

**Training:**
```
{{activity_summary}}           → kompakte Zusammenfassung
{{activity_detail}}            → ausführliche Liste
{{trainingstyp_verteilung}}    → "60% Kraft, 30% Cardio, 10% Mobility"
{{trainingstyp_haupttyp}}      → "Kraft" (häufigster Typ)
{{ruhetage_letzte_woche}}      → "2"
{{trainingsphase}}             → "Aufbau / Erholung / Plateau"
{{hf_zonen_verteilung}}        → "Zone 2: 45%, Zone 3: 35%, Zone 4: 20%"

{{faehigkeiten_analyse}}       → Detaillierte Analyse der trainierten Fähigkeiten
{{faehigkeiten_koordinativ}}   → "Orientierung: 3/14 Einheiten, Gleichgewicht: 5/14, ..."
{{faehigkeiten_konditionell}}  → "Kraft: 8/14, Ausdauer: 4/14, Schnelligkeit: 2/14, Flexibilität: 3/14"
{{faehigkeiten_kognitiv}}      → "Konzentration: 2/14, Entscheidung: 1/14, ..."
{{faehigkeiten_psychisch}}     → "Willenskraft: 5/14, Stressresistenz: 2/14, ..."
{{faehigkeiten_taktisch}}      → "Timing: 1/14, Antizipation: 2/14, ..."
{{faehigkeiten_balance}}       → "Ausgewogen / Einseitig + Empfehlung"
```

**Fähigkeiten-System (v9d Integration):**
- Jeder Trainingstyp ist mit 1-N Fähigkeiten aus 5 Dimensionen verknüpft
- KI erhält aggregierte Statistik: wie oft wurden welche Fähigkeiten trainiert
- Ermöglicht Aussagen wie: "Dein Training fokussiert stark auf Kraft (8 von 14 Einheiten), aber koordinative Fähigkeiten kommen zu kurz."
- Basis für gezielte Trainingsempfehlungen

**Herzfrequenz & Vitalwerte:**
```
{{ruhepuls_aktuell}}       → "52 bpm"
{{ruhepuls_trend}}         → "sinkend (-3 bpm letzte 4 Wochen)"
{{hrv_aktuell}}            → "58 ms"
{{hrv_baseline}}           → "62 ms (30-Tage-Durchschnitt)"
{{erholungsstatus}}        → "gut / teilweise / schlecht"
{{vo2max}}                 → "48,2 ml/kg/min"
```

**Schlaf:**
```
{{schlaf_avg_dauer}}       → "7,2h/Nacht (Ø 7 Tage)"
{{schlaf_qualitaet}}       → "3,8/5 (Ø 7 Tage)"
{{schlaf_trend}}           → "stabil"
{{schlaf_detail}}          → ausführliche Tabelle
```

**Mentales:**
```
{{energie_niveau}}         → "3,2/5 (Ø 7 Tage)"
{{stress_niveau}}          → "2,8/5 (Ø 7 Tage)"
{{stimmung}}               → "3,9/5 (Ø 7 Tage)"
{{meditation_streak}}      → "5 Tage in Folge"
```

**Ziele:**
```
{{goal_weight}}            → "82 kg"
{{goal_bf_pct}}            → "14%"
{{goal_name}}              → "Muskelaufbau"
{{ziel_fortschritt}}       → "Gewicht: 72% erreicht, KF: 45% erreicht"
{{ziel_prognose}}          → "Ziel voraussichtlich in 8 Wochen erreicht"
```

**Profil:**
```
{{name}}                   → "Lars"
{{geschlecht}}             → "männlich"
{{height}}                 → "178"
{{age}}                    → "45"
{{sprache}}                → "Deutsch" (konfigurierbar per Prompt)
```

**Zeitraum:**
```
{{zeitraum_7d}}            → "letzte 7 Tage"
{{zeitraum_30d}}           → "letzte 30 Tage"
{{zeitraum_90d}}           → "letzte 90 Tage"
{{datum_heute}}            → "20. März 2026"
```

**Pipeline (intern):**
```
{{stage1_body}}            → JSON-Summary Körper (Pipeline-Stufe 1)
{{stage1_nutrition}}       → JSON-Summary Ernährung
{{stage1_activity}}        → JSON-Summary Training
{{stage1_sleep}}           → JSON-Summary Schlaf (neu)
{{stage1_vitals}}          → JSON-Summary Vitalwerte (neu)
```

---

## 4. Pipeline-Konfiguration

### 4.1 Was ist eine Pipeline-Konfiguration?

Eine Pipeline-Konfiguration definiert:
- **Name** – z.B. "Alltags-Check", "Wettkampf-Analyse", "Schlaf-Fokus"
- **Aktive Module** – welche Datenquellen fließen ein (Körper, Ernährung, Training, Schlaf, Vitalwerte, Mentales)
- **Zeitraum je Modul** – z.B. Körper 30 Tage, Schlaf 7 Tage, Training 14 Tage
- **Stufen** – welcher Prompt wird in welcher Stufe verwendet
- **Standard** – eine Konfiguration kann als Standard markiert werden

### 4.2 Pipeline-Stufen

**Stufe 1 (parallel):** Mehrere Module-Prompts laufen gleichzeitig, jeder gibt ein JSON-Summary zurück

**Stufe 2:** Synthese-Prompt kombiniert alle Stage-1-Summaries zu einer narrativen Analyse

**Stufe 3 (optional):** Ziel-Abgleich oder spezifische Zusatzanalyse

Admin kann:
- Anzahl der Stufen festlegen (min. 2, max. 4)
- Jeden Stufen-Prompt zuweisen
- Module für Stufe 1 aktivieren/deaktivieren

### 4.3 Vordefinierte Konfigurationen (Beispiele)

**Alltags-Check (Standard):**
- Module: Körper (30T), Ernährung (30T), Training (14T)
- Stufe 1: pipeline_body + pipeline_nutrition + pipeline_activity
- Stufe 2: pipeline_synthesis
- Stufe 3: pipeline_goals

**Schlaf-Fokus:**
- Module: Schlaf (14T), Vitalwerte (7T), Training (14T)
- Stufe 1: pipeline_sleep + pipeline_vitals + pipeline_activity
- Stufe 2: pipeline_synthesis_sleep

**Wettkampf-Analyse:**
- Module: Körper (90T), Training (90T), Vitalwerte (30T), Ziele
- Stufe 1: alle Körper/Training/Vital-Module
- Stufe 2: pipeline_synthesis_performance

---

## 5. Nutzer-Ansicht: KI-Analyse starten

### 5.1 Einzelanalyse

1. Nutzer wählt Prompt aus der Bibliothek (nach Kategorie gefiltert)
2. KI-Analyse startet sofort
3. Ergebnis wird angezeigt und gespeichert

### 5.2 Pipeline

1. Nutzer wählt Pipeline-Konfiguration
2. Pipeline startet sofort (alle Stufen laufen automatisch)
3. Ergebnis wird angezeigt und gespeichert

### 5.3 Kein Konfigurationsschritt für Nutzer

Der Nutzer wählt nur Prompt oder Pipeline – kein weiterer Konfigurationsschritt.
Zeitraum und Module sind durch Admin in der Pipeline-Konfiguration festgelegt.

---

## 6. Analyse-Ergebnisse verwalten

### 6.1 Kategorie-Zuordnung

Jedes gespeicherte Analyse-Ergebnis erbt die Kategorie des ausgeführten Prompts.
Ermöglicht spätere Filterung nach Kategorie.

### 6.2 Filtern nach Kategorie

Im Analyse-Verlauf kann nach Kategorie gefiltert werden:
- "Alle" / "Körper" / "Ernährung" / "Training" / etc.

### 6.3 Analyse-Verlauf pro Prompt

Für jeden Prompt ist ein Verlauf einsehbar:
- Liste aller bisherigen Analysen mit diesem Prompt (Datum + Kurzauszug)
- Zeigt wie sich die KI-Aussage über Zeit verändert hat

### 6.4 Favoriten

Nutzer kann Analysen als Favorit markieren (Stern-Symbol).
Favoriten sind in der Verlaufs-Ansicht filterbar.

### 6.5 Löschen

Nutzer kann einzelne Analyse-Ergebnisse manuell löschen.
Keine Massen-Löschung (außer Admin).

---

## 7. Sprache

Die Ausgabesprache wird im Prompt-Template selbst gesteuert über den
Platzhalter `{{sprache}}`. Der Wert wird aus den Profil-Einstellungen gezogen.

**Mögliche Werte:** "Deutsch", "Englisch", "Französisch" (erweiterbar)

**Standard:** "Deutsch"

Kein separater Sprach-Schalter auf der Analyse-Seite – Sprache wird einmalig
im Profil konfiguriert.

---

## 8. Abgrenzung & offene Fragen

### In diesem Modul enthalten:
- Prompt-Bibliothek mit 8 Kategorien
- Vollständige Admin-Verwaltung (CRUD, Reihenfolge, Reset)
- Platzhalter-Browser mit Beispielwerten und Vorschau
- Pipeline-Konfigurationen (mehrere, speicherbar)
- Analyse-Ergebnisse: Kategorie, Filter, Verlauf, Favoriten, Löschen
- Sprach-Platzhalter

### Nicht in diesem Modul:
- Community-Prompts / Prompt-Import von extern → später
- KI-gestützte Prompt-Optimierung → später
- Automatisch geplante Analysen (z.B. wöchentlich) → später
- Prompts für noch nicht implementierte Module (Schlaf, Mentales) werden
  vorbereitet aber haben keine echten Daten bis die Module existieren

### Offene Fragen für technische Planung:
1. Wie werden Pipeline-Konfigurationen gespeichert? (neue DB-Tabelle oder JSON in ai_prompts?)
2. Platzhalter-Definitionen: statisch im Code oder dynamisch in DB (für zukünftige Erweiterung)?
3. Wie wird der Beispielwert für den Platzhalter-Browser berechnet – gleicher Endpunkt wie die echte Analyse?
4. Reihenfolge der Prompts: getrennte sort_order pro Kategorie oder global?

---

## 9. Trainingstypen & Fähigkeiten-Mapping (v9d → v9f Integration)

### 9.1 Hintergrund

In v9d wurde die Basis geschaffen:
- `training_types` Tabelle mit `abilities` JSONB-Spalte
- Admin-CRUD für Trainingstypen (ohne Abilities-UI)
- Taxonomie-Endpoint: `/api/admin/training-types/taxonomy/abilities`
- 5 Fähigkeiten-Dimensionen definiert:
  - 🎯 **Koordinativ:** Orientierung, Differenzierung, Kopplung, Gleichgewicht, Rhythmus, Reaktion, Umstellung
  - 💪 **Konditionell:** Kraft, Ausdauer, Schnelligkeit, Flexibilität
  - 🧠 **Kognitiv:** Konzentration, Aufmerksamkeit, Wahrnehmung, Entscheidungsfindung
  - 🎭 **Psychisch:** Motivation, Willenskraft, Stressresistenz, Selbstvertrauen
  - ♟️ **Taktisch:** Timing, Strategie, Antizipation, Situationsanalyse

### 9.2 Was wird in v9f ergänzt?

**Admin-UI: Fähigkeiten-Matrix**

Im AdminTrainingTypesPage Formular wird eine Fähigkeiten-Matrix hinzugefügt:
- 5 Sections (eine pro Dimension)
- Pro Dimension: Checkboxes für alle Fähigkeiten
- Multi-Select: Ein Trainingstyp kann mehrere Fähigkeiten pro Dimension trainieren
- Beispiel: "Kampfsport-Sparring" trainiert:
  - Koordinativ: Orientierung, Reaktion, Umstellung
  - Konditionell: Schnelligkeit, Ausdauer
  - Kognitiv: Entscheidung, Wahrnehmung
  - Psychisch: Stressresistenz, Selbstvertrauen
  - Taktisch: Timing, Antizipation

**Gespeichert als JSONB:**
```json
{
  "koordinativ": ["orientierung", "reaktion", "umstellung"],
  "konditionell": ["schnelligkeit", "ausdauer"],
  "kognitiv": ["entscheidung", "wahrnehmung"],
  "psychisch": ["stressresistenz", "selbstvertrauen"],
  "taktisch": ["timing", "antizipation"]
}
```

**Backend: Fähigkeiten-Aggregation**

Neue Endpoint-Funktion (oder Platzhalter-Funktion):
```python
def calculate_abilities_summary(profile_id, days=14):
    """
    Aggregiert trainierte Fähigkeiten über Zeitraum.

    Returns:
    {
      "total_activities": 14,
      "koordinativ": {
        "orientierung": 3,      # 3 von 14 Trainings
        "gleichgewicht": 5,
        ...
      },
      "konditionell": {
        "kraft": 8,
        "ausdauer": 4,
        ...
      },
      ...
      "balance_score": 0.67,    # 0-1, wie ausgewogen
      "top_dimension": "konditionell",
      "weak_dimension": "kognitiv"
    }
    """
```

**KI-Prompt Integration:**

Die Fähigkeiten-Platzhalter werden befüllt mit aggregierten Daten:
- `{{faehigkeiten_analyse}}` → vollständige Aufschlüsselung
- `{{faehigkeiten_koordinativ}}` → nur koordinative Dimension
- etc.

Pipeline-Prompt "Training" erhält zusätzlichen Context:
```
Analyse die Fähigkeitenverteilung:
{{faehigkeiten_analyse}}

Gib Empfehlungen für untertrainierte Bereiche.
```

### 9.3 Nutzen für KI-Analyse

**Beispiel-Insight:**
> "Deine letzten 14 Trainings fokussieren stark auf **konditionelle Fähigkeiten** (Kraft: 8×, Ausdauer: 4×). Koordinative Fähigkeiten kommen zu kurz (nur 3× Gleichgewicht, 2× Reaktion). Für einen ausgewogenen Trainingsplan empfehle ich 2-3 koordinationslastige Einheiten pro Woche – z.B. Kampfsport-Techniktraining, Balance-Übungen oder Mobility-Routinen mit Fokus auf Bewegungskontrolle."

**Korrelationen:**
- Verletzungen / Überlastung ↔ Koordinations-Defizit
- Plateaus im Krafttraining ↔ fehlende kognitive/taktische Komponente
- Erholungsprobleme ↔ psychische Fähigkeiten untertrainiert

### 9.4 Implementierungs-Reihenfolge

1. ✅ v9d Phase 1b: DB-Schema + Admin-CRUD (ohne Abilities-UI) → **erledigt**
2. 🔲 v9f: Abilities-Matrix UI im Admin-Formular
3. 🔲 v9f: Backend-Funktion `calculate_abilities_summary()`
4. 🔲 v9f: Platzhalter `{{faehigkeiten_*}}` implementieren
5. 🔲 v9f: Standard-Prompts aktualisieren mit Fähigkeiten-Context
6. 🔲 v9f: Admin-Doku: "Best Practices" für Fähigkeiten-Zuordnung

---

EOF
echo "OK"