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 escritura
Para dejar de forma significativa los intentos y reflexiones de los últimos aproximadamente 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, y antes de generar una respuesta real el proceso de razonamiento tardaba más de 5 min, por lo que suspendí el experimento local
Investigué 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, a nivel de 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 versiones 3/4 de Godot
En particular, al aprovechar pistas por versión 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
Vi un video de fine‑tuning sobre el lenguaje de programación clásico OPL para comprender el flujo de fine‑tuning
Sin embargo, sentí que recopilar el dataset y convertirlo en un formato entrenable son problemas distintos
Pregunté al coach de SSAFY cómo recopilar 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 procesarlos como dataset de instrucciones, en lugar de usar los datos crudos tal cual
Sin este proceso, un pedido como “diseña un mapa” probablemente sería respondido con la solución centrada en Python que el modelo ya ha aprendido mucho
La mayor parte está escrita en Python, por lo que no es adecuada para usar directamente como datos de entrenamiento exclusivos de Godot 4
Me pregunté “¿Podría hacer que el modelo responda sobre Godot sin mencionar Godot?”, pero concluí que, dado el gran peso del modelo en Python, proporcionar explícitamente el contexto Godot en la pregunta aumenta la probabilidad de obtener la respuesta correcta
Consulté a un senior de la universidad sobre RAG y la dirección del prompting
Me aconsejaron que, en lugar de inyectar todos los datos al modelo, sería 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 documentos masivos es costoso y lleva tiempo, por lo que en esta etapa una arquitectura basada en búsqueda/prompting puede ser más adecuada que el entrenamiento
Diseñé la arquitectura inicial para crear un modelo de codificación especializado en Godot
Inicialmente pensé en una estructura simple: recopilación de dataset → generación de dataset de preguntas/respuestas → entrenamiento del modelo
Pero surgió el problema de que, para filtrar y generar datos correctos, era necesario comprender a fondo los cambios de Godot 3 a Godot 4
Temía que códigos de Godot 3, Python o APIs antiguas 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 la clasificación y conversión de versiones Godot 3/4
La idea es rastrear la documentación oficial de migración de Godot y la documentación de Godot 4, crear un chatbot RAG y usarlo para determinar si los datos recopilados pertenecen a Godot 3 o a Godot 4
Luego, solo los datos identificados como Godot 4 se procesarían como dataset de instrucciones
Obtuve más ideas 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 en Godot 4, rechazo/corrección de API de Godot 3, etc.
En DPO/Preference se puede construir datos de preferencia con respuesta mala = respuesta con código Godot 3 mezclado, respuesta buena = respuesta pura de código Godot 4
Utilicé unclecode/crawl4ai para rastrear la documentación oficial de Godot
Rastreé y documenté casi 1 500 páginas, incluyendo la documentación oficial de Godot 4, la guía de migración de Godot 3 → 4, la referencia de clases de Godot 4 y los tutoriales de Godot 4
Aunque parecía mucho, representaba solo alrededor del 3 % del contexto total del modelo
Pedí a un senior de la universidad más consejo sobre el cuello de botella de I/O de disco en la tubería de almacenamiento y entrenamiento de datos
Me recomendaron que, en lugar de hacer fine‑tuning en tiempo real, es mejor procesar la adquisición y el pre/post‑procesamiento de datos lo más cerca posible del tiempo real, y ejecutar el entrenamiento de forma batch
Decidimos considerar un procesamiento batch basado en métricas, ejecutando aprendizaje reforzado o fine‑tuning cuando el dataset supera 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
Rastrear la documentación oficial y construir una base de conocimiento RAG basada en Godot 4
Recopilar proyectos de Godot en GitHub y combinar README, estructura del proyecto y archivos GDScript por repositorio
Filtrado inicial usando la configuración project.godot y las diferencias de sintaxis entre Godot 3/4
Usar el chatbot RAG para determinar si el contenido es Godot 3/4, si usa APIs antiguas y su idoneidad para Godot 4
Generar datos de instrucción/respuesta a partir de los datos filtrados como Godot 4
Entrenar el modelo de codificación Godot 4 con datos SFT y DPO/Preference
Retrospectiva
En los últimos 10 días, al intentar dejar solo los resultados terminados, no logré registrar el proceso
Sin embargo, los experimentos fallidos, los puntos bloqueados y los cambios de criterio a mitad de camino son los registros que realmente guían la siguiente dirección
En adelante, en lugar de buscar solo resultados perfectos, mantendré un registro continuo de intentos y decisiones para seguir mejorando