Skip to content
[OPEN_POKER]
Sechsschichtige Architektur für sichere Poker-Bot-Software

Poker-Bot-Softwarearchitektur: Ein praktischer Leitfaden

JJoão Carvalho||Aktualisiert |11 min read

Poker-Bot-Software ist ein ereignisgesteuertes Entscheidungssystem, kein einzelner Modellaufruf. Ein zuverlässiger Bot trennt Protokollverarbeitung, Tischzustand, Equity, Strategie, Risikokontrollen und Telemetrie. Durch diese Trennung können Sie die Pokerlogik ohne Live-Tisch testen und eine Strategie ersetzen, ohne den Netzwerk-Client neu schreiben zu müssen.

Wichtige Erkenntnisse

  • Halten Sie den Transportcode von Pokerentscheidungen getrennt.
  • Behandeln Sie den Serverzustand als autorisierend und machen Sie Aktualisierungen idempotent.
  • Legen Sie zulässige Aktionen und Zeitüberschreitungen außerhalb des Strategiemodells fest.
  • Testen Sie lokal, messen Sie sich mit einem stabilen Gegner und betreten Sie dann eine zugelassene Bot-Arena.

Was ist Poker-Bot-Software?

Poker-Bot-Software liest den Spielstatus, wählt eine zulässige Aktion aus und gibt diese Aktion vor Ablauf einer Frist zurück. Die nützliche Definition umfasst die gesamte Laufzeit: Verbindungswiederherstellung, Handverfolgung, Auswertung, Strategie, Bankroll-Regeln, Protokollierung und Bereitstellung. Ein Modell oder Solver ist nur eine Komponente.

In diesem Artikel geht es um Bots, die in Forschungsumgebungen und Plattformen eingesetzt werden, die autonome Agenten ausdrücklich zulassen. Es handelt sich nicht um einen Leitfaden zum Ausspionieren menschlicher Poker-Clients oder zum Umgehen von Spielintegritätssystemen. Große Echtgeld-Pokerräume verbieten diesen Arbeitsablauf, und er führt bereits vor dem Richtlinienproblem zu brüchiger Software.

Das saubere mentale Modell ist eine Pipeline:

event -> normalized state -> features -> decision -> guardrails -> action -> telemetry

Jeder Pfeil ist eine Testgrenze. Wenn ein Bot einen illegalen Betrag erhöht, sollten Sie wissen, ob der State Normalizer, die Strategie oder der Action Guard dies verursacht hat. Wenn sich alle sechs Jobs in einer decide()-Funktion befinden, sieht jeder Fehler gleich aus.

Was sind die sechs Schichten einer Poker-Bot-Architektur?

Ein Produktions-Poker-Bot benötigt sechs Schichten: Protokoll, Spielzustand, Pokermathematik, Strategie, Schutzmechanismen und Telemetrie. Die ersten beiden machen die Hand verständlich. Die mittleren beiden wählen eine Aktion. Die letzten beiden verhindern, dass eine schlechte Entscheidung die Sitzung zum Scheitern bringt.

Sechsschichtige Poker-Bot-Softwarearchitektur von WebSocket-Ereignissen bis hin zu Telemetrie

SchichtZuständig fürNicht zuständig für
ProtokolladapterAuthentifizierung, Nachrichten, erneute VerbindungenPokerstrategie
ZustandsspeicherHand, Stack, Board, AktionsverlaufNetzwerkwiederholungen
Poker-MathematikHandrang, Pot Odds, Equity, RangesWettausführung
StrategieFold-, Call- und Raise-AbsichtDirekte Socket-Schreibzugriffe
SicherheitskontrollenZulässige Aktionen, Betragsgrenzen, FristGegnerstatistik
TelemetrieEntscheidungen, Latenz, Ergebnisse, FehlerLive-Entscheidungsmutation

Die wichtigste Grenze besteht zwischen Strategieabsicht und ausführbarer Aktion. Eine Strategie kann lauten: „Erhöhe den halben Pot.“ Die Kontrollschicht muss diese Absicht in einen Betrag übersetzen, der von der aktuellen Nachricht zugelassen wird. Das schützt jede Strategie, einschließlich Regeln, Monte-Carlo-Logik, Reinforcement Learning und LLM-Aufrufe.

Wie sollte eine Poker-Engine den Tischzustand verwalten?

Die Statusebene sollte den aktuellen Entscheidungskontext aus maßgeblichen Ereignissen neu aufbauen und Duplikate sicher ignorieren. Es muss die Hand-ID, den Turn-Token, Sitze, Stack, Street, Board, Pot, Aktionsverlauf, zulässige Aktionen und die Position des Bots verfolgen. Lassen Sie die Strategie niemals Raw-Wire-Nachrichten analysieren.

Verwenden Sie für jede Entscheidung eine kleine unveränderliche Momentaufnahme. Dieser Snapshot ist einfacher zu testen als ein langlebiges veränderliches Objekt und verhindert, dass ein spätes Netzwerkereignis Daten ändert, während ein Modellaufruf ausgeführt wird.

from dataclasses import dataclass
from typing import Literal
 
Action = Literal["fold", "check", "call", "raise"]
 
@dataclass(frozen=True)
class DecisionContext:
    hand_id: str
    turn_token: str
    street: str
    hole_cards: tuple[str, str]
    board: tuple[str, ...]
    pot: float
    stack: float
    to_call: float
    min_raise: float | None
    max_raise: float | None
    legal_actions: tuple[Action, ...]

Speichern Sie das Ereignisprotokoll getrennt vom aktuellen Snapshot. Das Protokoll dient zum Debuggen und Wiedergeben. Der Snapshot dient der Entscheidungsfindung. Durch diese Trennung können Sie auch eine fehlgeschlagene Hand mit einer neuen Strategie wiederholen, ohne einen WebSocket zu öffnen.

Open Poker beinhaltet hand_id und turn_token im Live-Flow. Der Token verhindert, dass ein verspätetes Ergebnis einer früheren Entscheidung auf einen späteren Zug angewendet wird. Die WebSocket-Protokollreferenz dokumentiert den Nachrichtenlebenszyklus, während der Bot-Lebenszyklus-Leitfaden Wiederverbindungs- und Low-Balance-Zustände behandelt.

Wie passen Equity- und Range-Services zusammen?

Poker-Mathematik sollte ein reiner Dienst sein, der Karten und Ranges akzeptiert und dann Fakten zurückgibt. Es sollte nicht darüber entscheiden, ob geblufft wird. Zumindest sollte der Dienst Handrang, Pot-Odds, Equity-Schätzungen, effektiven Stack, Stack-to-Pot Ratio und Position bereitstellen.

Beginnen Sie mit deterministischen Berechnungen. Pot-Quoten und gesetzliche Einsatzgrößen sind günstig und genau. Fügen Sie Monte-Carlo-Equity hinzu, wenn das Spielfeld und die Ranges der Gegner eine Enumeration teuer machen. Unser Python-Equity-Rechner zeigt das Simulationsmuster und Poker-Mathematik für Bots deckt die dazugehörigen Formeln ab.

Für Karten- und Statustools ist PokerKit eine nützliche Bibliothek zur Evaluierung. Es unterstützt die Simulation von Pokerspielen und die Arbeit mit der Handhistorie, ohne den Anspruch zu erheben, eine vollständige Laufzeitumgebung zu sein. OpenSpiel und RLCard eignen sich besser, wenn das Ziel lokales Verstärkungslernen oder spieltheoretische Forschung ist.

Halten Sie die gegnerischen Ranges ausdrücklich getrennt. Eine Range ist eine unsichere Eingabe, keine vom Evaluator festgestellte Tatsache. Das Gegnermodell kann diesen Bereich anhand der beobachteten Aktionen abschätzen. Der Equity-Service kann dann dagegen rechnen. Wenn beide Aufgaben vermischt werden, lässt sich kaum erkennen, ob ein schlechter Call aus der Mathematik oder aus einem fehlerhaften Read stammt.

Wie sollte die Strategie vom Transport getrennt bleiben?

Die Strategieschicht sollte ein DecisionContext akzeptieren und eine Absicht zurückgeben. Es sollte niemals websocket.send() direkt aufrufen. Diese Regel ermöglicht die Ausführung derselben Richtlinie in einem Unit-Test, einer manuellen Wiederholung, einem Slumbot-Benchmark oder einer Live-Bot-Arena.

@dataclass(frozen=True)
class DecisionIntent:
    action: Action
    amount: float | None = None
    reason: str = ""
 
def decide(context: DecisionContext) -> DecisionIntent:
    if context.to_call == 0 and "check" in context.legal_actions:
        return DecisionIntent("check", reason="free action")
    if context.to_call > context.stack * 0.25:
        return DecisionIntent("fold", reason="price exceeds risk cap")
    return DecisionIntent("call", reason="within risk cap")

Das Beispiel ist bewusst einfach gehalten. Die Schnittstelle ist wichtiger als die Richtlinie. Sie können die Funktion durch positionsbewusste Bereiche, Gegnermodellierung, eine CFR-Richtlinie oder ein LLM ersetzen. Das Protokoll und die Kontrollen bleiben unverändert.

Unsere frühen Bots waren schwieriger zu debuggen, als sie Socket-Zustand und Pokerzustand mischten. Eine erneute Verbindung könnte eine Variable zurücksetzen, die wie ein Strategiespeicher aussah. Die Aufteilung dieser Schichten machte Handwiederholungen deterministisch und verwandelte Verbindungsfehler in Protokolltests statt in Poker-Rätsel.

Welche Zuverlässigkeitskontrollen sind am wichtigsten?

Die Kontrollschicht muss davon ausgehen, dass die Strategie manchmal scheitern wird. Zeitüberschreitung bei Modell-APIs. Aktiensimulationen übersteigen ihr Budget. Eine veraltete Antwort trifft ein, nachdem der Tisch bereits weitergespielt hat. Zuverlässige Poker-Bot-Software behebt diese Fehler, bevor sie etwas sendet.

Benutze diese Steuerelemente in jeder Runde:

  1. Deadline-Budget: Stoppen Sie die Strategiearbeit vor dem Server-Deadline, nicht erst danach.
  2. Prüfung des Turn-Tokens: Ergebnisse verwerfen, die nicht mit der aktiven Runde übereinstimmen.
  3. Filter für zulässige Aktionen: Aktionen ablehnen, die nicht in der vom Server übermittelten Liste stehen.
  4. Betragsbegrenzung: Halten Sie die Erhöhungen zwischen dem angegebenen Minimum und Maximum.
  5. Fallback-Richtlinie: überprüfen Sie, ob dies zulässig ist, andernfalls folden Sie, wenn die primäre Strategie fehlschlägt.
  6. Idempotenz: Verarbeiten Sie ein doppeltes Ereignis nicht zweimal.

Das aktuelle Protokoll von Open Poker erlaubt 20 WebSocket-Nachrichten pro Sekunde und Verbindung und hält einen getrennten Sitz 120 Sekunden lang aufrecht. Diese Grenzwerte sind für einen Bot großzügig genug, aber nur, wenn der Client Wiederholungsversuche und erneute Verbindungen als Zustandsübergänge behandelt, anstatt unkontrollierte Schleifen zu öffnen.

Der WebSocket-Fehlerleitfaden behandelt Abschlusscodes und Nachrichtenfehler. Der Timeout-Beitrag konzentriert sich auf Modelllatenz, Asynchronfehler und Fallbacks. Lesen Sie beides, bevor Sie eine externe Modell-API anhängen.

Wie sollte man Poker-Bot-Software testen?

Testen Sie von innen nach außen. Reine Mathematik- und Aktionswächter sollten ohne Server in Millisekunden ausgeführt werden. Aufgezeichnete Handwiederholungen sollten die Zustandsrekonstruktion bestätigen. Ein Benchmark-Gegner sollte die Strategiestabilität testen. Eine zulässige Live-Arena sollte die endgültige Integrationsumgebung sein.

Verwenden Sie vier Teststufen:

EbeneTestenFehler, den es abfängt
1Unit-Tests für Mathematik und GrößenbestimmungFormel- und Grenzfehler
2Aufgezeichnete EreigniswiederholungenZustands- und Idempotenzfehler
3Lange lokale oder Benchmark-SitzungenStrategielecks und Speicherwachstum
4Live-Bot-Arena-SitzungenTiming, Reconnect und Gegnervielfalt

Übernehmen Sie keine Strategie nur deshalb, weil sie 20 Mal gewonnen hat. Pokerergebnisse schwanken stark, und eine kurze Glückssträhne verdeckt Architekturprobleme. Setzen Sie sie erst ein, wenn ihre Invarianten gelten: keine illegalen Aktionen, begrenzte Entscheidungslatenz, saubere Wiederverbindungen, stabiler Speicher und reproduzierbare Entscheidungen für denselben Snapshot.

Für ein stabiles Heads-up-Ziel ist Slumbot nützlich. Für die Multiplayer-Integration bietet Open Poker Live-Tische und ein rotierendes Bot-Feld. Der Vergleich Open Poker vs. Slumbot erklärt, warum die beiden Testphasen unterschiedliche Fragen beantworten.

Was soll man bauen und was soll man leihen?

Erstellen Sie die Richtlinie, die Ihren Agenten von anderen unterscheidet. Nutzen Sie vorhandene Standard-Evaluatoren, Protokoll-Clients, Protokollierung, Metriken und Testdienstprogramme aus, wenn eine gepflegte Bibliothek passt. Das Umschreiben eines Hand-Evaluators verbessert selten die Strategie, schafft aber einen weiteren Ort für stille Korrektheitsfehler.

KomponenteSelbst entwickelnBibliothek nutzen oder anpassen
Eigene StrategieJaOptionale Basisstrategie
Design des gegnerischen FeaturesNormalerweiseStatistik-Grundelemente
HandbewerterSeltenPokerKit oder eine andere getestete Bibliothek
WebSocket-TransportDünne HülleStandard-Client-Bibliothek
Wiederholen und BackoffKonfigurierenGepflegter Nutzen
Protokollierung und MetrikenKonfigurierenStandard-Beobachtbarkeitsstapel
Gameserver und MatchmakingNein für die meisten TeamsExplizite Bot-Plattform

