shinkan-jinkendo/.claude/docs/technical/AI_TRAINING_PLANNING_CONCEPT.md
Lars bc1790bd82
All checks were successful
Deploy Development / deploy (push) Successful in 43s
Test Suite / pytest-backend (push) Successful in 38s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 12s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m14s
Refactor section movement logic in TrainingUnitSectionsEditor
- Streamlined the section movement process by consolidating validation checks and enhancing the handling of parallel phase indices.
- Improved the overall clarity and efficiency of the section management functionality, ensuring a smoother user experience during edits.
2026-05-16 09:04:09 +02:00

10 KiB
Raw Blame History

KI-gestützte Trainingsplanung Zentrales Konzept

Version: 0.1
Datum: 2026-05-16
Status: Arbeitsdokument (Verfeinerung durch fachliche Konzept-Agentur vorgesehen)
Ziel: Einheitlicher Rahmen für stufenweise KI-Unterstützung bei der Planung (Abschnitte, Einheiten, später mehrtägig/Rahmen) ohne vollständigen Katalog im Prompt zu spiegeln.

Verwandte Dokumente:
functional/DOMAIN_MODEL.md · functional/TRAINING_CURRICULUM_AND_GOVERNANCE_CONCEPT.md (u.a. CURR-003 zu Progressions-/KI-Automatik) · technical/TRAINING_FRAMEWORK_SPEC.md · technical/KI_FEATURES_SPEC.md · technical/AI_PROMPT_SYSTEM_SPEC.md · docs/FACHLICHE_NUTZERFUNKTIONEN.md · docs/HANDOVER.md


1. Produktliche Leitlinien

  • Nutzer: Trainer/Vereinskontext, Gruppenplanung keine Pflicht zur individuellen Sportler-Verfolgung; Kontext soll primär aus Gruppe, bereits geplanten/durchgeführten Einheiten, Rahmen-/Zielen und berechtigtem Übungskorpus bestehen.
  • Human-in-the-loop: KI liefert Vorschläge (Liste, Reihenfolge, Begründung); schreibende Übernahme in Pläne nur nach Trainer-Bestätigung oder expliziter Aktion (analog „Manual First“ in KI_FEATURES_SPEC.md).
  • Governance-first: Nur Übungen, die die API bereits für den Mandanten/Kontext sichtbar freigibt, dürfen in Kandidatenlisten landen vor Retrieval und vor jedem Prompt.

2. Kernproblem: Skalierung des Kontextes

Aus einer großen Übungssammlung („>1000 Übungen“) können weder alle Felder (Ziele, Ablauf, Skills, Varianten …) noch alle Zeilen sinnvoll in einen LLM-Prompt.

Festlegung: Der LLM-Prompt erhält immer nur ein begrenztes Kontext-Paket mit:

Paketteil Zweck
Auftrag z.B. Sektionstyp, Dauerbudget, Schwierigkeit, erlaubte Phasen/Streams
Hard Constraints Gruppe, Termin/Zeitraum, Governance-Filter bereits angewendet
Komprimierte Historie Letzte N Einheiten als Liste von Übungs-IDs + Kurzlabels (+ optional Haupt-Skills), keine vollen Fließtexte
Ziele / Rahmen Kurztexte aus Rahmen-Slot/Zielblöcken oder Trainer-Prompt
Kandidaten-TopK z.B. 30120 Übungen, je Zeile gekürzt (Titel, summary, 25 Skill-Namen/Stufen); nie der gesamte Katalog
Strukturierte Kanten optional Kleine Mengen Kanten aus Progressionsgraph: „Nachbarn von zuletzt genutzten Übungen“

ZahlenRichtwerte (überarbeitungsfähig):
Kandidaten vor dem LLM typischerweise 50150 Einträge; im Prompt durch Token-Limit weiter truncate oder zweistufig (grober Ranking-Schritt ohne LLM, dann finer mit LLM auf Top40).


3. Pipeline: „Selektion vor dem Prompt“

Die „optimale“ Auswahl entsteht nicht, indem das Modell den Katalog „im Kopf“ hält, sondern über eine mehrstufige Pipeline:

Stufe 1 Harte Filter (deterministisch, DB)

Synchron zur bestehenden Suche/List-API-Logik, z.B.:

  • Sichtbarkeit / Verein / officialRegeln
  • Aktivitäts-/Archiv-Status der Übung
  • Fokusbereich, Stil, Zielgruppe (wenn Trainings-/Gruppenkontext das vorgibt)
  • Ausschluss bereits in dieser Einheit fester Übernutzung (optional)

Ergebnis: Menge M kann noch sehr groß sein.

Stufe 2 Kontext-Verankerung (deterministisch + Graph)

  • Historie: aus letzten N Gruppeneinheiten extrahierte exercise_ids (optional Variant).
  • Progressionsgraph: ausgehend davon Nachbarn (eingehend/ausgehend begrenzte Tiefe) bereits im Produkt als unterstützend modelliert (CURR013).
  • Rahmen/Slot-Ziele: Überlapp mit Skill-Tags oder Stichwortliste (falls formalisiert).
  • Variantenketten: prerequisite_variant_id / progression_level nur innerhalb bereits gewählter Übung prüfen oder als Hint an den LLM-Block durchreichen.

Ergebnis: „AnkerMenge“ + „GraphNachbarschaft“ → priorisierte Kandidaten.

Stufe 3 Weiches Ranking / Retrieval (halb-strukturiert)

Mindestens eine der folgenden Optionen kombinierbar:

  1. Skill-/Facet-Overlap: Punktezahl, wenn Übungs-Skills mit Ziel-/Matrix-Schwerpunkten übereinstimmen (bereits Daten in exercise_skills).
  2. Diversitäts-/Wiederholungsstrafe: häufig in letzten Wochen geübte Übungen abwerten.
  3. Textsuche: PostgreSQL tsvector/Volltext auf title, summary, ggf. gekürzte goal für Trainer-Stichwort „Koordination Sprung“.
  4. Semantische Suche: Embeddings + Ähnlichkeitsuche auf Kurztexte (siehe §5).

Ergebnis: sortierte Liste, TopK für den Prompt.

Stufe 4 LLM (optional zweistufig)

  • Optional 1: LLM nur sortiert/rankted bereits vorgegebene IDs (Ranking mit kurzer Begründung).
  • Optional 2: Zwei Calls: erst „welche drei Schwerpunkte“ / „Welche Constraints habe ich übersehen?“, zweiter Call nur mit gekürztem TopK nur wenn UX den Mehraufwand rechtfertigt.

Ausgabe-Contract: Zurückkommen dürfen nur gültige exercise_ids aus der übergebenen Kandidatenliste (Server validiert gegen Set); Halluzinationsrisiko damit entschärft.


4. Antwort auf die konkrete Frage: „Alle Übungen in den Prompt?“

Nein. Workflow:

  1. DB + Regeln + Graph + Historie reduzieren auf einige Hundert bis wenige tausend Rohzeilen höchstens intern aber
  2. in den LLM-Prompt gehen nur TopK kompakte Artefakte (siehe §2).

Das LLM löst dann Ranking, Reihenfolge, Timing-Hinweise, Trainer-sprachliche Kurzkommentare nicht die Frage „gibt es diese Übung überhaupt im System?“.


5. Vector DB (z.B. Qdrant) wann nötig, wann nicht?

5.1 Ziel embeddings

Semantic Retrieval: „wie springt Coordinative Belastung ohne das Wort Koordination im Titel zu stehen.“ Das ist über reine Filtersuche und oft über stumpfe Volltextsuche erreichbar.

5.2 Option A ohne separate Vector DB

  • PostgreSQL + pgvector (Extension): Embeddings-Spalte an exercises (oder an „Search Document“-Zeilen), Indices, Abfrage zusammen mit SQL-Filtern in einer Transaktions-DB.
  • Größenordnung einige 10k100k Zeilen für Übungen: für Shinkan oft ausreichend.
  • Vorteile: ein Betriebspfad, Mandanten-/Governance weiter in SQL lösen; Backup wie heute.

5.3 Option B Qdrant (oder anderer Dediz-Vektorstore)

