Also Backgammon kennt es nicht so richtig
Juhu, mein Backgammon-Quiz läuft. Und es war ein Riesen-Gewürge, bis es das tat - ein gutes Beispiel, warum man vorsichtig sein muss mit Aussagen wie "Jeder kann mit Hilfe von AIs Software entwickeln". Denn am Schluss bin ich nach ein paar Stunden ohne Fortschritt einer hilflosen AI im Debugger durch den Code gesteppt, um den Fehler "von Hand" zu finden.
Aber von Anfang an...
Das Backgammon-Quiz
Ich bin ein begeisterter Backgammon-Spieler. Das begann irgendwann in den 90ern, als ich (ernsthaft) mit der Faust so auf mein Toshiba-Notebook schlug, dass ich ein Neues kaufen musste. Ein Backgammon-Programm namens Jellyfish vernichtete mich in einem einfachen Glücksspiel namens Backgammon wieder und wieder, es war zum Haare ausraufen (oder zum Rechner zerstören). Gemeinerweise kostete die Vollversion des Programms 200 DM. Vernichtet wirst du umsonst, aber herausfinden, was der richtige Zug ist, kostet dich einen Batzen Geld.
Seitdem weiß ich, dass Backgammon zwar ein Glücksspiel ist, dass das Finden des besten Zuges aber eine Kunst ist, und selbst einfachste Stellungen komplexe Wahrscheinlichkeitsberechnungen erfordern. Ja, ich habe etwa 10 Backgammon-Bücher gelesen, komme aber nicht über die Schwelle, wo man dauerhaft pro Zug einen Fehler macht, der weniger als 1/50 einer Partie verliert (einfach ausgedrückt).
Also hatte ich die Idee eines Backgammon-Quizzes. Die App analysiert alle meine abgeschlossenen Partien auf dem Backgammon-Server namens dailygammon, merkt sich alle meine Fehler, und schlägt mir in den Positionen, in denen ich falsch gezogen bin, in einem Multiple Choice Quiz meinen Zug, den besten Zug und ein paar weitere Züge vor. Ich tippe, und es sagt mir, ob ich richtig liege.
Altmodisch aber cool - DailyGammon
Klingt einfach.
Ist es nicht, Teil 1 - Gnu Backgammon als End-Boss 1
Ist es aber nicht. Die App muss
1. Sich als ein User bei Dailygammon einloggen
2. Dort HTML-Seiten analysieren und aus einer Backgammon-Notation für Menschen Matches extrahieren
3. Für jede Position jedes Matches die open source Software "Gnu Backgammon" aufrufen, damit diese ein Python-Skript ausführt, um die Stellung zu analysieren und das Ergebnis in eine JSON-Datei zu speichern
4. Falls mein Zug ein "Blunder" war, die bis zu vier Quiz-Züge wählen und die Stellung zusammen mit den Zügen als Quiz-Frage-Kandidat speichern.
5. Ein schönes Backgammon-Brett in HTML/JS malen, Endpoints für das Sammeln der Züge und das Quiz drunter in node.js haben.
6. Die Quiz-Logik implementieren.
Eine wesentliche Idee dabei war, die jeweilige Stellung im Match in der sogenannten "Gnu ID" zu speichern. Vermutlich war das mein Fehler #1. Die Gnu-Id ist nämlich sehr "AI Sperrig". Sie ist recht sauber bei Gnu spezifiziert: https://www.gnu.org/software/gnubg/manual/gnubg.html#gnubg-tech_matchid
Auszug aus der GnuID Beschreibung
Aber was für mich eine eklige aber einfache Aufgabe gewesen wäre - die Stellung und Match-Informationen erst binär und dann Base64 kodieren, hat Cursor + GPT5 überfordert. Stundenlang habe ich fehlerhafte Ids gefunden, analysiert, Vorschläge gemacht, was falsch ist, die Korrektur angesehen.
Mein zweiter, schwererer Fehler spielte hier eine erste Rolle, nämlich meine Annahme, das LLM kenne Backgammon gut. Backgammon ist aber für eine Maschine recht unintuitiv. Fallst du es nicht kennst: Stell dir vor du sitzt deinem Gegner gegenüber, zwischen Euch das Backgammon Brett. Nicht nur, dass du nicht vor oder zurück fährst wie im Schach, nein, deine Steine wandern erst von dir aus gesehen von rechts oben nach links oben, hüpfen dann nach links unten, um dann rechts unten im Ziel zu sein. Und wenn du auf ein Feld deutest, etwa auf das Feld 18, dann ist dieses Feld für deinen Gegner das Feld 7 (generell 25 - dein Feld). Ich glaube inzwischen, all das, vor allem mit den verschiedenen Feldnummern, wusste GPT-5 nicht.
Und so kam es, dass Schritte 1 und 2 in minutenschnelle sauber erledigt waren (HTML-Code pasten, Wunsch aufschreiben, fertig), aber wir an Schritt 3 Tage gesessen sind, die Maschine Test-Skripte geschrieben hat, um Gnu-Ids zu lesen, zu schreiben, zu dekonstruieren usw. Irgendwann lief dieser Teil, doch es wurde nicht besser.
Teil 2 - ein UI bauen
Das UI samt Endpoints drunter baute das LLM wie erwartet schnell. Es gab ein paar Missverständnisse. Der "BAR" muss senkrecht sein, nicht waagrecht, und - hier fiel es mir erstmals auf - die Zahlen der Felder aus Sicht des Spielers haben einige Dialoge mit der Maschine gebraucht.
Ging aber alles ganz ordentlich. Und mit einer CSS-Magic, die mich Staunen ließ, der ich nur CSS-Basics kenne.
Das Quiz-UI
Teil 3 - der Test. Wieder und wieder
Und so hatte ich dann doch schneller, als wenn ich das handprogrammiert hätte, mein Quiz.
Nur waren etwa 30% der Quiz-Stellungen totaler Unsinn. Illegale Stellungen; Züge, die in den Stellungen unmöglich sind.
Der "Vibe-Ansatz", der Maschine Fehlersituationen zu zeigen und sie analysieren zu machen, kam nicht voran. Stunden vergingen ohne Erfolg.
Am Schluss musste (hier menschlich mieses Überlegenheitsgrinsen vorstellen) halt doch der Mensch an den Debugger.
Es stellte sich heraus, dass die App das Schlagen eines Steines falsch implementiert hatte, weil es nicht kapiert hatte, dass sein Feld 7 mein Feld 18 ist. Die App hatte das Brett zweimal repräsentiert - einmal 24 Felder, die leer oder mit meinen Steinen besetzt waren, einmal das gleiche für den Gegner. Wenn ich also z.B. von 23 auf 18 fahre, und dort einen Stein schlage, muss ich die Stein-Zahl von 23 um eins erniedrigen, die auf 18 erhöhen, und seine Stein-Zahl NICHT auf 18, sondern auf 7 erniedrigen (und auf 25 erhöhen, das besondere BAR-Feld).
Am Schluss ein ganz trivialer Fehler. Aber einer, der ohne menschliche Entwicklungskenntnisse nie behoben worden wäre (bin übrigens auch mit Claude 4.5 Sonnet und dem mir suspekten GPT-5 Codex an das Problem gegangen; die waren ähnlich verwirrt).
Da ist er. Der Bug.
Was gelernt?
Vermutlich war mein größter Fehler, dem LLM nicht vorab den Umfang seiner Backgammon-Kenntnisse zu entringen bzw das Spiel präzise zu spezifizeren. Lieber über- als unterspezifizieren - das ist meine Haupt-Erkenntnis aus dem Drama.
Vermutlich war ich insgesamt immer noch deutlich schneller als ich das manuell gewesen wäre, aber auch deutlich weniger genervt...
Der (unzureichende) Prompt als Referenz
Hier der Anfang des Prompts. Man beachte: ich erkläre Backgammon nicht. Überhaupt nicht. Mit keinem Wort. Blöd.
Let's create an app for users of the site "dailygammon.com". This site only uses HTTP to play off-line backgammon matches.
When a match is completed, the player can export it as a text file for later analysis.
Our app shall have the following purpose: A player of the web site "http://dailygammon.com" can use the App's UI to select a time range from today to n days in the past. Our app will then contact dailygammon.com to retrieve text files with all finished matches in that timeframe.
The app will also have a way to select a number n of positions.
Then the app will contact a backgammon engine, and analyze all these matches. It will gather the top n mistakes that the player was making in these matches. For each of the positions where the player made a big mistake, it will show a quiz where the player can select one of four moves - the best move, the player's actual move, the second best move and a random move. The player then can select the move and get the answer if he was right. The results shall be stored in a simple database so that the player can keep a library of positions he failed in for continous training.