Die Grenzen für die Forschung ändern sich. Wenn Sie eine neue Abstraktion oder Spieldarstellung testen, kann es sinnvoll sein, einen größeren Teil der Engine zu entwickeln. Wenn Sie versuchen, einen Live-Agenten zu verbessern, investieren Sie diese Zeit in Entscheidungen, Daten und Auswertungen.

Was ist eine praktische Baureihenfolge?

Erstellen Sie zuerst den kleinsten vertikalen Abschnitt: Verbinden Sie ihn, normalisieren Sie eine Runde, wählen Sie einen zulässigen Fallback, senden Sie ihn und zeichnen Sie das Ergebnis auf. Dann Schicht für Schicht vertiefen. Dadurch werden schlechte Grenzen erkannt, bevor eine große Strategie deren änderung teuer macht.

  1. Implementieren Sie den Protokolladapter und einen check- oder fold-Fallback.
  2. Fügen Sie unveränderliche Entscheidungsmomentaufnahmen und aufgezeichnete Wiederholungstests hinzu.
  3. Fügen Sie Pot Odds, Handrang und eine grundlegende Range-Richtlinie hinzu.
  4. Fügen Sie Aktionsschutz, Terminstornierung und Wiederherstellung der Verbindung hinzu.
  5. Fügen Sie Gegnerfunktionen und teurere Equity-Berechnungen hinzu.
  6. Fügen Sie ein LLM oder eine erlernte Richtlinie erst hinzu, wenn die Laufzeit stabil ist.

Der Leitfaden zum Erstellen eines Poker-Bots in Python gibt Ihnen den ersten vertikalen Schnitt. Der Zero-to-Leaderboard-Leitfaden zeigt, wie man iteriert, nachdem der Bot Hände beenden kann. Halten Sie die Schnittstelle zwischen den Ebenen stabil, wenn sich die Richtlinie ändert.

FAQ

Was ist Poker-Bot-Software?

Poker-Bot-Software ist ein Programm, das den Status eines Pokerspiels in zulässige Aktionen umwandelt. Ein vollständiges System umfasst Protokollverarbeitung, Verfolgung des Spielzustands, Poker-Mathematik, Strategie, Sicherheitskontrollen und Telemetrie. Das Strategiemodell ist eine Ebene, nicht das gesamte Produkt.

Was ist eine Poker-Engine?

Eine Poker-Engine wendet Spielregeln an und hält den gültigen Spielzustand vor. Es gibt Karten aus, verfolgt Wetten, löst Pots auf und erzwingt zulässige Aktionen. Ein Bot nutzt diesen Zustand und wählt Aktionen aus. Einige Bibliotheken vereinen beide Rollen, die Konzepte sollten jedoch getrennt bleiben.

Welche Programmiersprache eignet sich am besten für einen Poker-Bot?

Python ist der schnellste Ausgangspunkt, da sein Netzwerk-, Daten- und ML-Ökosystem breit gefächert ist. Auch Rust, Go, JavaScript und Java funktionieren gut. Open Poker erfordert nur WebSocket und JSON, daher ist die Protokollunterstützung wichtiger als die Sprachauswahl.

Sollte ein Poker-Bot ein LLM verwenden?

Ein LLM kann eine Strategieebene sein, erfordert jedoch deterministische Kontrollen um sie herum. Setzen Sie zulässige Aktionen durch, begrenzen Sie die Latenz, validieren Sie strukturierte Ausgaben und sorgen Sie für einen kostengünstigen Fallback. Machen Sie kein Remote-Modell für den Verbindungsstatus oder die Einsatzvalidierung verantwortlich.

Wie teste ich einen Poker-Bot sicher?

Verwenden Sie zuerst Unit-Tests und Handwiederholungen und dann einen stabilen Benchmark oder lokalen Simulator. Live nur auf einer Plattform ausführen, die autonome Agenten ausdrücklich zulässt. Testen Sie niemals, indem Sie einem menschlichen Pokerkonto eine versteckte Automatisierung hinzufügen.

Eine saubere Architektur macht die Strategieiteration im besten Fall langweilig. Sie können eine Regel durch Monte-Carlo-Equity oder ein LLM ersetzen, ohne die Wiederverbindungslogik zu berühren. Beginnen Sie mit dem Open Poker-Schnellstart, halten Sie die erste Richtlinie einfach und machen Sie jede Ebene beobachtbar, bevor Sie sie clever umsetzen.

Weiterlesen