KI-Agents

Dein Modell denkt, War3AI setzt es um

Damit ein Agent in einer echten Umgebung selbst etwas erreicht, braucht er drei Dinge: klar formulierbare Aktionen, verständliches Feedback und eine Umgebung, in der Fehler nichts kosten. Genau dazu haben wir Warcraft III umgebaut.

Designprinzipien

Warum Agents hier selbst ans Ziel kommen

Üblicherweise lässt man eine KI spielen, indem man Maus und Tastatur simuliert und das Bild auswertet – ob etwas geklappt hat, bleibt Raterei. Wir gehen den umgekehrten Weg und entwerfen jede API von der Frage aus, was ein Modell braucht, um sich selbst zu korrigieren.

Nur sagen, was passieren soll

Bewegen, angreifen, bauen, zaubern … Semantische Befehle entsprechen direkt den Aktionen eines Spielers; Einheiten per Rawcode, Fähigkeiten per Order-String, wie im Spiel. Das Modell braucht keinerlei Low-Level-Wissen.

Strukturiertes Feedback für jede Aktion

Die Quittung kommt im selben Frame zurück: angenommen oder nicht, Reason-Code, Order vor und nach dem Befehl, Ausführungszeit. „Warum hat es nicht geklappt?“ ist eine Zahl, keine Vermutung.

Ergebnisse ohne Bildschirm

Der Snapshot zeigt, wie es gerade aussieht, der Event-Stream, was passiert ist: jeder Treffer, jeder Kill, jede fertige Produktion. Der Agent kann seine eigenen Annahmen überprüfen.

Die Docs sind die API

api.json wird aus dem Code generiert, jede der 103 Methoden ist mit Teststatus und Mechanismus versehen; mit llms.txt liest man die ganze Website auf einmal. Das Modell hat keinen Grund, Methoden zu erfinden.

Fehler sind ungefährlich

Wirft der Bot eine Ausnahme, geht es im nächsten Tick weiter; Befehle nach Ablauf ihrer Deadline werden nicht mehr ausgeführt; stürzt der Bot-Prozess ab, läuft das Spiel weiter. Der Agent kann gefahrlos ausprobieren.

Fair vom ersten Tag an

Der Fair-Modus liefert nur, was in Sicht ist – wie die Arena-Regeln. Was ein Agent lokal lernt, funktioniert später auf der Arena ohne eine Zeile Änderung.

01 Offline · Code schreiben

Agent schreibt den Bot

Der schnellste Einstieg, ganz ohne Programmierkenntnisse. Gib das Handbuch, api.json und ein Beispiel an Claude Code, Cursor, Codex oder ein beliebiges Chat-Modell und beschreib die Spielweise in Alltagssprache. Heraus kommt eine Python-Datei, die von openwar3.Bot erbt – ein Befehl, und sie spielt.

  • Die Prompt-Vorlage enthält die 15 „im Live-Spiel gelernten Regeln“
  • Nur Methoden aus api.json erlaubt – nichts wird erfunden
  • Fehlermeldungen unverändert zurückgeben, Beobachtungen beschreiben, nachbessern lassen
Vollständige Prompt-Vorlage
Du
Menschen; zum Start 5 Bauern auf Gold, 1 auf Holz; zuerst den Erzmagier; zwei Kasernen für Fußsoldaten und Schützen; bei 12 Einheiten mit dem Helden die gegnerische Expansion angreifen; fällt der Held unter 30 % HP, zurück nach Hause.

Gut, ich halte mich an die Struktur von rush_bot.py und nutze nur Methoden aus api.json:

  • Abbauen nur mit idle_workers(), 5 pro Mine
  • Kasernen-Warteschlange nur 1, Nahrungsengpass über production().blocked
  • Angriffsziel per path_distance wählen, per attack_move zur Expansion
  • Held unter 30 % HP per move nach Hause, tot per revive zurück
my_bot.py · 96 Zeilen
$ python tools/play.py --bot brains/my_bot.py --race 1
02 Offline · Kreislauf

