All checks were successful
Deploy Trainer_LLM to llm-node / deploy (push) Successful in 2s
91 lines
3.3 KiB
Markdown
91 lines
3.3 KiB
Markdown
# WP-17 – Retriever & Composer (Kern ohne LLM)
|
||
|
||
## Projektkontext
|
||
Wir entwickeln eine deterministische Planerstellung aus bestehenden **plan_templates** und **exercises**.
|
||
WP-15 hat die Collections, Indizes und CRUD-APIs für `plan_templates` und `plans` produktiv geliefert.
|
||
WP-02 stellt die exercises-Collection mit Capabilities und Qdrant-Anbindung bereit.
|
||
|
||
**Technologie-Stack:** Python 3.12, FastAPI, Qdrant
|
||
|
||
---
|
||
|
||
## Ziele
|
||
Implementierung eines `/plan/generate`-Endpoints, der:
|
||
|
||
- Filter- und Vektor-Suche in Qdrant kombiniert
|
||
- Scoring nach Coverage, Diversity und Novelty durchführt
|
||
- Pläne deterministisch und ohne LLM generiert
|
||
- Zeitbudgets einhält und Wiederholungen (Novelty-Penalty) vermeidet
|
||
|
||
---
|
||
|
||
## Deliverables
|
||
1. **API**: POST `/plan/generate`
|
||
- Parameter: `discipline`, `age_group`, `target_group`, `goals`, `time_budget_minutes`, `novelty_horizon` (5), `coverage_threshold` (0.8), `strict_mode`
|
||
- Rückgabe: Plan-JSON mit Exercises-Referenzen und Metadaten
|
||
|
||
2. **Retriever**
|
||
- Filter-Layer (Payload)
|
||
- Vector-Layer (Ranking)
|
||
- Kombinierte Gewichtung
|
||
|
||
3. **Composer**
|
||
- Sections aufbauen (aus Template oder Default)
|
||
- Zeitbudget pro Section und Gesamt einhalten
|
||
- Strict-Mode: nur gültige `external_id`
|
||
|
||
4. **Scoring-Funktionen**
|
||
- Coverage (Capabilites-Abdeckung)
|
||
- Diversity (Variabilität)
|
||
- Novelty (Neuheit gegenüber Historie)
|
||
|
||
5. **Tests**
|
||
- Unit-Tests (Scoring, Filter)
|
||
- E2E: Template → Retriever → Composer → Persistenz
|
||
|
||
6. **Dokumentation**
|
||
- OpenAPI-Beispiele, Parametrierung, Konfigurationsoptionen
|
||
|
||
---
|
||
|
||
## Akzeptanzkriterien
|
||
- Identische Eingaben → identischer Plan (Determinismus)
|
||
- Keine doppelten Übungen im Plan
|
||
- Budget- und Coverage-Ziele in ≥95 % der Testfälle erreicht
|
||
- Novelty-Penalty wirkt wie konfiguriert
|
||
|
||
---
|
||
|
||
## Risiken
|
||
- Konflikte zwischen Budget, Coverage, Novelty (Priorisierung erforderlich)
|
||
- Geringe Übungsvielfalt → eingeschränkte Ergebnisse
|
||
- Performance-Einbußen bei großen Collections
|
||
|
||
---
|
||
|
||
## Technische Vorgaben
|
||
**Voreinstellungen:**
|
||
- `novelty_horizon`: 5
|
||
- `coverage_threshold`: 0.8
|
||
- Priorität bei Konflikt: 1. Budget, 2. Coverage, 3. Novelty
|
||
|
||
**Benötigte Dateien:**
|
||
- `llm-api/plan_router.py` (v0.13.4)
|
||
- `llm-api/exercise_router.py` (aus WP-02)
|
||
- `scripts/bootstrap_qdrant_plans.py` (v1.3.x)
|
||
- Schema-Definitionen für `plan_templates` und `plans`
|
||
- Beispiel-Datensätze (Golden-Cases)
|
||
- `.env` (ohne Secrets, mit API-URLs)
|
||
|
||
---
|
||
|
||
## Prompt für das Entwicklerteam (direkt nutzbar)
|
||
> **Rolle:** Entwicklerteam WP-17 – Retriever & Composer (Kern ohne LLM)
|
||
> **Aufgabe:** Implementiere `/plan/generate`, der deterministisch aus plan_templates und exercises Pläne generiert.
|
||
> Nutze Filter- und Vektor-Suche in Qdrant, Scoring-Funktionen (Coverage, Diversity, Novelty) und eine Composer-Logik, die Zeitbudgets einhält.
|
||
> **Parameter:** discipline, age_group, target_group, goals, time_budget_minutes, novelty_horizon=5, coverage_threshold=0.8, strict_mode.
|
||
> **Anforderungen:** Deterministische Ergebnisse, keine Duplikate, ≥95 % Zielerreichung bei Budget/Coverage, funktionierender Novelty-Penalty.
|
||
> **Rahmen:** Python 3.12, FastAPI, Qdrant, vorhandene plan_templates/plans/exercises-Collections.
|
||
> **Liefere:** Code, Unit- und E2E-Tests, OpenAPI-Doku mit Beispielen.
|
||
> **Dateien:** siehe Liste oben.
|