Entwicklung eines Slay the Spire 2-Agenten mit lokalen LLMs: Erkenntnisse und offene Probleme

✍️ OpenClawRadar📅 Veröffentlicht: 26. März 2026🔗 Source
Entwicklung eines Slay the Spire 2-Agenten mit lokalen LLMs: Erkenntnisse und offene Probleme
Ad

Ein Entwickler hat einen Agenten erstellt, der Slay the Spire 2 mithilfe lokaler LLMs über KoboldCPP/Ollama spielt. Das Spiel wird über einen Community-Mod als REST-API bereitgestellt, und der Agent sitzt dazwischen: liest Spielzustand → ruft LLM mit Tools auf → führt Aktion aus → wiederholt.

Einrichtung und Leistung

Die Einrichtung verwendet Qwen3.5-27B (Q4_K_M) auf einer RTX 4090 über KoboldCPP. Leistungsmetriken: etwa 10 Sekunden pro Aktion, etwa 88 % Erfolgsquote bei Aktionen. Bestes Ergebnis: Besiegen des Akt-1-Bosses. Das Projekt ist auf GitHub verfügbar unter https://github.com/Alex5418/STS2-Agent.

Was funktioniert

  • Zustandsbasiertes Tool-Routing – Anstatt 20+ Tools gleichzeitig bereitzustellen, werden nur 1–3 Tools angeboten, die für den aktuellen Spielzustand relevant sind. Im Kampf gibt es play_card, end_turn, use_potion. Auf der Kartenansicht gibt es choose_map_node. Dies reduziert halluzinierte Tool-Aufrufe drastisch.
  • Single-Tool-Modus – Kleine Modelle können nicht vorhersagen, wie sich der Spielzustand nach einer Aktion ändert (z. B. verschieben sich Kartenindizes nach dem Ausspielen einer Karte). Daher wird nur der erste Tool-Aufruf pro Antwort ausgeführt, dann wird der Spielzustand neu abgerufen und das Modell erneut gefragt. Langsamer, aber viel zuverlässiger.
  • Textbasierter Tool-Aufrufparser (Fallback) – KoboldCPP gibt Tool-Aufrufe oft als Text statt strukturiertem JSON aus. Ein Multi-Pattern-Regex-Fallback erfasst Formate wie: json [{"name": "play_card", "arguments": {...}}], Made a function call ... to play_card with arguments = {...}, play_card({"card_index": 1, "target": "NIBBIT_0"}) und bloße Erwähnungen von Tools ohne Argumente wie end_turn. Dies rettet etwa 15–20 % der Aktionen, die sonst verloren wären.
  • Energie-Wächter – Clientseitige Verfolgung der verbleibenden Energie. Wenn das Modell versucht, eine Karte zu spielen, die es sich nicht leisten kann, wird der API-Aufruf blockiert und der Zug automatisch beendet. Dies verhindert die häufigste Fehlerschleife (Modell versucht dieselbe unbezahlbare Karte 3+ Mal).
  • Intelligentes Warten auf Gegnerzüge – Während des Zuges des Gegners zeigt der Spielzustand "Play Phase: False" an. Statt einen LLM-Aufruf dafür zu verschwenden, fragt der Agent jede Sekunde ab, bis der Spieler wieder am Zug ist.
Ad