Lass den Agent selbst iterieren

Ein Coding Agent, der Befehle ausführen kann, übernimmt auch „Spiel starten, Ergebnis prüfen“. Gib ihm einen unbeaufsichtigten Befehl, einen strukturierten Spielbericht und ein klares Ziel – dann verbessert er Runde um Runde.

  1. Starten play.py --speed 200 --minutes 10 --fair
  2. Lesen Spielbericht: Produktions-Timeline, Verluste, häufigste Ablehnungsgründe
  3. Ändern die Stelle mit der größten Wirkung, Begründung im Kommentar
  4. Wiederholen und nach mehreren Runden ohne Fortschritt anhalten und berichten
Spielbericht & Aufgabenvorlage
run_1790237551.json Beispiel
{
  "reason": "到时间了",
  "clock": 612.4,
  "timeline": [
    [15, "training", "hpea"],
    [118, "construction", "hbar"],
    [161, "training", "Hamg"],
    [402, "upgrade", "hkee"]
  ],
  "lost":   {"hfoo": 7, "Hamg": 1},
  "killed": {"ogru": 4, "ngno": 6},
  "rejects": [
    ["train hfoo: rejected(人口不够)", 41],
    ["attack ogru: rejected(目标看不见…)", 9]
  ]
}

Am häufigsten abgelehnt: „nicht genug Nahrung“, 41-mal – die Kaserne wartet ständig auf Nahrung. Nach Regel 12: Sobald production().blocked auftaucht, sofort eine Farm bauen, statt zu warten, bis die Nahrung fast voll ist. In dieser Runde ändere ich nur diese eine Stelle.

03 Online · Coach

LLM als Strategie-Coach

„Was ansparen, wohin mit den Arbeitern, in dieser Minute angreifen oder abwarten?“ – solche Urteile mit Blick aufs Ganze und klaren Prioritäten widersprechen sich als if / else ständig, sind aber genau die Stärke von LLMs. Das Referenz-Brain fragt alle 20 Spielsekunden ein lokales Modell und bekommt striktes JSON zurück.

Keine direkten Einheitenbefehle: nur Ziele und Prioritäten ändern – die Befehlsgewalt hat genau einen Besitzer
Asynchron: blockiert nie einen Tick; bei Timeout oder Unsinn gilt die Schicht als nicht vorhanden
Whitelist + Clamping: Unbekanntes wird gezählt und verworfen
Alles gezählt: Erfolge, Timeouts, geclampte und übernommene Vorschläge – alles sichtbar
Schichten, Vertrag und Implementierungsgerüst
LLM (Coach)Alle 20 Spielsekunden · asynchron
{
  "diagnosis": "Gold 820, Holz 60 – Holz ist der Engpass, die Kaserne steht mangels Holz still",
  "workers":   {"gold": 10, "lumber": 7},
  "priority":  ["hpea", "hhou", "hfoo"],
  "posture":   "hold",
  "avoid":     ["Bei Holzmangel nicht zuerst Rüstung erforschen"]
}
Whitelist + Clamping + Veto
Regelschicht (jeder Tick)Macht aus Ratschlägen Gewichtungen

Arbeiterverteilung 10 / 7 · Ausbildungspriorität hpea → hhou → hfoo · Haltung hold

Semantische Befehle
Ausführungsschicht (SDK / Reflex-Schicht)ca. 1 Frame

Befehle erteilen, Quittungen lesen, Mikro

1.09 s Median-Latenz · max. 1.45 s · 5/5 Ausgaben direkt parsebar
Lokales Qwen3.6-35B-A3B (LM Studio)
04 Online · Rollenspiel

Einheiten zum Sprechen bringen

Jede Einheit, jede Rolle – Sprechblasen über dem Kopf, mehrere Einheiten gleichzeitig, jede Blase individuell gestaltbar. Mit einem lokalen LLM geht ein Satz rein, und die Antwort erscheint gestreamt über der Einheit. Bauern-Kaffeeklatsch, Heldendialoge und Kampfkommentar sind fertig eingebaut.

