Kак мы разработали новую модель автодополнения кода в GigaCode. code completion.. code completion. llm.. code completion. llm. Блог компании Сбер.. code completion. llm. Блог компании Сбер. искусственный интеллект.. code completion. llm. Блог компании Сбер. искусственный интеллект. Машинное обучение.. code completion. llm. Блог компании Сбер. искусственный интеллект. Машинное обучение. Программирование.
Kак мы разработали новую модель автодополнения кода в GigaCode - 1

Меня зовут Дмитрий Бабаев, я руковожу R&D в GigaCode — это ИИ‑ассистент для разработчиков от Сбера. Сегодня расскажу про очередной этап развития наших кодовых моделей. Недавно мы выпустили новую версию inline‑модели автодополнения кода (code completion). Это первая в мире MoE‑модель, созданная специально для этой задачи, мы полностью разработали и обучили её с нуля.

Зачем нужна inline-модель и что в ней нового

Inline-модель – это классическая подсказка в IDE, но на основе LLM. Она работает прямо в редакторе: анализирует код до и после позиции курсора и предлагает продолжение. Подсказка может быть однострочной (модель генерирует продолжение кода до завершения строки) или многострочной (в этом случае модель предлагает вставить логически целостный блок кода из нескольких строк — это может быть присваивание, тело цикла, тело опера��ора if или функции, и так далее). В отличие от статических автодополнений, LLM умнее: учитывает контекст, генерирует вставки на том же логическом уровне, что и окружающий код, и даже может «перепрыгивать» между местами редактирования в режиме Next Edit Prediction (это у нас на подходе).

Новая версия — Inline 4.0. Это модель на 13 миллиардов параметров с архитектурой Mixture of Experts (MoE), по архитектуре близкая к DeepSeek. Общий размер относительно большой, но на инференсе активируется только 3 миллиарда параметров. В каждом слое роутер выбирает только 6 «экспертов» из 24, в дополнение к двум статичным «экспертам». Исходя из списка выбранных экспертов, модель может реализовывать различные паттерны написания кода: один на Python с динамической типизацией, другой на Java с OOP, и так далее.

Почему это хороший способ создания модели автодополнений:

  • Скорость. Модель работает на одной GPU без задержек. Разработчик нажимает клавишу, и подсказка появляется мгновенно. Не нужно ждать заметное время, как, например, с монолитными 30B-моделями.

  • Эффективность. Модель лучше справляется с разнообразием кода (языки, API, алгоритмы, стили программирования).

  • Фокус на узкой задаче. Мы обучили модель с нуля. В процессе обучения она увидела 4 триллиона токенов кода (сам обучающий датасет претрейна «весит» 1 триллион токенов). По объёму это сопоставимо с топовыми моделями, но мы сосредоточились именно на completion.

Мы не делаем универсальную инструктивную модель (чат-бот, как, например, QWEN-Coder), а специализированную под автодополнение, что позволяет превзойти модели общего назначения.

Ключевые особенности обучения

Модели для кода обычно обучают на задаче Fill-In-the-Middle (FIM). Как это выглядит: дают префикс (код до курсора и над курсором), суффикс (код под курсором), а модель восстанавливает середину. Мы улучшили это двумя способами:

  1. Structured FIM. Генерируем датасет так, чтобы разрывы были только по границам логических структур кода. Не в середине блока, не в выражении, а только целыми единицами (тело функции, цикла, класса). Это предотвращает появление «обрезанного» кода и повышает качество генерации. Мы не учим модель восстанавливать код с произвольными краями, и это позволяет ей лучше проявить себя в генерации целостных блоков кода, что и требуется разработчику.

  2. Post-train DPO (Direct Preference Optimization). После фазы предварительного обучения мы дообучаем модель выбирать варианты с правильным синтаксисом. Оказалось, что даже лучшие модели часто забывают кавычки, скобки или генерируют некомпилируемый код. DPO «сдвигает» модель в правильную сторону, и в результате количество ошибок сокращается в 2-4 раза.

Эти подходы помогли нам обогнать open source-конкурентов.

Бенчмарки

Мы тестировали модель на разных сценариях: single-line (одна строка), multi-line (блоки, функции), синтаксис и длинный контекст (код из репозитория). Сравнивали с моделями, которые умеют работать в FIM-режиме (не все LLM это могут, например, DeepSeek без специального дообучения совсем не сможет работать в таком режиме). Давайте посмотрим результаты на бенчмарках.

Однострочное автодополнение (single-line)

Здесь модель предлагает продолжение строки в FIM-режиме (Fill-In-the-Middle: контекст сверху + снизу).

Модель

CC CS Python

