- Updated the AI Exercise Implementation Plan to include a detailed description of the new suggestion dialog for AI proposals, allowing users to preview and selectively adopt AI-generated summaries and skills. - Implemented a new preview feature in the ExerciseFormPageRoot component, enabling users to review AI suggestions before applying them to the form. - Enhanced the skill management process by normalizing AI-suggested skills and integrating them into the exercise form, improving user interaction and data handling.
4.1 KiB
Umsetzungsplan – KI bei Übungen (stufenweise, Driftschutz)
Version: 0.1
Datum: 2026-05-22
Bezüge: functional/AI_EXERCISE_ASSISTANT_VISION.md · technical/KI_FEATURES_SPEC.md · technical/AI_PROMPT_SYSTEM_SPEC.md · technical/AI_TRAINING_PLANNING_CONCEPT.md (§1.1 Ist-Stand)
1. Drift vermeiden – verbindliche Regeln
- Spec vor Code: Request/Response-Felder und Statuscodes an
KI_FEATURES_SPEC.mdausrichten; Abweichungen zuerst Spec oder dieses Dokument anpassen. - Prompts in der DB: Keine produktionskritischen Prompt-Langtexte nur im Code; Defaults per Migration in
ai_prompts, Anpassung durch Admins über vorgesehene Oberfläche (später) oder SQL. - Stufen-Slugs & Intensität: Nur kanonische Werte wie in
exercises.py(basis…optimierung,niedrig|mittel|hoch); LLM-Ausgaben normalisieren, ungültigeskill_idverwerfen. - Kein stiller DB-Write: KI liefert Vorschläge; Persistenz nur über bestehende PUT/POST exercises inkl. Trainer-Aktion (und optional
summary_ai_generated/ai_suggestedwie Spec). - Mandant: Übungsbezogene KI-Endpunkte nutzen
Depends(get_tenant_context); keine Ausnahme ohne Eintrag inACCESS_LAYER_ENDPOINT_AUDIT.md. - Schema: Neue DB-Objekte nur nummerierte Migration
backend/migrations/067_*.sql(oder folgend);DB_SCHEMA_VERSIONinbackend/version.pyanheben.
2. Stufen (Releases)
| Stufe | Inhalt | Exit-Kriterium |
|---|---|---|
| S0 | Dieses Dokument + Verweise konsistent | Review abgehakt |
| S1 | Migration ai_prompts + Defaults exercise_summary, exercise_skill_suggestions; exercises.summary_ai_generated |
Migrierte DB, App startet |
| S2 | httpx-Client OpenRouter; Modul lädt Prompt, ersetzt Platzhalter, parst Antwort |
Unit-/Smoke: 503 ohne Key |
| S3 | POST /api/exercises/ai/suggest, POST /api/exercises/{id}/ai/regenerate |
OpenAPI/Handtest mit Key |
| S4 | Frontend: KI-Vorschlag, Änderungsdialog (Vorschau, Kurzfassung wählbar, Fähigkeiten pro Zeile an-/abwählbar), dann Übernahme ins Formular | Manuelle UX-Prüfung |
| S5 | (später) Auto-Fallback beim Speichern laut KI_FEATURES_SPEC §7 |
Feature-Flag / Config |
| S6 | (später) Zielausbau, Anleitung-only, Varianten, Admin-Masse laut Vision | Separate Epics |
Aktueller Implementierungsstand nach Merge: S0–S4 anstreben; S5/S6 nicht Teil dieses Laufs.
3. Implementierungs-Checkliste (Technik)
OPENROUTER_API_KEY/OPENROUTER_MODELin.env.exampledokumentiert (bereits teils vorhanden – prüfen).- Fehlerbilder:
400zu wenig Inhalt,503KI nicht konfiguriert,502Upstream-Fehler mit kurzer Message. - Logging: keine vollständigen Prompts mit personenbezogenen Daten in Prod-Logs (optional DEBUG).
- Optional: Rate-Limit KI-Endpunkte (
slowapi) – nach Bedarf. MODULE_VERSIONS["exercises"]/ Changelog bei API-Erweiterung setzen.
4. Changelog dieses Plans
- 2026-05-22: Initial; S1–S4 als erster Umsetzungspfad.
- 2026-05-22: S1–S4 im Code umgesetzt (Migration 067,
exercise_ai+ Router, Übungsformular); S5 weiter offen. - 2026-05-22: UX: Übernahmedialog für KI-Vorschläge (Vorschau, selektive Übernahme) im Übungsformular (
ExerciseFormPageRoot).
5. Umsetzungsstand (Zwischencheckpoint)
Erledigt (2026-05-22): Migration 067_ai_prompts_exercise_assistant, openrouter_chat, exercise_ai, POST /api/exercises/ai/suggest und POST /api/exercises/{id}/ai/regenerate, Formular-Schaltflächen (Kurzfassung / Fähigkeiten / kombiniert).
Nacharbeit S4 UX: Übernahmedialog ExerciseFormPageRoot: keine sofortige Überschreibung; Kurzfassung mit Vergleich + Checkbox; Fähigkeiten mit Neu/Aktualisierung, Checkboxen, „Alle auswählen/abwählen“; Escape schließt; KI-Schaltflächen blockiert solange Dialog offen.
Bewusst noch nicht: automatische KI beim Speichern (S5), Setzen von summary_ai_generated bei manuellen UI-Änderungen, Prompt-Admin-UI, Rate-Limits.