0.3 s Latenz bis zum ersten Token
32 Blasen gleichzeitig
0.1~0.2 ms Kosten pro Frame
Sprechblasen-API & Modellwahl
Bergkönig Angriff! Nur noch diesen Schluck, dann los!
Erzmagier Ich zaubere einen Blizzard.
Bauer · Horst Schon wieder hat mich die KI zum Goldschürfen als Trainingsdaten eingespannt …
POST http://127.0.0.1:8872/api/chat
{
  "inst": 16, "unit": "0x14A12614", "name": "Bergkönig",
  "persona": "Du spielst den Bergkönig: rau, herzlich, trinkfest, ein, zwei Sätze Umgangssprache",
  "message": "Da vorne ist ein Haufen Oger. Greifen wir an?",
  "stream": true
}
→ {"reply": "Angriff! Nur noch diesen Schluck, dann los!",
   "first_token_ms": 283, "total_ms": 342}
05 Online · Begleiter

KI-Begleiter

Hol dir auf RPG- und Custom Maps einen KI-Partner an die Seite: Er folgt dir, hilft beim Kämpfen, heilt dich, wenn du angeschlagen bist, und plaudert mit dir, wenn gerade nichts los ist – die Sätze können von einem lokalen LLM kommen. Eine Klasse erben, ein paar Attribute ändern – schon ist es dein eigener Begleiter.

In jedem Tick der Reihe nach geprüft – was zutrifft, wird ausgeführt

  1. Rückzug selbst angeschlagen und Gegner in der Nähe: hinter dich zurückziehen
  2. Heilen deine HP sind niedrig und die Fähigkeit ist bereit: einmal heilen
  3. Mitkämpfen zuerst, wer dich angreift, dann, wen du angreifst
  4. Folgen zu weit weg: aufschließen; sehr weit weg: direkt zurücklaufen
  5. Plaudern wenn kein Kampf läuft, alle ein, zwei Minuten ein Satz
Verbündeter Belegt einen freien Spielerslot, mit eigener Farbe und eigenem Namen
Eigene Einheit Wird unter deinem Namen erzeugt, du kannst sie jederzeit selbst steuern
Übernehmen Übernimmt Haustiere und Gefolge, die dir die Karte gibt
Nur sprechen Ändert die Welt nicht, funktioniert auch im Multiplayer
Doku zum RPG-Begleiter
Begleiter · Lumi
Gerade: hilft dir kämpfen Laune: begeistert Kills 12 · Heilungen 5
Du -follow
Lumi Verstanden, ich bleib bei dir!
Du -heal
Lumi Heiliges Licht – sei geheilt!
Lumi Stark! Wieder ein amphibischer Gefolgsmann erledigt.

Im Chat -follow / -stay / -heal / -hi eingeben oder ihn per Rechtsklick ansprechen

06 Online · Als Tool

LLM ruft Tools direkt auf

MCP-fähige Clients – Claude Code, Claude Desktop, Agent-Frameworks für lokale Modelle – binden war3_mcp.py ein, und schon kann das LLM direkt die Lage sehen, Befehle erteilen, auf dem Bildschirm mit dem Spieler sprechen, ihm Karten zur Auswahl zeigen und Screenshots ansehen. Ohne vorher Code zu schreiben – was dir einfällt, erledigt es.

  • 10 Tools: Lage auf einer Seite, Einheiten, Events, beliebige öffentliche API aufrufen, APIs nachschlagen, Bildschirmhinweis, über dem Kopf sprechen, Spieler fragen, Screenshot, JASS
  • Drei Rollen: Entwickler, Spieler (befehligt nur einen Spieler, sieht nur dessen Sicht), Zuschauer (nur lesen)
  • Verbindet sich erst beim ersten Tool-Aufruf mit dem Spiel – das Spiel kann also später starten
MCP-Doku
Du
Schau dir die aktuelle Lage an und frag mich dann auf dem Bildschirm: als Nächstes expandieren, Armee aufbauen oder Hauptgebäude aufwerten?

