Files
chess-project/docs/tactic-detection-requirements.md
T
2025-11-26 15:16:08 +01:00

4.5 KiB
Raw Blame History

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: 12 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. >50100 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.