Как стать автором
Поиск
Написать публикацию
Обновить
501.99
Сбер
Технологии, меняющие мир

Как мы обучали модели для кода GigaCode

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.3K

Привет, Хабр Меня зовут Дмитрий Бабаев, я руководитель R&D GigaCode в Сбере. Сегодня расскажу о том, как мы создавали ИИ‑помощника для программистов задолго до того, как это стало мейнстримом.

Многие компании думают о том, чтобы выпустить собственного ИИ‑помощника для разработчиков. Мы начали делать GigaCode около трех лет назад — ещё до появления Cursor и других популярных сегодня решений.

За это время мы создали целую экосистему решений для разработки — GigaDEV: IDE на основе IntelliJ, платформу Gitverse как аналог GitHub и сам GigaCode.

Философия двух моделей: почему одной недостаточно

Вместо использования «единой модели для всего» мы разработали две специализированные: компактную Inline для мгновенных подсказок и мощную Chat для сложных задач.

Логика простая: когда разработчик нажимает клавишу, он не готов ждать. Каждое нажатие должно вызывать модель, которая генерирует варианты подсказки практически мгновенно. Попробуйте работать с помощником, который «думает» полсекунды на каждый символ, и поймёте, о чём речь.

Inline‑модель обрабатывает всё, что связано с непосредственным редактированием кода: однострочные и многострочные дополнения, написание функций по комментариям, даже прогноз следующей позиции редактирования (Next Edit Prediction). Это то, что превращает IDE из редактора в умного помощника для разработчика.

GigaCode Inline: когда размер не главное

Наша Inline‑модель — это 3 миллиарда параметров и 5 триллионов токенов обучения. Для сравнения: Qwen Coder 2.5 обучали на том же объёме данных но для инициализации использовали NLP модель Qwen 2.5. Мы же, начали с нуля, полностью обучив модель со случайных весов.

Почему не взяли готовые веса от Qwen? Потому что задачи заметно отличаются. NLP‑модели привыкли читать текст слева направо, а нам нужно Fill in the Middle: заполнять пропуски, зная контекст с обеих сторон. Это как разница между чтением книги и решением кроссворда.

Датасет собирали на основе классического The Stack v2, но с добавлением свежих GitHub-репозиториев и OpenCoder annealing corpus. Распределение задач в пре-трейне: 25 % обычного Next Token Prediction, 37,5 % Inline FIM и 37,5 % Multi-line Structure-aware FIM. Последний — это наше ноу-хау.

Главная особенность — Structure-aware FIM вместо line-aware подхода. Вместо заполнения случайных фрагментов мы учили модель генерировать цельные смысловые блоки: функции, циклы, условные конструкции. Качество выросло заметно.

Ещё одним открытием стало то, что даже трёхмиллиардные модели регулярно ошибаются в синтаксисе. Забывают закрыть скобку, путают названия переменных, делают банальные опечатки. Хотя казалось, что такие базовые вещи модель должна освоить в первую очередь. Поэтому мы добавили фазу DPO (Direct Preference Optimization). Как результат — научили модель делать меньше синтаксических ошибок.

Метрики: как измерить «удобство»

Классические метрики типа «exact match» плохо работают для кода: слишком много способов написать одно и то же. Но они засчитывают ответ только при абсолютном совпадении с эталоном, вплоть до каждого пробела и символа. Это для программирования имеет достаточно мало смысла, так как один и тот же алгоритм можно написать десятками разных способов. Exact match признает правильным лишь тот, в котором буква в букву повторяется образец — именно поэтому разработчики всё чаще отказываются от этой метрики.

И в том числе поэтому мы придумали нашу метрику — ClickScore. Она измеряет долю символов, которую разработчику не нужно печатать благодаря подсказкам.

Алгоритм работает итеративно: засчитываются символы, совпадающие с корректным ответом, а если символ не совпал, то мы его добавляем во вход модели и вычисляем новое продолжение. Получается более честная оценка реальной пользы.

Результаты получились интересные: наша Inline 3B с DPO показывает 86,4 % ClickScore на Python против 80,3 % у Qwen2.5-Coder 3B. Более того, мы обгоняем даже Qwen2.5-Coder 7B на Python и Java, несмотря на вдвое меньший размер.

GigaCode Chat: когда нужен интеллект

