Как мы обучили Next Edit Suggestions модель

Как мы обучили Next Edit Suggestions модель

Что такое Next Edit Suggestions

Next Edit Suggestions (NES) это режим автодополнения, который предсказывает следующее редактирование программиста: что он изменит, где и как. Модель смотрит не только на код, но и на последнюю серию правок и предсказывает следующее действие в той же логике. Образно говоря, это модель которая работает в пространстве действий и намерений программиста.

В отличие от обычного автокомплита, NES:

  • опирается на историю недавних правок
  • работает не только под курсором, а в любом месте файла
  • может не только добавлять код, но и удалять и изменять

Типичные кейсы NES:

  • массовое переименование, если поменял название переменной в одном месте
  • обновление вызовов под новую сигнатуру
  • продолжение начатого рефакторинга
  • приведение к единому стилю
  • тиражирование фикса
  • добавление документации по аналогии
  • удаление мёртвого кода
  • балансировка скобок и мелкие линт-фиксы

На такую модель можно смотреть не как на модель текст -> текст, а как на модель последовательность действий -> последовательность действий.

Зачем это всё, если есть агенты

Есть мнение, что код-комплишн и некст-эдит не нужны, весь хайп на агентах. Например Sweep пишут: “We decided to shut down because autocomplete usage is declining industry-wide as agents have become significantly better”. Мы у себя в команде Koda видим ситуации при редактировании кода, когда надёжнее и в целом быстрее пробежаться что-то поправить контролируемо и с лёгкостью нажатия таба, и не нужно формулировать промпт.

В теории NES расширяем до next action / next everything, например можно представить что если следующее действие это открыть терминал или запустить сборку, было бы неплохо получать и такие предложения.

Как обучали

Для выбора базовой модели, было важно уложиться в желаемый латенси на запрос, поэтому мы замерили на скорость инференса на наших целевых гпу серверах семейство моделей, и остановились на Qwen2.5-Coder-1.5B и deepseek-coder-1.3b. Обе эти кодер модели которые была предобучены с исопльзованием FIM режима. По метрикам в итоге остановились на квен-кодере как базе для SFT.

По данным для обучения, у нас в Koda были накоплены за год работы анинимизированные частичные логи от нашей модели код-комплишена. Мы реализовали пайплайн превращения этих код-комплишн FIM логов для NES датасета. Сгруппировав по юзеру+сессии+файлу получили последовательности шумных частичных локальных изменений кода. Посколькую одна правка была представлена в таких логах десятками микро-событий, склеили подпоследовательности в те которые образут по логике одну правку, использовали для этого алгоритм мерджа Incremental Difference Detecting из работы “NES: An Instruction-Free, Low-Latency Next Edit Suggestion Framework Powered by Learned Historical Editing Trajectories”. Дальше было важно отфильтровать те их из оставшихся последовательностей правок, которые действительно близки природе NES таски, а именно те в которых таргет был бы сильно связан причинной связью с историей правок кода, а не просто быть следующим логичным кусочком кода. В итоге из миллионов сэмплов получили дясятки тысяч. Так же помогло сделать среди типов insert/replace/delete правок сделать апсемлинг replace. Обучили в SFT режиме, с выбором лучшего чекпоинта по прокси-метрикам.

Таблицы сравнений моделей

В опенсорсе на тему NES есть:

  • модель Instinct и датасет Instinct от разработчиков плагина Continue
  • модель Zeta и Zeta 2 и датасет Zeta от разработчиков редактора Zed
  • модели Sweep от разработчиков плагина Sweep AI
  • датасет NEP (переработанный CommitPack) от авторов статьи “Next Edit Prediction: Learning to Predict Code Edits from Context and Interaction History”

Из основных закрытых NES: Cursor Tab, GitHub Copilot NES, JetBrains AI Assistant.

Открытые модели главным образом дообучены на основе Qwen2.5-Coder моделей, кроме Zeta 2 которая на основе Seed-Coder-8B.

В качестве метрик используем: Exact Match (EM), Edit Similarity (ES), Prefix Similarity (PS), Judge. EM показывает точное совпадение, ES показывает сильно ли нужно править, Judge оценка через GPT-5.2

Таблица замеров моделей на нашем тестовом сете:

Our test (500 samples)

n_of_truncated

Koda-next-edit (1.5B)

zeta-2 (8B)

Instinct (7B)

sweep-next-edit-v2-7B

sweep-next-edit-1.5B

sweep-next-edit-0.5B

На наш взгяд тут правильнее смотреть на оценку судьёй, из-за разницы форматов моделей.

Таблица замеров моделей судьёй на разных сетах (судьёй более честно сравнивать разные форматы между собой):

Instinct test

Avg weighted

Koda-next-edit (1.5B)

zeta-2 (8B)

Instinct (7B)

sweep-next-edit-v2-7B

sweep-next-edit-1.5B

sweep-next-edit-0.5B

Тут на отдельном сете часто лучше та модель, для которой этот сет является родным. Простое среднее ставит нашу модель koda-next-edit (1.5B) на первое место, средневзвешенное (по числу сэмплов) на второе после Instinct (7B). Разница объясняется размером родного для Instinct теста, его вклад в средневзвешенное доминирует. Показательным сетом можно считать датасет NEP, как независимый бенчмарк (не является родным ни для одной из моделей). Итого, в среднем наша модель заняла топ-1 место, обогнав даже большие модели.

Что дальше

В планах у нас ставить искать подходы по обогащению контекста: попробуем добавлять в контекст так же наиболее похожие куска кода, и ещё добавлять подсказки от линтера. Так же будем пробовать модели побольше, если удастся ускорить инференс для нужного латенси. Так же ограничением для NES являются возможности UI, то как потом в плагине собственно показывать подсказки, тоже будем улучшать.

Как работает в плагине

Начиная с версииKodacode0.9.0 для VSCode мы добавили поддержку нашей модели в режиме бета тестирования. Пока есть что улучшить в части отображения подсказок и есть что подправить, но уже можно пробовать. В следующих версиях отшлифуем и будет кайф. Вот пример, как это работает:

А вок как переключить в настройках на Next Edit

Скачивайте и пользуйтесь KodaCode вот тут:https://download.kodacode.ru

Иподписывайтесь на наш ТГК, чтобы не пропустить новую информацию про Koda, AI и всё что с ними связано!

Читать оригинал