Sinnvoller zeitlicher Punkt oder technische Auslöser:

  • sehr hohe Latenz-Anforderung mit Hybrid-Filter über viele kombinierte Metadaten in nahezu Echtzeit,
  • Entkopplung: Embedding-Pipeline läuft asynchron und soll die Operational DB nicht beschweren,
  • später mehrsprachig oder mehrere Embedding-Versionen/Re-Index ohne großen Migrationstress,
  • Team bevorzugt Dedicated Vector-Ops gegenüber Postgres-Ops.

5.4 Empfehlung für diese Codebasis (überarbeitungsfähig)

  1. Phase 1: Harte Filter + Graph + Historie + PostgreSQL-Volltext + TopK; LLM erst auf komprimierten Kandidaten → hoher Nutzen ohne neuen Infrastructure-Typen.
  2. Phase 2: Bei nachweisbaren „Recall-Lücken“ (Trainer findet nichts Passendes trotz großem Korpus) pgvector in Postgres evaluieren vor zusätzlicher Infrastruktur wie Qdrant.
  3. Phase 3: Qdrant (o. ä.) wenn Größenordnung, Betrieb oder Produkt-Anforderungen pgvector sprengen oder klar eine embedding-first Produktstraße geplant wird.

Fazit: Eine dedizierte Vector DB ist nicht zwingende Voraussetzung für vernünftige Selektion; sie ist eine Ausbaustufe, wenn semantische Lücke und Skalierung es rechtfertigen. Selektion ist immer „Filter + Ranking + kleines TopK“, unabhängig vom Speicherort der Vektoren.


6. Datenpflege für gutes Retrieval (fachlicher Hebel)

RetrievalQualität hängt stärker an Metadaten als an der Embedding-Technologie allein:

  • verlässliche Skills (exercise_skills, ggf. KI-geholfen bereits laut Spez beim Übungs-Anlegen);
  • sinnvolle summary-Felder für Karten/Liste/KI-Pack;
  • Progressionsgraph dort, wo pädagogische Ketten gefestigt sind;
  • konsistente Fokusbereich/Stil-Zuordnung.

Das fachliche Konzept sollte entscheiden: wie viel automatische Pflege vs. Trainer-Pflichtfelder.


7. Produkt-/Release-Stufen (Anknüpfung)

Stufe Nutzen Technik-Schwerpunkt
A Backend-KI-Service + Prompt-Slugs unter technical/AI_PROMPT_SYSTEM_SPEC.md OpenRouter, Timeouts, 503 ohne Key
B „Übungen für Abschnitt vorschlagen“ Pipeline §3 Stufen 13 + Prompt mit TopK
C Reihenfolge / Zeitslots innerhalb bestehender Sektion Graph + LLM Ranking
D Ganze Einheit (inkl. Phasen/Streams vereinfacht) strukturiertere JSON-Ausgabe, strikte Schema-Validation
E Mehreinheiten / RahmenAlignment Ziele aus Rahmenprogramm, Serie von Slots

Die SelektionsPipeline §3 bleibt über alle Stufen konsistent und wird nur parametrierbar erweitert.


8. Compliance & Datenschutz (Kurzhinweis)

  • Datenminimierung: keine Teilnehmerliste ohne expliziten Scope; Kontext über Einheiten-Metadaten und Übungen.
  • OpenRouter/Modellwahl: Organisation intern klären (AV/Verarbeitungsvertrag, Datenflüsse außerhalb EU siehe Repo-Compliance-Dokumente).
  • Logging: Prompts keine unnötigen personenbezogenen Daten; wenn Debug: Retention definieren.

9. Offene Punkte für die fachliche Verfeinerung

  • Gewichtung „Wiederholung vs. Progression vs. Motivation“ (domänenspezifisch).
  • Umgang mit Kombinationsübungen und Coach-Stufen B/C in der Datenübergabe.
  • Soll das System „Lücken“ aus der Matrix-Auflösung aktiv quantifizieren oder nur Narrative verwenden?
  • Akzeptierte Übersetzungen: nur Deutsch oder mehrsprachige Embeddings erforderlich?

10. Glossar

Begriff Bedeutung
TopK Feste kleine Obergrenze Übungen pro LLM-Anfrage
Hard filter Deterministische SQL-/Policy-Einschränkung vor KI
Kontext-Paket Zusammengesetztes, tokenlimitiertes Eingabeobjekt für den Prompt
Retrieval algorithmischer Schritt ohne Generierung („wer kommt überhaupt in Frage“)