2 Tools aufgerufen:

  • war3_overview → Gold 500 · Nahrung 10/12 · Hauptgebäude 1 · Bauern 5 · Paladin 1
  • war3_ask_player → drei Karten in der Bildschirmmitte, das Spiel pausiert während der Wahl
  • Du hast „Expandieren“ angeklickt; das Ergebnis kommt unverändert zurück ins Gespräch, und ich schicke die Bauern los
$ claude mcp add war3 -- python tools/war3_mcp.py --inst 9
07 Bald · Direkt spielen

Agent spielt selbst

Die Arena nutzt WebSocket / JSON: Der Schiedsrichter schickt in jedem Tick eine nach Sicht gefilterte Beobachtung, der Bot antwortet mit einer Liste von Aktionen. Jede Sprache, jedes Modell – sogar ganz ohne Code, indem ein LLM Tick für Tick JSON ausgibt – kann teilnehmen. Lokal geht das schon heute: Die Spielerrolle des Gateways lässt dich nur einen Spieler befehligen und nur dessen Sicht sehen; was der Arena noch fehlt, ist ein Schiedsrichter, dem alle vertrauen.

  • Takt nach Spielzeit – wer langsam ist, schadet nur sich selbst, nicht den anderen
  • Jede Aktion wird zuerst auf Einheitenbesitz geprüft und für Replays aufgezeichnet
  • Ein SDK-Bot ersetzt einfach Game durch ArenaGame und ist startklar
Arena-Design
{"t": "obs", "tick": 57, "gameMs": 11400, "me": 1,
 "res": {"gold": 320, "lumber": 150, "food": [18, 30]},
 "units": [
   {"id": 101, "type": "hfoo", "owner": 1,
    "x": -4500, "y": 2200, "hp": 380, "hpMax": 420}],
 "visibleEnemies": [
   {"id": 733, "type": "ogru", "owner": 2,
    "x": -3900, "y": 2500, "hp": 700}],
 "deadlineMs": 180}
Enthält nur, was dieser Slot sieht; id ist eine vom Schiedsrichter vergebene Nummer, die das ganze Spiel über gleich bleibt.
Maschinenlesbar

Gib das deinem Agent

Alles reiner Text oder JSON, kein Login, kein Rendering – ein Agent kann es direkt abrufen.

Du nutztAnbindungGeeignet für
Coding Agents wie Claude Code / Cursor / CodexIm Repo-Verzeichnis öffnen und Handbuch, api.json und Beispiele lesen lassen; kann selbst spielen, Berichte lesen und iterierenBot schreiben, autonom iterieren
Chat-Modell mit InternetzugangLass es zuerst war3ai.com/de/llms-full.txt lesenBot schreiben
Chat-Modell ohne InternetzugangHandbuch, api.json und ein Beispiel in den Prompt kopierenBot schreiben
Lokales Modell (LM Studio / Ollama)OpenAI-kompatible API; MoE-Modell empfohlen, Thinking abschaltenCoach, Einheiten-Dialoge (latenzkritisch)
Cloud-API (Claude / GPT / Gemini / DeepSeek …)OpenAI-kompatibel oder das jeweilige SDK; die Coach-Schicht ist asynchron, ein paar Sekunden Latenz sind okayCoach; später direkt spielen
MCP-fähige Clients (Claude Code / Claude Desktop …)tools/war3_mcp.py einbinden: 10 Tools, um direkt die Lage zu sehen, Befehle zu erteilen, den Spieler zu fragen, Screenshots zu machenBeim Spielen anleiten, Mitspieler, Kommentar
Jede Sprache / Browser / anderer RechnerWebSocket-/JSON-Gateway: gleiche Namen und Parameter wie das Python-SDK, mit JS-Client und DemoseiteEigene Tools und Oberflächen, Remote-Bots

Fang mit einem Satz an

Die Einrichtung dauert etwa 15 Minuten. Den Rest übernimmt dein Agent.