rukh · lab

// M0 · lección 00

Qué vas a construir, y cómo se estudia

El modelo de lenguaje de ajedrez que vas a escribir en trece módulos, por qué el ajedrez es el dominio para aprender esto, cómo se estudia el curso, cómo se mide cada etapa desde el primer día, y el mapa del taller del módulo 0.

  • tiempo de trabajo45 min
  • nivel base
  • actualizado el23 de septiembre de 2026

// el recorrido · dónde estás

  1. M0 El tallerEntorno reproducible(estás aquí)
  2. M1 Datos y tokensDatos y tokenización(por delante)
  3. M2 El decoderPreentrenar un GPT(por delante)
  4. M3 El encoderEmbeddings y clasificar(por delante)
  5. M4 Fine-tuningSFT y LoRA(por delante)
  6. M5 AlineamientoPreferencias: DPO, GRPO(por delante)
  7. M6 Evaluar y publicarMedir y desplegar(por delante)
  8. FASE 2 El entrenadorAgentes, RAG, MCP

entra

  • un directorio vacío
  • Lichess y Stockfish, fuera

se construye

  • entorno uv con CUDA
  • Stockfish y MLflow
  • descarga con manifiesto
  • tablero legal en la web

sale

  • repo rukh
  • 6 M partidas en parquet
  • demo sin modelo

el aprendiz, ahora

Todavía no hay aprendiz. Montas el club donde va a estudiar: el tablero, un árbitro de confianza, un cuaderno donde apuntar cada sesión y una biblioteca de partidas.

por qué este paso · fuera del ajedrez

Sin un entorno que se instala igual cada vez y un juez fiable, ningún número de los módulos siguientes valdría nada.

Qué vas a construir

Vas a construir un modelo de lenguajeModelo de lenguajeRed neuronal entrenada para predecir el siguiente token dada la secuencia anterior. Aplicado a partidas de ajedrez, predice la siguiente jugada dadas las jugadas previas; de esa única tarea emergen las reglas y el juego. que juega al ajedrez. No un programa que calcula jugadas, como Stockfish, sino una red neuronal que ha leído millones de partidas y que, dada la secuencia de jugadas de una partida, propone la siguiente. Es la misma idea que hay detrás de un LLM de texto, con una diferencia que lo cambia todo: aquí cada tokenTokenUnidad mínima que el modelo lee y escribe. En Rukh, por defecto, un token es una jugada completa en notación UCI (e2e4); en otras tokenizaciones puede ser un carácter o un trozo de texto aprendido por BPE. El modelo nunca ve letras ni tableros: ve identificadores enteros de tokens. es una jugada, y un motor de ajedrez puede decir en milisegundos si esa jugada es legal, buena o mala.

Piensa en Rukh como un aprendiz. A lo largo del curso le enseñarás a escribir una jugada, lo pondrás a leer millones de partidas hasta que adivine la siguiente, aprenderá a juzgar una posición entera, recibirá clases particulares, un entrenador le dirá qué jugadas prefiere y al final jugará torneos con rating oficial. Cada una de esas etapas es una etapa de cómo se construye cualquier LLM: tokenización, preentrenamiento, encoders, fine-tuning, alineamiento y evaluación. Lo que aprendas con el tablero delante te sirve igual sin él.