CC CS Python

CC CS Java

CC CS JS/TS

GigaCode Inline 3.1 3B

87,3 %

91,2 %

80,4 %

80,3 %

GigaCode Inline 4.0 13B-A3B

88,6 %

93,0 %

82,8 %

83,2 %

Qwen2.5-Coder 3B

83,0 %

88,9 %

66,9 %

64,9 %

Qwen2.5-Coder 7B

85,4 %

90,0 %

80,9 %

79,9 %

Qwen3-Coder 30B-A3B Instruct

87,5 %

90,7 %

82,3 %

81,1 %

JetBrains Mellum 4B

80,7 %

88,6 %

62,5 %

62,3 %

*CC CS (Code Completion Click Score) — доля символов, не требующих ручного ввода. Рассчитывается итеративно: если символ не совпадает, то добавляется в input и генерируется заново.

Наша модель лидирует по всем представленным языкам, обходя даже 30B‑конкурента. Прирост по сравнению с предыдущей версией — 1-2 %, но это тысячи сэкономленных символов на проекте.

Многострочное автодополнение (multi-line)

Используется для генерации блоков, функций или выражений.

Модель

RealCode Python SG pass@1

RealCode Python FG pass@1

SAFIM Block pass@1

SAFIM CFE pass@1

SAFIM API pass@1

GigaCode Inline 3.1 3B

19,7 %

18,3 %

30,4 %

62,6 %

59,0 %

GigaCode Inline 4.0 13B-A3B

23,1 %

21,4 %

38,1 %

67,7 %

70,9 %

Qwen2.5-Coder 3B

20,7 %

18,6 %

46,5 %

59,3 %

67,7 %

Qwen2.5-Coder 7B

23,5 %

22,6 %

51,6 %

58,5 %

72,5 %

Qwen3-Coder 30B-A3B Instruct

25,3 %

23,8 %

19,3 %

14,4 %

75,4 %

JetBrains Mellum 4B

14,5 %

12,9 %

36,1 %

46,4 %

60,9 %

*RealCode SG/FG: случайный блок или целая функция; SAFIM: алгоритмические блоки (Codeforces), выражения, API-вызовы.

Тут наша модель сопоставима с альтернативными, доступными в open source, но дешевле для инференса. Прирост по сравнению с нашей предыдущей моделью Inline3.1 — до 8-12 % в ключевых метриках.

Синтаксические ошибки

Одна из главных проблем сode completion на основе LLM — это генерация некомпилируемого кода (незакрытые скобки, неверный синтаксис).

Модель

Python errors

Java errors

C++ errors

Total errors

GigaCode Inline 3.1 3B

7,2 %

9,3 %

10,3 %

8,9 %

GigaCode Inline 4.0 13B-A3B

5,5 %

7,8 %

7,9 %

7,0 %

Qwen2.5-Coder 3B

15,0 %

14,8 %

21,9 %

17,2 %

Qwen2.5-Coder 7B

12,2 %

12,6 %

16,5 %

13,8 %

Qwen3-Coder 30B-A3B Instruct

34,0 %

20,9 %

26,4 %

27,1 %

JetBrains Mellum 4B

23,0 %

20,7 %

29,4 %

24,4 %

Inline 4.0 ошибается в 2-4 раза реже, чем конкуренты. Это значит, что 93 % сгенерированного кода валидно и компилируемо, то есть почти не требует дополнительных правок от человека.

Автодополнение с контекстом (ExecRepoBench)

Важно для учёта кода из других файлов репозитория.

Модель

ExecRepoBench pass@1

GigaCode Inline 3.1 3B

23,9 %

GigaCode Inline 4.0 13B-A3B

22,3 %

Qwen2.5-Coder 3B

18,8 %

Qwen2.5-Coder 7B

18,2 %

Qwen3-Coder 30B-A3B Instruct

20,4 %

JetBrains Mellum 4B

21,0 %

Здесь лидируют две версии наших моделей, предыдущая (v3.1) даже немного лучше новой версии.

Итоги

Преимущества нашей модели:

  1. Эффективность для inference: в 4,5 раза больше параметров, но та же скорость с подсказками в режиме реального времени.

  2. Качество: меньше ошибок, лучше учёт контекста, почти нет синтаксических ошибок.

  3. Для бизнеса: команды пишут быстрее и, как следствие, снижают time-to-market. 

Попробуйте GigaCode по ссылке — будем рады отзывам в комментариях! Если есть вопросы — пишите, обсудим

Благодарности

Огромный вклад в создание модели внесли Алексей Куталев, Дарья Воронцова и Роман Родионов.

Автор: ratatosk

Источник

Rambler's Top100