Decidí volver a escribir una retrospectiva de desarrollo después de mucho tiempo
Durante ese tiempo, el deseo de dejar solo registros perfectos me hizo posponer la documentación
Para dejar de forma significativa los intentos y reflexiones de los últimos ~10 días, organicé la investigación y el diseño de arquitectura para crear un modelo de codificación especializado en Godot
Realicé un experimento para reducir el costo de RunPod desplegando un modelo de la familia Qwen en mi PC local
Intenté ejecutar un modelo de 9 B en WSL con una RTX 3060
Sin embargo, los problemas de velocidad de conexión y latencia fueron graves; la fase de razonamiento antes de generar la respuesta tardaba más de 5 min, por lo que suspendí el experimento local
Investigué primero la forma de recopilar datasets para entrenar un modelo especializado en Godot
Analicé con Gemini cómo se había creado ese dataset
La clave consistía en combinar, por repositorio de GitHub, el README.md, los archivos .gd y la estructura del proyecto en un solo texto, y usar el archivo de configuración project.godot y las diferencias de sintaxis de GDScript para clasificar entre Godot 3 y 4
En particular, al aprovechar pistas versionadas como config_version, config/features, onready var, @onready, KinematicBody, CharacterBody3D, se obtuvo la visión de que incluso lenguajes poco comunes sin archivos de dependencias basados en JSON pueden filtrarse por versión
Para comprender el flujo de fine‑tuning, consulté un video de fine‑tuning sobre el lenguaje de programación clásico OPL
Sin embargo, sentí que recopilar el dataset y convertirlo en un formato entrenable son problemas distintos
Pregunté al coach de SSAFY cómo recolectar eficazmente datos de lenguajes poco comunes de una versión específica
Me respondieron que el dataset de Godot que había revisado se asemeja más a un dataset de código bruto que a un dataset de preguntas y respuestas para entrenamiento de asistentes
Para crear un producto tipo chatbot, es mejor generar pares pregunta/respuesta con un LLM y transformarlos en un dataset de instrucciones, en lugar de usar los datos crudos tal cual
Sin este paso, un modelo tendería a responder a solicitudes como “diseña un mapa” con respuestas centradas en Python, que son las que más ha aprendido
La mayor parte está escrita en Python, por lo que no es adecuada para usar directamente como dataset de entrenamiento exclusivo de Godot 4
Me pregunté “¿Podría hacer que el modelo responda sobre Godot sin mencionar explícitamente Godot?” pero concluí que, dado el gran peso del conocimiento de Python en el modelo, proporcionar claramente el contexto Godot en la pregunta aumenta la probabilidad de obtener la respuesta correcta
Consulté a un senior de la universidad sobre RAG y prompting
Me aconsejaron que, en lugar de inyectar todos los datos al modelo, podría ser más realista crear una estructura de búsqueda vectorial basada en documentos Markdown y guiar al modelo a buscar la información necesaria
Re‑indexar grandes volúmenes de documentos es costoso y lento; por ahora, una arquitectura basada en búsqueda/prompting parece más adecuada que el entrenamiento directo
Diseñé la arquitectura inicial para crear un modelo de codificación especializado en Godot
Inicialmente pensé en una cadena simple: recolección de dataset → generación de dataset Q&A → entrenamiento del modelo
Pero surgió el problema de que, para filtrar y generar datos correctos, era necesario comprender bien los cambios de Godot 3 a 4
Temí que código de Godot 3, código Python y APIs obsoletas se mezclaran en los datos de respuesta, por lo que reconsideré la arquitectura
Propuse una estructura que coloca un chatbot RAG basado en la documentación oficial al frente para clasificar y convertir versiones de Godot 3/4
Crawleé la documentación oficial de migración de Godot y la documentación de Godot 4 para crear un chatbot RAG, y usarlo para determinar si los datos recolectados pertenecen a Godot 3 o 4
Luego, solo los datos identificados como Godot 4 se procesarían para crear el dataset de instrucciones
Obtuve insights adicionales de ChatGPT sobre la dirección del entrenamiento SFT/DPO
En SFT se pueden crear tareas como clasificación Godot 3/4, conversión Godot 3 → 4, generación de código Godot 4, corrección de errores Godot 4, y rechazo/corrección de API Godot 3
En DPO/Preference se puede estructurar datos de preferencia con respuesta mala = respuesta que mezcla código Godot 3, respuesta buena = código puro de Godot 4
Utilicé unclecode/crawl4ai para rastrear la documentación oficial de Godot
Crawlé y documenté cerca de 1 500 páginas, incluyendo la documentación oficial de Godot 4, la guía de migración Godot 3 → 4, la referencia de clases de Godot 4 y los tutoriales
Aunque parecía mucho, representa solo alrededor del 3 % del contexto total del modelo
Pedí consejo adicional a un senior sobre el cuello de botella de I/O de disco en la tubería de almacenamiento y entrenamiento
Me recomendaron procesar la adquisición y pre/post‑procesamiento de datos lo más cerca posible del tiempo real, y ejecutar el entrenamiento en modo batch
Decidí considerar un procesamiento por lotes basado en métricas, ejecutando refuerzo o fine‑tuning cuando el dataset supere cierto umbral
Como el costo de re‑indexado es estructuralmente difícil de eliminar, la estabilidad de la tubería de adquisición y procesamiento de datos es más importante que la latencia del entrenamiento
Dirección general actual
Crawl de la documentación oficial para construir una base de conocimiento RAG basada en Godot 4
Recolección de proyectos Godot en GitHub y fusión de README, estructura del proyecto y archivos GDScript por repositorio
Filtrado inicial usando la configuración project.godot y diferencias de sintaxis entre Godot 3/4
Uso de un chatbot RAG para determinar si el contenido es Godot 3/4, si usa APIs obsoletas y su idoneidad para Godot 4
Generación de datos de instrucción/respuesta a partir de los datos filtrados para Godot 4
Entrenamiento del modelo de codificación Godot 4 con datos SFT y DPO/Preference
Retrospectiva
Durante los últimos 10 días, el deseo de dejar solo resultados terminados me impidió registrar el proceso
Sin embargo, los experimentos fallidos, los obstáculos y los cambios de decisión intermedios son los registros que realmente guían la siguiente dirección
En adelante, en lugar de buscar la perfección, me comprometo a documentar continuamente el flujo de intentos y decisiones para seguir mejorando