Por qué ajedrez

  • Es verificable. La legalidad y la calidad de cada jugada las decide StockfishStockfishMotor de ajedrez libre (GPL-3) y el más fuerte disponible. En Rukh no juega por el modelo: es el juez. Con UCI_LimitStrength y UCI_Elo (1320-3190) se convierte en un rival calibrado para estimar Elo, y a poca profundidad da recompensas baratas para el alineamiento., no una persona con un formulario. En el alineamiento (reward model, DPO, GRPO) las recompensas serán reales, baratas y reproducibles.
  • Los datos son abiertos. Lichess publica miles de millones de partidas, puzles y evaluaciones bajo CC0CC0Dedicación al dominio público de Creative Commons: el autor renuncia a todos los derechos. Lichess publica sus partidas, puzles y evaluaciones bajo CC0, así que se pueden recortar, redistribuir y usar para entrenar sin pedir permiso (se cita por cortesía)..
  • Los modelos son pequeños. Decenas de millones de parámetros bastan para jugar por encima de 1200 EloEloEscala de fuerza de juego: una diferencia de 200 puntos implica que el mejor gana unas tres de cada cuatro veces. Lichess usa Glicko-2, compatible en la práctica. Rukh estima el Elo de cada modelo jugando contra Stockfish limitado y publica el intervalo de confianza.; se entrenan en horas en una sola GPU y caben en el navegador.
  • La demo se entiende en cinco segundos: un tablero, y juegas contra lo que has entrenado.

El recorrido

El curso tiene dos fases. En la primera (M0-M6) construyes el modelo de principio a fin; en la segunda (A1-A6) lo conviertes en un entrenador con herramientas, memoria y trazas. Cada concepto entra cuando un lab lo necesita para tomar una decisión.

Módulo Qué aprendes Qué funciona al terminar
M0 · Taller Entorno reproducible, oráculo, registro de experimentos, procedencia de datos rukh info, datos recortados, tablero con jugadas legales
M1 · Datos y tokenización Tokens, vocabularios, BPE, dataloaders, fugas entre splits Lotes de las tres tokenizaciones y una comparativa
M2 · El decoderDecoderArquitectura Transformer con atención causal: cada posición solo mira hacia atrás, así que sirve para generar de izquierda a derecha. GPT es un decoder; MoveDecoder, el modelo de Rukh, también. Embeddings, atención causal, receta de entrenamiento, muestreo, ONNX rukh-small a ≥ 1200 Elo, jugable en la web
M3 · El encoderEncoderTransformer con atención bidireccional: cada posición ve toda la secuencia. No genera; representa. En Rukh el encoder lee una partida entera y produce un vector por posición del que salen el valor y la detección de errores. Atención bidireccional, masked modeling, pooling, cabezas de clasificación Valor y alerta de error en vivo
M4 · Fine-tuning e instrucción SFT, tokens de control, LoRA, QLoRA, ecosistema Hugging Face Selector “juega como 1500/2000/2400”
M5 · Alineamiento Reward model, Bradley-Terry, DPO, GRPO, reward hacking Modelos DPO y GRPO medibles
M6 · Evaluar, exportar, publicar Métricas, intervalos de confianza, cuantización, model cards Tabla única y demo final
A1 · Embeddings y RAG Vector DB, recuperación, RAGAS Comentarios con citas de Capablanca
A2 · Agente con herramientas LangGraph, LangSmith Un entrenador que analiza partidas
A3 · Evaluación y observabilidad Suites de evaluación, regresión Suite en verde por commit
A4 · Multiagente Roles, orquestación Jugador, entrenador y redactor
A5 · MCP Servidores y clientes MCP Herramientas de ajedrez desde cualquier cliente
A6 · Capstone Backend, web del entrenador Juegas, te comenta en vivo, informe final

Cómo estudiar este curso

Las lecciones de código te ponen el código delante, entero, y lo escribes tú. La excepción son las lecciones de la demo, como la 4 de este módulo: rukh-web se clona en un commit concreto y la lección explica sus piezas clave en vez de dictarlas todas. Debajo de cada bloque hay un enlace a sus líneas en GitHub, en el tag del módulo (p0 para M0, p1 para M1…), que es la foto del repositorio el día que se cerró ese hito. Lo poco que no tecleas (una fixture binaria, algún test largo, las piezas de un módulo avanzado que la lección no recorre) lo traes de ese repositorio con un comando, y cada lección de código lo dice al principio, en «Qué tecleas y qué traes». En cuanto lo escrito se puede probar, una caja «Ejecútalo» te dice qué comandos lanzar y qué mirar en la salida. Es la comprobación de que vas bien antes de seguir; mejor no saltársela.

Además:

  • La teoría es la justa para tomar una decisión del proyecto: qué tokenización, qué pooling, qué β en DPO.
  • Cada módulo publica algo: un dataset, un modelo con su card en Hugging Face, una versión nueva de la demo.
  • Cuando un número depende de una decisión discutible, la lección puede citar un identificador como (D-107): es una entrada del registro de decisionesRegistro de decisionesEl cuaderno del proyecto: docs/decisiones-de-ejecucion.md, en el repo rukh. Cada entrada lleva un identificador (D-070, D-107, D-126) y dice tres cosas: qué se decidió, por qué, y qué cuesta si está mal. Las lecciones citan esos identificadores cuando un número del curso depende de una decisión discutible o de un error que hubo que corregir, para que puedas ir a la fuente y no fiarte solo del relato. del repositorio, que dice qué se decidió, por qué y qué cuesta si está mal.
  • Desde M2, la demo carga tu modelo desde tu disco y juegas contra él. Los publicados en chorcat/rukh-* están para comparar.
  • Si quieres la foto global antes de empezar, o repasarla al terminar un módulo, Cómo funciona un LLM cuenta todo el proceso de corrido, sin código.
  • Cuando un concepto sirve igual en un RAG, en un agente o en un clasificador, una caja «Fuera del ajedrez» lo nombra como se nombra en el campo.

La fase 1 son sesenta y cinco lecciones y unas 150 horas al teclado, más unas 40 de reloj en las que la GPU o la red trabajan sin nadie delante. A 8-10 horas por semana son unos cuatro meses. Los entrenamientos largos se lanzan al final de una sesión y se recogen en la siguiente. El progreso lo guarda tu navegador (botón «Marcar completada» al final), sin cuentas ni servidores.

Cómo se mide

Todas las etapas se miden con las mismas columnas, las de la tabla única; M2 añade dos cuando ya hay un motor contra el que jugar (Δcp medio y diversidad de aperturas):

  • Tasa de jugadas legalesTasa de legalidadPorcentaje de jugadas propuestas por el modelo que son legales cuando no se le enmascaran las ilegales. Es la primera métrica de la tabla única: mide si el modelo ha aprendido las reglas solo viendo partidas. En la demo, la legalidad la decide chess.js; el modelo solo propone. sin máscara: qué porcentaje de las jugadas que propone el modelo, sin ayuda, son legales. Mide si ha aprendido las reglas.
  • Exactitud de siguiente jugada: top-1Top-1Exactitud de siguiente jugada en su forma estricta: porcentaje de posiciones de partidas no vistas en las que la jugada más probable del modelo es exactamente la que jugó el humano. Es la segunda métrica de la tabla única y se publica global y por tramo de Elo. No mide fuerza de juego, sino parecido con el humano: un modelo con top-1 perfecto contra partidas de 1200 jugaría como un 1200, errores incluidos. El techo tampoco es el 100 %, porque el mismo humano en la misma posición no siempre juega lo mismo. M2 midió 51,1 % con small. y top-3Top-3La versión laxa de la misma medida: porcentaje de posiciones en las que la jugada humana está entre las tres más probables del modelo. Se publica junto al top-1 porque este solo engaña: cuando hay tres jugadas razonables, repartir la probabilidad entre ellas es lo correcto, no un fallo. Top-1 mediocre con top-3 alto dice que el modelo entiende la posición aunque no adivine qué humano concreto está a los mandos; los dos bajos dicen que no ha aprendido nada. M2 midió 79,4 % con small. frente a la jugada humana en partidas que no ha visto, por tramo de Elo.
  • Puzles resueltos por dificultad (1000-1500, 1500-2000, 2000+).
  • Elo estimado contra Stockfish con fuerza limitada (UCI_Elo): veinte partidas por escalón, ocho escalones, 160 en total, con intervalo de confianza. Cuánto ruido meten tan pocas se calcula en M2.

Y el listón se escribe antes. Cada módulo fija sus criterios de aceptaciónCriterio de aceptaciónEl listón que un hito se fija por escrito y antes de medir nada: una frase con un número y una comparación, del tipo «legalidad ≥ 99 % por argmax» o «Elo por condición monótono, con intervalos». Escribirlo antes es lo que impide la trampa más común al evaluar un modelo, que es mirar el resultado y decidir después qué contaba como éxito. En Rukh cada módulo cierra diciendo cuáles de sus criterios cumple y cuáles no; los que no se cumplen se publican igual, con la medida de por qué. (una frase con un número, del tipo «legalidad ≥ 99 % por argmax») antes de medir nada, y al cerrar dice cuáles cumple; los que no se cumplen se publican igual. Mirar el resultado y decidir después qué contaba como éxito es la trampa más fácil de cometer sin darse cuenta.

El taller del módulo 0

Antes de que el aprendiz lea una sola partida hay que montar el club: un local con sus normas, un árbitro que no se equivoca, un cuaderno donde se apunta cada partida, una biblioteca y un tablero. M0 no entrena nada. Construye lo que casi nadie tiene cuando empieza un proyecto de ML y todo el mundo echa de menos a las tres semanas.

bibliotecaLichess → recortelección 3el aprendizel modelollega en M2tablerochess.js filtralección 4árbitroStockfishlección 2cuadernoMLflowlección 2entrenaproponemétricasjuega contra→ tabla única, model cardslo construye M0aún no existeel local · lección 1: uv, torch fijado, configs estrictas, CLI rukh
fig. 01El taller que monta M0 y quién usa cada pieza después. El modelo todavía no existe: llega en M2 y encaja entre piezas que ya funcionan.
Lección En el club Qué se escribe (en la 4, qué se lee) Qué funciona al terminar
1 · El repositorio El local y sus normas pyproject.toml, paths.py, config.py, cli.py y los tests del entorno rukh --help y rukh --version, ruff y pytest en verde
2 · El juez y el cuaderno Árbitro y cuaderno get_stockfish.py, engine.py, env.py, tracking.py rukh info (cuda: True si tienes GPU) y rukh engine check
3 · Los datos La biblioteca fetch.py, manifest.py y la configuración del recorte El --dry-run imprime la SQL; la descarga deja su manifiesto
4 · El tablero El tablero game.ts, opponent.ts, Board.tsx, App.tsx en el repositorio de la demo Una partida completa contra “primera jugada legal”, en móvil

El proyecto vive en tres repositorios independientes: rukh (datos, modelo, entrenamiento, evaluación, agentes), rukh-lab (este sitio) y rukh-web (la demo). Las tres primeras lecciones escriben rukh; la cuarta lee rukh-web, clonado en un commit concreto.

M0 no tiene labs: las comprobaciones son las cajas «Ejecútalo» de cada lección. Los labs, con su tabla de coste y de atajos, empiezan en M1.

Lo que necesitas instalado antes de empezar

Solo dos cosas:

  • uv, que se encarga de Python. No hace falta instalar Python: uv lee la versión de .python-version y se la descarga si no la tiene.
  • Node 24 y pnpm 10 (corepack enable activa pnpm), solo para la lección 4 y para las webs.

Una GPU NVIDIA con CUDA 12.8 hace falta desde M2, no aquí. Todo M0 funciona en una máquina sin GPU con el extra cpu, y las lecciones dicen dónde cambia algo.

Qué has aprendido

Qué vas a construir, por qué el ajedrez es un buen banco de pruebas para aprender IA generativa y cómo se mide cada etapa: las mismas columnas desde M0, con el listón escrito antes de medir.

Lo siguiente es el directorio vacío. La lección 1 lo convierte en un paquete instalable con un comando que funciona, y por el camino fija el intérprete, el índice del que sale torch y la regla que hace que una errata en un YAML falle antes de tocar la GPU.