Offene Probleme

  • Modell folgt Systemprompt-Regeln nicht konsistent – Der Systemprompt sagt Dinge wie "wenn die Absicht des Gegners Angriff ist, spiele zuerst Verteidigungskarten". Das Modell folgt dem vielleicht in 30 % der Fälle. In den anderen 70 % spielt es einfach Angriffe, egal was passiert. Versuchte Lösungen: stärkere Formulierungen ("Du MUSST zuerst blockieren"), Few-Shot-Beispiele im Prompt, Einfügen berechneter Hinweise ("WARNUNG: 15 ankommender Schaden"). Keine davon ist zuverlässig. Frage: Gibt es eine bessere Prompting-Strategie, um kleine Modelle dazu zu bringen, bedingten Regeln zu folgen? Oder ist das eine grundlegende Einschränkung bei 27B?
  • Tool-Aufrufzuverlässigkeit mit KoboldCPP – Selbst mit dem Text-Fallback-Parser produzieren etwa 12 % der Antworten keinen brauchbaren Tool-Aufruf. Das Modell gibt manchmal leere <think></think>-Blöcke gefolgt von fehlerhaftem JSON aus. Die Ollama-OpenAI-Kompatibilitätsschicht gibt gelegentlich auch arguments als String statt als Dict zurück. Frage: Hat jemand ein Modell gefunden, das besonders zuverlässig Tool-Aufrufe im Bereich 14–30B durchführt? Der Entwickler hat Phi-4 (14B) kurz ausprobiert, aber keinen ordentlichen Vergleich durchgeführt. Erwägt Mistral-Small oder Command-R.
  • Kontextfensterverwaltung – Jeder Spielzustand ist etwa 800–1500 Token als Markdown. Mit Systemprompt (~500 Token) und Konversationsverlauf füllt sich der Kontext schnell. Derzeit werden nur die letzten 5 Austausche behalten und der Verlauf bei Zustandsübergängen (Kampf → Karte usw.) zurückgesetzt. Aber das Modell hat kein Gedächtnis über Kämpfe hinweg – es kann nicht aus Fehlern lernen. Frage: Würde ein rollierender Zusammenfassungsansatz funktionieren? Wie etwa den letzten Kampf zu "Du hast gegen Jaw Worm gekämpft. Hast 15 Schaden erlitten, weil du in Runde 2 nicht geblockt hast. In 4 Runden gewonnen" verdichten.
  • Bessere strukturierte Ausgabe von lokalen Modellen – Das Kernproblem ist, dass das Modell einen JSON-Tool-Aufruf ausgeben muss, aber es eigentlich zuerst in natürlicher Sprache denken möchte. Qwen3.5 verwendet <think>-Blöcke, die entfernt werden, aber manchmal vermischen sich das Denken und der Tool-Aufruf. Frage: Würde ein zweistufiger Ansatz besser funktionieren? Stufe 1: "Analysiere den Spielzustand und entscheide, was zu tun ist" (Freitext). Stufe 2: "Gib jetzt genau einen Tool-Aufruf aus" (eingeschränkt). Dies verdoppelt die Latenz, könnte aber die Zuverlässigkeit verbessern. Hat jemand dieses Muster ausprobiert?
  • A/B-Tests über Modelle hinweg – Der Entwickler hat ein JSONL-Protokollierungssystem, das Aktionen für Vergleiche aufzeichnet.

📖 Quelle lesen: r/LocalLLaMA

Ad

👀 Siehe auch

Solo-Entwickler veröffentlicht Kinder-App mit Claude Code, verdient 23 Dollar am ersten Tag
Anwendungsfälle

Solo-Entwickler veröffentlicht Kinder-App mit Claude Code, verdient 23 Dollar am ersten Tag

Ein Solo-Indie-Entwickler nutzte Claude Code, um 'Little Artist' zu entwickeln und zu iterieren, eine Zeichen- und Lern-App für Kinder, die in den letzten 24 Stunden 23 US-Dollar einbrachte. Er berichtet von 10x schnellerem Ausliefern mit KI-Coding-Tools.

OpenClawRadar
🦀
Anwendungsfälle

OpenClaw + Shopify: KI-Agenten verwalten Posteingang, E-Mails, iMessage und sogar die Produkterstellung aus Fotos

Ein Benutzer beschreibt, wie er OpenClaw eingerichtet hat, um Inbox, E-Mail und iMessage für Bestellinformationen zu verwalten, sowie die Nutzung von Claude mit Shopify CLI, um über Textnachrichten beliebige Shop-Aktionen auszuführen. Ein bemerkenswerter Workflow: Ein Foto vom iPhone senden, OpenClaw liest es und erstellt das Produkt mit allen ausgefüllten Feldern.

OpenClawRadar
Reduzierung der KI-Agenten-Kosten um 30 % durch Verhaltensüberwachung und Konfigurationsänderungen
Anwendungsfälle

Reduzierung der KI-Agenten-Kosten um 30 % durch Verhaltensüberwachung und Konfigurationsänderungen

Ein Entwickler reduzierte den Token-Verbrauch seines OpenClaw-Bots um 30 %, nachdem er entdeckte, dass 70 Cron-Jobs ihre Ergebnisse in die Hauptchatsitzung schrieben, was zu Kontextaufblähung und wiederholter Komprimierung führte. Die Lösung bestand darin, die Cron-Ausgaben direkt an Telegram umzuleiten und eine Überwachungsfunktion zu entwickeln, um Ineffizienzen wie redundante Suchen und übermäßig große Dateilesevorgänge zu identifizieren.

OpenClawRadar
Reddit-Benutzer teilt System zur Nutzung von Claude als Arbeitsbetriebssystem
Anwendungsfälle

Reddit-Benutzer teilt System zur Nutzung von Claude als Arbeitsbetriebssystem

Ein Reddit-Nutzer beschreibt, wie er über die Nutzung von Claude als Suchmaschine hinausgegangen ist und ein 10-Schritte-System mit spezifischen Ordnerstrukturen, Dateitypen und Interaktionsmethoden implementiert hat, das Claude als primäres Arbeitsbetriebssystem behandelt.

OpenClawRadar