12 июня 2026 г.
Окончательно решили снова написать обзор разработки после долгого перерыва
- За это время из‑за желания оставлять только идеальные записи откладывал их написание
- Чтобы осмысленно зафиксировать попытки и размышления, проделанные за последние примерно 10 дней, собрал исследование и процесс проектирования архитектуры для создания специализированной модели кодинга Godot
Провёл эксперимент по размещению модели семейства Qwen на локальном ПК, чтобы сократить расходы на RunPod
- Пытался запустить 9‑млрд‑параметровую модель в WSL на системе с RTX 3060
- Однако проблемы с пропускной способностью сети и задержкой отклика были серьёзными, и даже на этапе «размышления» перед генерацией ответа требовалось более 5 минут, поэтому эксперимент с локальным запуском был прекращён
Для обучения специализированной модели Godot сначала исследовал способы сбора датасетов
- Проверил датасет
wallstoneai/godot-gdscript-datasetна Hugging Face (ссылка) - С помощью Gemini проанализировал, как был создан этот датасет
- Ключевой подход заключался в объединении в один текст README.md (ссылка), файлов
.gdи структуры проекта на уровне репозитория GitHub, а затем классификации версий Godot 3/4 с помощью файла настроекproject.godotи различий в синтаксисе GDScript - Особенно, используя такие версии‑специфичные подсказки, как
config_version,config/features,onready var,@onready,KinematicBody,CharacterBody3D, можно фильтровать версии даже для нишевых языков без файлов зависимостей на основе JSON, что дало важное понимание
- Проверил датасет
Чтобы понять процесс дообучения, посмотрел обучающее видео по дообучению на старом языке программирования OPL
- Ссылка: https://www.youtube.com/watch?v=5wGD92ktQL4
- При этом понял, что сбор датасета и приведение его к форме, пригодной для обучения, — это отдельные задачи
Спросил у наставника SSAFY, как эффективно собирать данные нишевых языков определённой версии
- Получил ответ, что текущий датасет Godot больше похож на набор «сырого» кода, а не на Q&A‑датасет для обучения ассистента
- Чтобы создать чат‑бот, лучше не просто загружать сырые данные, а генерировать пары вопрос‑ответ с помощью LLM и формировать инструкционный датасет
- Без этого модель будет склонна отвечать, как обычно, на запросы вроде «спроектируй карту», используя преимущественно обученные ответы, ориентированные на Python
Рассмотрел инструкционный датасет
ise-uiuc/Magicoder-Evol-Instruct-110Kв качестве кандидата- Большая часть данных сосредоточена на Python, поэтому их нельзя напрямую использовать как обучающий материал исключительно для Godot 4
- Возник вопрос: «Можно ли заставить модель отвечать про Godot, даже если в запросе не упомянут Godot?», но из‑за сильного веса Python‑весов в базовой модели лучше явно указывать контекст
Godot, чтобы повысить вероятность правильного ответа
Проконсультировался со старшим коллегой по поводу RAG и стратегии промптинга
- Получил совет, что вместо подачи всей информации модели лучше построить векторный поиск по markdown‑документам и направлять модель к нужным данным
- Поскольку переиндексация больших объёмов текста требует значительных затрат времени и ресурсов, на текущем этапе более целесообразно использовать поиск/промптинг, а не обучение
Спроектировал начальную архитектуру для создания специализированной модели кодинга Godot
Сначала я думал о простой структуре вроде
сбор набора данных -> создание набора вопросов/ответов -> обучение модели- Однако возникла проблема: чтобы точно фильтровать и генерировать правильные данные, нужно хорошо разбираться в переходе от Godot 3 к 4
- Было решено пересмотреть архитектуру, поскольку при ошибке в ответы могут попасть код Godot 3, Python‑код и устаревший API
Для классификации и преобразования версий Godot 3/4 спроектирована структура с размещением RAG‑чатбота на переднем плане, основанного на официальной документации
- Идея: собрать официальные документы по миграции Godot и документацию Godot 4, создать RAG‑чатбот и с его помощью классифицировать, относится ли собранный материал к Godot 3 или 4
- Затем обрабатывать только данные, определённые как Godot 4, в набор инструкций
Через ChatGPT получили дополнительные идеи по обучению SFT/DPO
- В SFT можно создавать задачи типа классификации Godot 3/4, преобразования Godot 3 → 4, генерации кода Godot 4, исправления ошибок Godot 4, отклонения/коррекции API Godot 3
- В DPO/Preference можно сформировать предпочтительные данные, где
плохой ответ = ответ с кодом Godot 3,хороший ответ = чистый код Godot 4
Для краулинга официальной документации Godot использовали
unclecode/crawl4ai- Начальный документ: https://docs.godotengine.org/en/stable/tutorials/migrating/upgrading_to_godot_4.html
- Были собраны и задокументированы почти 1 500 страниц, включая официальную документацию Godot 4, документы миграции Godot 3 → 4, справочник классов Godot 4 и учебные материалы
- Хотя объём показался большим, по сравнению с общим контекстом модели это примерно 3 %
По поводу узкого места дискового ввода‑вывода в пайплайне хранения и обучения данных получили дополнительный совет от старшего коллеги
- Вместо постоянного онлайн‑тюнинга лучше обрабатывать сбор и пред/пост‑обработку данных почти в реальном времени, а обучение проводить пакетно
- Планируется использовать метрико‑ориентированную пакетную обработку, когда после накопления определённого объёма данных запускаются усиленное обучение или дообучение
- Поскольку полностью избавиться от расходов на переиндексацию невозможно, стабильность пайплайна сбора и обработки данных важнее, чем реальное время обучения
Текущий общий план
- Скраулить официальную документацию и построить базу знаний RAG на основе Godot 4
- Собрать проекты Godot с GitHub и объединить README, структуру проекта и файлы GDScript на уровне репозитория
- Выполнить первичную фильтрацию с помощью настроек
project.godotи различий синтаксиса Godot 3/4 - С помощью RAG‑чатбота дополнительно определить, относится ли материал к Godot 3/4, использует ли устаревший API и подходит ли он для Godot 4
- На основе отфильтрованных данных Godot 4 создать наборы инструкций/ответов
- Обучить модель кодирования Godot 4 на данных SFT и DPO/Preference
Ретроспектива
- За последние 10 дней я пытался оставить только готовый результат, поэтому не зафиксировал процесс
- Однако неудачные эксперименты, блокирующие моменты и изменённые решения являются важными записями для определения дальнейшего направления
- В дальнейшем я буду фиксировать ход мыслей и принятые решения, а не только идеальный результат, чтобы постепенно развиваться
Разбор разработки: docs/retrospectives/2026-06-12.md