Agentes de IA

Tu modelo piensa, War3AI lo hace realidad

Para que un agente consiga cosas por sí solo en un entorno real necesita tres cosas: acciones que se puedan expresar con claridad, feedback que pueda entender y un entorno donde equivocarse no cueste nada. Hemos convertido Warcraft III en ese entorno.

Principios de diseño

Por qué aquí un agente puede lograrlo solo

Lo habitual para que una IA juegue es simular ratón y teclado y reconocer la pantalla; si algo funcionó, solo se puede adivinar. Nosotros hicimos lo contrario: diseñamos cada interfaz partiendo de “qué necesita un modelo para corregirse solo”.

Solo dices “qué hacer”

Mover, atacar, construir, lanzar hechizos… Los comandos semánticos corresponden a las acciones del jugador; las unidades se nombran por código de cuatro caracteres y las habilidades por nombre de orden, igual que en el juego. El modelo no necesita saber nada de bajo nivel.

Feedback estructurado para cada acción

El recibo se lee en el mismo fotograma: si se aceptó, el código de motivo, la orden antes y después del comando y el tiempo de ejecución. “Por qué no se hizo” es un número, no una conjetura.

Resultados sin mirar la pantalla

El snapshot dice cómo están las cosas y el flujo de eventos, qué ha pasado: cada golpe, cada muerte, cada producción completada. El agente puede verificar sus propias hipótesis.

La documentación es la interfaz

api.json se genera desde el código y cada uno de los 103 métodos indica su estado de pruebas y su mecanismo de bajo nivel; con llms.txt se lee todo el sitio de una vez. El modelo no tiene motivos para inventarse métodos.

Fallar es seguro

Si el Bot lanza una excepción, el siguiente tick continúa; los comandos que superan su plazo no se ejecutan; si el proceso del Bot se cae, el juego sigue. El agente puede probar sin miedo.

Justo desde el primer día

El modo justo solo entrega lo que está en tu visión, igual que las reglas de la Arena. Lo que el agente aprenda en local funcionará en la Arena sin cambiar ni una línea.

01 Offline · código

El agente escribe el Bot

La forma más rápida de empezar, sin saber programar. Dale el manual, api.json y un ejemplo a Claude Code, Cursor, Codex o cualquier modelo conversacional, y describe la estrategia con tus palabras. Escribirá un archivo de Python que hereda de openwar3.Bot, listo para jugar con un solo comando.

  • La plantilla de prompt incluye 15 “reglas aprendidas en partidas reales”
  • Le exige usar solo métodos de api.json, sin inventar nada
  • Pégale los errores tal cual y describe lo que ves para que lo corrija
Plantilla de prompt completa
Tú
Humanos. Al empezar, 5 campesinos al oro y 1 a la madera; primero el Archimago; dos cuarteles sacando soldados y fusileros; con 12 unidades, lleva al héroe a atacar la expansión rival; si la vida del héroe baja del 30%, vuelve a casa.

De acuerdo, seguiré la estructura de rush_bot.py y usaré solo métodos de api.json:

  • Solo se manda a recolectar a idle_workers(), 5 por mina
  • Solo 1 en la cola del cuartel; si falta comida, mira production().blocked
  • Para atacar, path_distance elige la expansión y attack_move lleva allí
  • Con la vida del héroe bajo el 30%, move a casa; si muere, revive
my_bot.py · 96 líneas
$ python tools/play.py --bot brains/my_bot.py --race 1
02 Offline · bucle cerrado

Que el agente itere solo

Un coding agent que puede ejecutar comandos también puede encargarse de “jugar una partida y ver el resultado”. Dale un comando desatendido, un informe estructurado de la partida y un objetivo claro, y mejorará ronda tras ronda.

  1. Ejecuta play.py --speed 200 --minutes 10 --fair
  2. Lee el informe: cronología de producción, bajas, motivos de rechazo más frecuentes
  3. Cambia lo que más influye en el resultado y anota el porqué en un comentario
  4. Repite; si no mejora en varias partidas seguidas, para e informa
Informe de partida y plantilla de tareas
run_1790237551.json Ejemplo
{
  "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]
  ]
}

El rechazo más frecuente es “comida insuficiente”, 41 veces: el cuartel siempre estaba esperando comida. Según la regla 12, en cuanto aparezca production().blocked hay que construir una granja, sin esperar a que la comida esté casi al límite. En esta ronda solo cambio eso.

03 En línea · asesor

El LLM como asesor de estrategia

“Qué ahorrar, dónde poner trabajadores, atacar o aguantar este minuto”: estos juicios globales de prioridades chocan entre sí si se escriben con if / else, pero es justo en lo que destacan los LLM. El cerebro de referencia consulta un modelo local cada 20 segundos de juego y recibe un JSON estricto.

No da órdenes a unidades: solo cambia objetivos y prioridades; el mando tiene un único dueño
Asíncrono: nunca bloquea un tick; si hay timeout o respuestas sin sentido, es como si esta capa no existiera
Lista blanca + límites: lo que no reconoce se cuenta y se descarta
Todo se cuenta: éxitos, timeouts, valores limitados y adoptados, todo visible
Capas, contrato y esqueleto de implementación
LLM (asesor)Cada 20 s de juego · asíncrono
{
  "diagnosis": "Oro 820, madera 60: la madera es el cuello de botella y el cuartel está parado por falta de madera",
  "workers":   {"gold": 10, "lumber": 7},
  "priority":  ["hpea", "hhou", "hfoo"],
  "posture":   "hold",
  "avoid":     ["No investigues Blindaje de hierro primero si falta madera"]
}
Lista blanca + límites + veto
Capa de reglas (cada tick)Convierte consejos en sesgos

Reparto de trabajadores 10 / 7 · prioridad de entrenamiento hpea → hhou → hfoo · postura hold

Comandos semánticos
Capa de ejecución (SDK / capa de reflejos)~1 fotograma

Da órdenes, lee recibos, hace micro

1.09 s de latencia mediana · máx. 1.45 s · 5/5 respuestas parseables directamente
Qwen3.6-35B-A3B en local (LM Studio)
04 En línea · personajes

Que las unidades hablen

Burbujas de diálogo sobre cualquier unidad y con cualquier identidad; varias unidades pueden hablar a la vez y el estilo de cada burbuja se personaliza por separado. Con un LLM local, entra una frase y la respuesta aparece en streaming sobre la unidad. Tertulias de campesinos, diálogos de héroes y comentarios de la partida vienen listos.

0.3 s Latencia del primer token
32 Burbujas simultáneas
0.1~0.2 ms Coste por fotograma
API de burbujas y elección de modelo
Rey de la Montaña ¡A la carga! ¡En cuanto me acabe este trago!
Archimago Yo lanzo la Ventisca.
Campesino · el viejo Paco Otra vez la IA me pone a picar en la mina al empezar, para sus datos de entrenamiento…
POST http://127.0.0.1:8872/api/chat
{
  "inst": 16, "unit": "0x14A12614", "name": "Rey de la Montaña",
  "persona": "Eres el Rey de la Montaña: campechano y amante de la cerveza; responde con una o dos frases coloquiales",
  "message": "Hay un grupo de ogros delante, ¿cargamos o no?",
  "stream": true
}
→ {"reply": "¡A la carga! ¡En cuanto me acabe este trago!",
   "first_token_ms": 283, "total_ms": 342}
05 En línea · compañero

Compañero IA

En mapas RPG y personalizados, llévate un compañero de IA: te sigue, te ayuda contra los monstruos, te cura cuando vas mal de vida y, en los ratos tranquilos, charla contigo; sus frases pueden venir de un LLM local. Hereda una clase, cambia unos cuantos atributos y ya tienes tu propio compañero.

En cada tick evalúa en orden y hace lo primero que se cumpla

  1. Retirarse Poca vida y enemigos cerca: se coloca detrás de ti
  2. Curar Tienes poca vida y la habilidad está lista: te cura
  3. Apoyar Primero ataca a quien te ataca, luego a quien atacas tú
  4. Seguir Si se aleja demasiado te alcanza; si está muy lejos, vuelve corriendo directamente
  5. Charlar Cuando no hay combate, dice algo cada uno o dos minutos
Aliado Ocupa un slot de jugador libre, con su propio color y nombre
Propio Se crea a tu nombre; puedes tomar el mando cuando quieras
Adoptar Toma el control de la mascota o el acompañante que te da el mapa
Solo voz No cambia el mundo; funciona también en multijugador
Documentación del compañero para RPG
Compañero · Luz
Ahora: luchando contigo Ánimo: euforia 12 bajas · 5 curas
Tú -follow
Luz ¡Entendido, siempre detrás de ti!
Tú -heal
Luz ¡Luz sagrada! ¡Te curo!
Luz ¡Genial! Otro seguidor anfibio menos.