Chat-модель размером 32 миллиарда параметров — это специализированный инструмент, предназначенный для сложных задач. Редактирование выделенных блоков, генерация тестов, объяснение кода, проверка, работа в режиме агента с целыми проектами — всё, что требует глубокого понимания контекста.

Сначала за основу мы взяли Qwen Coder, но делали полный alignment самостоятельно — SFT и DPO. Плюс 150 миллиардов токенов на адаптацию к русскому языку, потому что наша первая версия GigaChat не очень дружила с кодом.

Сейчас перешли на GigaChat-2 в качестве основы — он заметно лучше понимает код, и нам больше не нужна фаза русификации.

DPO делали на проверяемых задачах: генерация кода по описанию из CodeForces и создание Unit‑тестов.

LiveCodeBench: динамический бенчмарк против переобучения

Также для оценки качества модели в генерации кода мы использовали один из наиболее часто используемых современных бенчмарков — LiveCodeBench. Его особенность в том, что его регулярно обновляют свежими задачами с соревнований по программированию. Это решает проблему контаминации, когда модели «видели» задачи во время обучения.

График деградации ряда других бенчмарков имеет один общий недостаток: как только выходят новые модели, качество решения «старых» задач у них растёт по не до конца понятным причинам. А на свежих задачах качество растет в существенно меньшей степени.

Наша Chat-модель  показывает в бенчмарках результаты на уровне Qwen2.5 Coder 32B: 30,7 % против 30,1 % на LiveCodeBench. Но в генерации тестов мы выделяемся уже сильнее — 23,8 % против 11,9 %. Тут нам помогла DPO фаза пост-обучения.

Время рассуждающих моделей

Многое изменилось с появлением reasoning-моделей (будем называть их рассуждающими). Qwen 3 с поддержкой цепочек рассуждений показал двукратный рост качества: 65,7 % против 31,3 % в обычном режиме. Такие результаты заметно отличались от привычно ожидаемых плавных улучшений качества.

До рассуждающих моделей наша система уверенно превосходила Qwen Coder, особенно на сложных задачах. Но с появлением рассуждающих моделей положение дел сильно изменилось. В настоящий момент  мы активно работаем над нашей собственной рассуждающей моделью и первые результаты обнадёживают: 50,7 % на LiveCodeBench против 30,7 % у предыдущей версии. Догоняем и планируем перегнать.

Испытание реальностью: SWE Bench

SWE Bench — это один из наиболее объективных тестов для пишущих код LLM. Он берёт реальные issue(проблемы) из популярных GitHub-репозиториев: Django, NumPy, SciPy и других, а модель должна понять проблему, найти нужное место в кодовой базе и предложить корректное решение, которое пройдёт существующие тесты.

Здесь наша модель показывает 21.33% в связке с Agentless pipeline и RAG — результат близкий к GPT-4 (32 %), но пока отстающий от лидеров. Интересно, что DeepSeek R1 с рассуждениями показывает 26 % — хороший результат, но не сильно выделяющийся..

Стоит также помнить, что рассуждающие модели хорошо генерируют код, но хуже справляются с пониманием архитектуры проекта. DeepSeek плохо определяет, где именно нужно вносить изменения. Так что даже в рамках разработки ПО, рассуждающие модели не являются универсальным решением для всех задач и для некоторых из них они имеют слабые стороны.

Что дальше: планы и амбиции

Мы планируем открыть исходный код inline‑модели — пусть сообщество использует наши наработки. Основные выводы которые мы сделали: особая важность structured training для FIM‑задач, необходимость post‑training даже для специализированных кодовых моделей и революционная роль рассуждающих архитектур в современных системах генерации кода.

Конкуренция в сфере ИИ‑помощников для кода становится только выше — каждый месяц появляются новые игроки. Но мы не сидели сложа руки, а параллельно со всеми накапливали как теоретический, так и практический опыт с применением в бизнесе.

В итоге у нас получилась система, которая в некоторых аспектах превосходит доступные open source решения в своей весовой категории. И это только начало.

Кстати, мы активно нанимаем в команду. Если вам интересно создавать ИИ‑ассистентов разработчика и поработать в одной из лучших ML‑команд в России — пишите нашим рекрутерам.

P. S. Если у кого есть вопросы по техническим подробностям — спрашивайте в комментариях.

Теги:
Хабы:
+17
Комментарии11

Информация

Сайт
www.sber.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия