// 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.
// el recorrido · dónde estás
- M0 El tallerEntorno reproducible(estás aquí)
- M1 Datos y tokensDatos y tokenización(por delante)
- M2 El decoderPreentrenar un GPT(por delante)
- M3 El encoderEmbeddings y clasificar(por delante)
- M4 Fine-tuningSFT y LoRA(por delante)
- M5 AlineamientoPreferencias: DPO, GRPO(por delante)
- M6 Evaluar y publicarMedir y desplegar(por delante)
- FASE 2 El entrenadorAgentes, RAG, MCP
M0, lección a lección
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_LimitStrengthyUCI_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 reporukh. 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 % consmall. 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.
| 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:uvlee la versión de.python-versiony se la descarga si no la tiene.- Node 24 y pnpm 10 (
corepack enableactiva 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.