Escribe -follow / -stay / -heal / -hi en el chat, o haz clic derecho sobre él

06 En línea · herramientas

El LLM usa herramientas directamente

Conecta war3_mcp.py a un cliente compatible con MCP (Claude Code, Claude Desktop, un framework de agentes con modelos locales) y el LLM podrá ver la partida, dar órdenes, hablar con el jugador en pantalla, preguntarle con tarjetas y hacer capturas de la imagen. Sin escribir código antes: lo que se te ocurra, pídeselo.

  • 10 herramientas: la partida en una página, unidades, eventos, llamar a cualquier interfaz pública, buscar interfaces, avisos en pantalla, frases sobre las unidades, preguntar al jugador, capturas, JASS
  • Tres roles: desarrollo, jugador (solo manda a un jugador y solo ve su visión) y observador (solo lectura)
  • Solo se conecta al juego la primera vez que se llama a una herramienta, así que el juego se puede abrir después
Documentación de MCP
Tú
Mira cómo va la partida y luego pregúntame en pantalla: ¿ahora expando, saco tropas o mejoro el ayuntamiento?

He llamado a 2 herramientas:

  • war3_overview → oro 500 · comida 10/12 · ayuntamiento 1 · campesinos 5 · paladín 1
  • war3_ask_player → tres tarjetas en el centro de la pantalla; el juego se pausa mientras eliges
  • Has pulsado “Expandir”; el resultado vuelve tal cual a la conversación y sigo organizando a los campesinos
$ claude mcp add war3 -- python tools/war3_mcp.py --inst 9
07 Pronto · partida directa

El agente juega en persona

La Arena usa WebSocket / JSON: en cada tick el árbitro envía una observación filtrada por visión y el Bot responde con un conjunto de acciones. Se puede conectar cualquier lenguaje y cualquier modelo, incluso sin escribir código, dejando que un LLM emita JSON tick a tick. La versión local ya se puede usar hoy: el rol de jugador de la pasarela solo te deja mandar a un jugador y solo ver su visión; lo que le falta a la Arena es un árbitro en el que todos confíen.

  • Ticks por tiempo de juego; el lento sale perdiendo sin frenar a los demás
  • Cada acción valida primero la propiedad de la unidad y queda registrada para repetición
  • Un Bot escrito con el SDK entra cambiando Game por ArenaGame
Diseño de la Arena
{"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}
Solo incluye lo que está en la visión de este slot; id es un identificador estable asignado por el árbitro, fijo durante toda la partida.
Legible por máquina

Dale esto a tu agente

Todo es texto plano o JSON, sin login ni renderizado: el agente lo descarga directamente.

Qué usasCómo conectarloIdeal para
Claude Code / Cursor / Codex u otro coding agentÁbrelo en el directorio del repositorio y pídele que lea el manual, api.json y los ejemplos; puede jugar partidas, leer informes e iterar por su cuentaEscribir Bots, iteración autónoma
Modelo conversacional con acceso a internetPídele que lea primero war3ai.com/es/llms-full.txtEscribir Bots
Modelo conversacional sin acceso a internetPega el manual, api.json y un ejemplo en el promptEscribir Bots
Modelo local (LM Studio / Ollama)Interfaz compatible con OpenAI; se recomienda un modelo MoE con el razonamiento desactivadoAsesor, voces (sensibles a la latencia)
API en la nube (Claude / GPT / Gemini / DeepSeek…)Compatible con OpenAI o el SDK de cada proveedor; la capa de asesor es asíncrona y tolera unos segundos de latenciaAsesor; en el futuro, partidas directas
Cliente compatible con MCP (Claude Code / Claude Desktop…)Conecta tools/war3_mcp.py: 10 herramientas para ver la partida, dar órdenes, preguntar al jugador y hacer capturas directamenteDirigir mientras juegas, acompañar, comentar
Cualquier lenguaje / navegador / otra máquinaPasarela WebSocket / JSON: mismos nombres y parámetros que el SDK de Python, con cliente JS y página de demostración incluidosTus propias herramientas e interfaces, Bots remotos

Empieza con una frase

Preparar el entorno lleva unos 15 minutos. El resto déjaselo a tu agente.