Команда AI for Devs подготовила перевод статьи о том, как Continue обучила Instinct — открытую модель Next Edit для предсказания следующей правки кода. Разработчики собрали тысячи реальных правок, внедрили алгоритм SeleKT для обучения и показали, что их модель работает в 6,4 раза быстрее ручного редактирования.
Мы рады представить Instinct — открытую Next Edit-модель, которая умно предугадывает ваши действия и поддерживает рабочий ритм.
Когда мы запускали Next Edit, её впервые представил Mercury Coder от Inception. Сегодня мы расширяем границы возможностей с Instinct — открытой моделью, обученной внутри компании, которую разработчики могут запускать локально на своих GPU.
В процессе работы Instinct улавливает траекторию ваших изменений и автоматически выполняет следующий шаг — примерно в 6,4 раза быстрее ручного редактирования.

Зачем обучать открытую модель?
Хотя open source модели для агентного программирования в последние месяцы развиваются стремительно, направление Next Edit пока находится в зачаточном состоянии. Основной прогресс был достигнут командой Zed с их моделью Zeta, и мы рады, что можем опираться на их опыт. Одна из наших целей — подчеркнуть открывающиеся возможности и заложить основу для будущей работы, которая принесёт пользу не только нашей команде, но и сообществу, и всей экосистеме разработчиков.
И хотя существующие модели вроде Mercury Coder показывают отличные результаты, Instinct даёт разработчикам возможность запускать или настраивать Next Edit-модель на собственных GPU, решая задачи приватности и кастомизации.
Что такое Next Edit?
Аспект |
Традиционное атодополнение |
Next Edit |
---|---|---|
Область изменений |
Вставляет текст только в точке курсора |
Переписывает окно кода (удаления, вставки, замены) |
Сложные изменения |
Требует многократного подтверждения |
Выполняет сложный рефакторинг одной операцией |
Перестройка кода |
Не умеет удалять или перестраивать код |
Понимает траектории редактирования и намерения разработчика |
Рабочий поток |
Частые прерывания сбивают ритм |
Поддерживает поток с минимумом отвлечений |
Обычное таб-дополнение вставляет код только в точке курсора во время набора. Это полезно при работе с шаблонным кодом, но в реальности большую часть времени разработчики занимаются рефакторингом, поддержкой, итерациями — то есть редактированием кода.
Например, рефакторинг функции может включать: удаление старых параметров (5 нажатий клавиш), переход к оператору return (2 перемещения курсора), изменение возвращаемого типа (8 нажатий), обновление тела функции (20+ нажатий и 5+ перемещений курсора). С Instinct вся эта последовательность превращается в одно нажатие Tab для подтверждения — 40+ ручных операций сокращаются до одной.
Обучение модели
Данные из реальной разработки
Чтобы создать нашу Next Edit-модель, нам нужны были качественные обучающие данные. Вместо того чтобы синтетически генерировать примеры, мы автоматически собрали более 4000 реальных правок от команды Continue во время работы над нашим open source-кодом. Это на порядок больше, чем датасет Zeta, опубликованный ранее в этом году, и такие данные лучше отражают реальные паттерны разработки, чем чисто синтетические примеры, собранные из git-коммитов.
Каждый пример данных включал:
пять последних правок разработчика,
релевантный контекст из других файлов,
участок кода для переписывания,
фактическое изменение, которое разработчик внёс в этот участок.
Ключевой вопрос, с которым мы столкнулись, — что считать «правкой». Каждое нажатие клавиши? Каждый раз при сохранении файла? Все нажатия в рамках определённого окна времени? После множества итераций мы определили набор эвристик на основе строк и времени, которые группировали отдельные нажатия в цельные и самодостаточные диффы.
Анализируя последовательности таких диффов, мы заметили, что разработчики иногда возвращались к одним и тем же строкам, многократно изменяя их. Мы ввели фильтры, отбрасывающие такие примеры, поскольку хотели, чтобы Instinct делал эффективные и ненавязчивые изменения без повторов.
Пайплайны контекста автодополнения Continue предоставляли релевантную информацию о кодовой базе, включая содержимое текущего файла в prompt. Область редактирования (участок кода, который модель должна переписать) мы определили как отрезок, начинающийся строкой выше курсора и заканчивающийся пятью строками ниже. Это решение базировалось на естественных особенностях диффов в собранном датасете.
В совокупности последовательность правок, контекст, содержимое текущего файла и выделенный участок кода дают всю необходимую информацию, чтобы понять намерения разработчика и предсказать следующий шаг в цепочке изменений.
Поддержка многоязычности
Одной из проблем стало то, что команда Continue в основном работает с кодом на Typescript. Однако нам хотелось, чтобы модель сохраняла поддержку нескольких языков. Помимо продуманного подхода к обучению (об этом ниже), мы использовали развернутую у себя модель Qwen3-Coder-30B, чтобы синтетически «перевести» диффы, контекст и содержимое файлов на Java, C, Python и Rust. Таким образом мы построили многоязычный датасет на основе данных с Typescript. Набор точных корректоров и фильтров обеспечивал высокое качество и сопоставимое распределение правок среди 4000+ синтетических примеров.
Надёжное обучение для задачи Next Edit
С готовым многоязычным датасетом мы перешли к supervised fine-tuning (SFT). Для специализированных задач вроде Next Edit SFT обычно выполняется с помощью Low-Rank Adaptation (LoRA): она хоть и усваивает меньше, зато и забывает меньше из уже имеющихся у предобученной модели навыков программирования.
Главная проблема LoRA в том, что параметры для дообучения фиксируются ещё до старта обучения. Более предпочтительно выявить те параметры, обновление весов которых действительно критично, и менять только их. Тогда задача Next Edit будет не обучением «с нуля» ценой потери прежних знаний, а адаптацией к редактированию при сохранении общего кодерского бэкграунда.
Именно такое решение мы нашли в алгоритме Selective Knowledge Transfer (SeleKT), применяемом для обучения NextCoder — моделей с инструкциями для редактирования кода. SeleKT вычисляет плотные градиенты (как при полном fine-tuning), выбирает top-k по величине и обновляет только их. Таким образом, практика показывает, что действительно нужно изменить, вместо угадывания заранее. В итоге корректируются только самые важные веса для задачи Next Edit. Более того, зануление мелких обновлений помогает избежать переобучения и деградации уже имеющихся знаний — проблем, с которыми столкнулся бы полный fine-tuning.
Мы дообучили 5% параметров модели Qwen2.5-Coder-7B с помощью SeleKT. После первоначального подбора гиперпараметров процесс обучения был стандартным: постепенный разогрев learning rate и последующее затухание по косинусной кривой в течение 5 эпох. Для быстрой оценки качества переписываний на обучении мы использовали метрику CodeBLEU, сравнивая предсказанные изменения с эталонными. Сравнение CodeBLEU между разными языками датасета позволило настроить пропорции данных и добиться высокой валидационной точности во всех языках. Благодаря такому подходу для обучения потребовалось всего небольшое число многоязычных примеров.
Результаты: оценка качества и скорости
3.877 — средний балл LLM-оценщика (новый open-source state-of-the-art)
в 6.4 раза быстрее, чем ручной набор правок (на нашем кластере 8xH100)
Формально оценить качество предложений Next Edit непросто, ведь одну и ту же задачу можно решить разными способами. Поэтому мы использовали Claude как LLM-оценщика с инструкциями оценивать предложения Next Edit по пятибалльной шкале, где:
5 — полное функциональное совпадение с правкой разработчика;
4 — близкая к эталонной правка, но без точного функционального совпадения;
3 — правка, не совпадающая с эталоном, но логичная для эксперта в такой ситуации;
2 — изменение, которое не вытекает логически из предыдущих правок и контекста;
1 — вмешательство, мешающее работе разработчика (например, крупные удаления или полный оффтоп);
0 — некорректное переписывание, не совпадающее с выделенной областью.
Эта методика близка к той, что использует Zed для модели Zeta. Мы заметили, что их prompt приводил к оценкам только 0 или 5 и основывался на ручных утверждениях о следующей правке. Мы же разработали другой системный prompt, который позволяет охватить весь спектр баллов и сравнивает правку модели с эталонной правкой разработчика вместо жёстких правил.
С небольшими адаптациями под наши промпты Instinct показала средний результат 3.877, превысив показатель Zeta (3.735) на тестовом наборе. Мы рады видеть, что сообщество продолжит развивать этот бенчмарк и улучшать результаты.
Instinct не только выдаёт качественные подсказки — наша метрика «keystroke-distance», частично основанная на подходе Coeditor, показывает, что модель также значительно ускоряет рабочий процесс.
Если пройтись назад по таблице динамического программирования (DP) в алгоритме вычисления расстояния Левенштейна, можно извлечь посимвольный дифф между редактируемой областью и предложенным переписыванием. Этот дифф затем можно «нарезать» на операции редактирования: например, добавление трёх символов в одной позиции, удаление пяти в другой и т. д.
Минимальное время выполнения правки определяется оптимальной комбинацией нажатий клавиш и перемещений курсора, необходимых для всех операций. Это тоже можно формализовать как задачу DP. Мы исходили из следующих допущений: разработчик печатает со средней скоростью 90 слов в минуту, может выделять и удалять блоки вместо многократного Backspace, использует мелкие перемещения стрелками вместо более затратных прыжков курсора, а при расчёте учитывается пространственная дистанция между позициями курсора (строка и символ), а не просто индекс в строке.
Это нижняя граница времени для ручного редактирования. Мы сравнили её со средним временем инференса модели на нашем внутреннем эндпоинте SGLang плюс временем одного нажатия клавиши (Tab для подтверждения).
Результат: даже если бы разработчик сразу знал нужную правку и выполнил её оптимальной последовательностью действий со скоростью 90 WPM, использование модели всё равно обеспечивало бы получение качественного изменения в 6,4 раза быстрее.
Русскоязычное сообщество про AI в разработке

Друзья! Эту статью перевела команда ТГК «AI for Devs» — канала, где мы рассказываем про AI-ассистентов, плагины для IDE, делимся практическими кейсами и свежими новостями из мира ИИ. Подписывайтесь, чтобы быть в курсе и ничего не упустить!
Что дальше?
Во-первых, попробуйте Instinct сами! Модель весит 7B параметров, так что на большинстве ноутбуков она будет работать медленно, но при достаточном «железе» — отличный вариант для локального развертывания. Подробнее читайте в нашем гайде.
Если хотите развивать наш датасет, пайплайны обучения или открытые веса (например, чтобы запускать KTO на своих данных о принятых/отклонённых правках), загляните в наш репозиторий на GitHub, модельную карточку на HuggingFace и датасет.