75 lines
4.5 KiB
Markdown
75 lines
4.5 KiB
Markdown
# Taktik-Erkennungsmodul – Requirements
|
||
|
||
## Ziel und Rolle im System
|
||
- Ergänzt die vorhandene Engine- und LLM-Pipeline: wird nach der Engine-Analyse eingeschoben, bevor das LLM Feedback generiert.
|
||
- Aufgabe: Wenn der Spieler **nicht** den Engine-Bestzug gespielt hat, identifiziert das Modul, ob der Bestzug ein klassisches taktisches Motiv auslöst (z. B. Figurgewinn, Pin, Fork) und stellt diese Information strukturiert für das LLM bereit.
|
||
- Nichts bestehendes wird ersetzt; es liefert nur zusätzliche, konservative Taktik-Hinweise.
|
||
|
||
## Eingaben (pro Spielerzug)
|
||
- Ausgangsstellung als **FEN**.
|
||
- **Spielerfarbe**.
|
||
- **Gespielter Zug** des Spielers.
|
||
- **Engine-Bestzug** für die Ausgangsstellung.
|
||
- Optional: 1–2 Halbzüge der **PV** des Bestzugs (z. B. Bestzug + Antwort).
|
||
- Optional: **Eval-Infos** vor/nach dem Zug bzw. nach Bestzug, falls zur Filterung genutzt.
|
||
- Das Modul ruft selbst **keine Engine** auf; es nutzt nur bereitgestellte Daten.
|
||
|
||
## Ausgabe
|
||
- Liste erkannter Motive (leer, wenn nichts gefunden), jedes mit:
|
||
- `tactic_type` – z. B. `win_material`, `win_pawn`, `pin`, `fork`, `skewer`, `check`, `hanging_piece`, `improve_activity`, `none`.
|
||
- `affected_squares` – optionale Felderliste.
|
||
- `piece_roles` – beteiligte Figuren, inkl. Farbe (z. B. „weißer Läufer“, „schwarzer Springer“).
|
||
- `material_delta` – grobe Materialeinschätzung (Centipawns, z. B. +100 Bauer, +300 Leichtfigur).
|
||
- `move` – der Engine-Bestzug, auf den sich das Motiv bezieht.
|
||
- Diese Struktur wird an das LLM weitergereicht, damit es textuelle Hinweise erzeugt (z. B. „Mit Lxd5 hättest du einen Bauern gewinnen können“).
|
||
|
||
## Wann das Modul aktiv wird
|
||
- Nur prüfen, wenn der Engine-Bestzug **vom gespielten Zug abweicht**.
|
||
- Optionaler Filter: Eval-Verlust über Schwellwert (z. B. >50–100 Centipawns) als Signal für Relevanz.
|
||
- Ziel: Rechenaufwand sparen und Rauschen vermeiden.
|
||
|
||
## Ablauf pro relevanter Stellung
|
||
1. **Stellung herstellen**: FEN laden, Spielerfarbe setzen.
|
||
2. **Bestzug anwenden**: Hypothetisch Engine-Bestzug ausführen.
|
||
3. **Resultierende Stellung prüfen**: Regelbasierte Checks (ohne neue Engine-Aufrufe) für taktische Muster.
|
||
4. **Motive sammeln**: Alle erkannten Motive in strukturierter Form zusammenstellen.
|
||
5. **An LLM übergeben**: Zusammen mit gespielt vs. Bestzug und ggf. Eval-Verlust.
|
||
|
||
## Taktik-Checks (konservativ)
|
||
- **Materialgewinn / Capture**
|
||
- Prüfen, ob Bestzug eine gegnerische Figur/Bauern schlägt.
|
||
- Figurwert bestimmen; Plausibilität, dass die schlagende Figur nicht sofort mit klarem Materialverlust verloren geht.
|
||
- Ergebnis: `tactic_type` = `win_piece` oder `win_pawn`.
|
||
- **Pin / Fesselung**
|
||
- Nach Bestzug: greift ein Läufer/Turm/Dame eine gegnerische Figur an, hinter der auf derselben Linie König oder wertvolle Figur steht?
|
||
- Ergebnis: `tactic_type` = `pin`.
|
||
- **Fork / Gabel**
|
||
- Greift die ziehende Figur gleichzeitig ≥2 wertvolle gegnerische Ziele (z. B. König+Dame, Dame+Turm, zwei Leichtfiguren)?
|
||
- Ergebnis: `tactic_type` = `fork`.
|
||
- **Skewer**
|
||
- Linienangriff, bei dem eine höherwertige Figur vor einer weniger wertvollen steht und nach Abzug Material fällt.
|
||
- Ergebnis: `tactic_type` = `skewer`.
|
||
- **Schach / direkte Drohung**
|
||
- Bestzug gibt Schach; ggf. kombinieren mit PV-Infos, wenn das Schach Materialgewinn erzwingt.
|
||
- Ergebnis: `tactic_type` = `check` oder kombiniert mit Material-Hinweis.
|
||
- **Hanging Piece**
|
||
- Nach Bestzug ist eine gegnerische Figur angegriffen und unzureichend gedeckt.
|
||
- Ergebnis: `tactic_type` = `hanging_piece`.
|
||
- **Weiche Motive (optional/später)**
|
||
- Aktivitätsverbesserung, Outpost-Kontrolle, Königssicherheit.
|
||
- Ergebnis: `tactic_type` = `improve_activity` o. Ä.
|
||
|
||
## Qualität, Priorisierung und Konfiguration
|
||
- **Konservativ** melden: lieber weniger Motive als falsche Treffer.
|
||
- **Priorisierung** (wenn mehrere Motive): Materialgewinn > Fork > Pin > Check > positionelle Motive.
|
||
- **Konfigurierbar**: Schwellwerte für Eval-Verlust, Materialdelta, Prioritätsregeln je Spielstärke.
|
||
|
||
## Verhalten bei "nichts gefunden"
|
||
- Leere Motivliste oder `tactic_type = "none"` liefern.
|
||
- Damit kann das bestehende System weiterhin neutralere Hinweise geben (z. B. „Aktivierungschance verpasst“).
|
||
|
||
## Integrationshinweise
|
||
- Modul wird zwischen Engine-Auswertung und LLM-Ausgabe aufgerufen.
|
||
- Nutzt bereitgestellte Bestzug- und PV-Daten; keine zusätzlichen Engine-Anfragen nötig.
|
||
- Output-Format so halten, dass LLM klar referenzieren kann, was mit dem Bestzug möglich gewesen wäre.
|