Instinct от Continue: будущее автоматического рефакторинга. continue.. continue. instinct.. continue. instinct. llm.. continue. instinct. llm. Open source.. continue. instinct. llm. Open source. автодополнение.. continue. instinct. llm. Open source. автодополнение. производительность.. continue. instinct. llm. Open source. автодополнение. производительность. Рефакторинг кода.

Команда AI for Devs подготовила перевод статьи о том, как Continue обучила Instinct — открытую модель Next Edit для предсказания следующей правки кода. Разработчики собрали тысячи реальных правок, внедрили алгоритм SeleKT для обучения и показали, что их модель работает в 6,4 раза быстрее ручного редактирования.


Мы рады представить Instinct — открытую Next Edit-модель, которая умно предугадывает ваши действия и поддерживает рабочий ритм.

Когда мы запускали Next Edit, её впервые представил Mercury Coder от Inception. Сегодня мы расширяем границы возможностей с Instinct — открытой моделью, обученной внутри компании, которую разработчики могут запускать локально на своих GPU.

В процессе работы Instinct улавливает траекторию ваших изменений и автоматически выполняет следующий шаг — примерно в 6,4 раза быстрее ручного редактирования.

Instinct от Continue: будущее автоматического рефакторинга - 1

Зачем обучать открытую модель?

Хотя 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 в разработке

Instinct от Continue: будущее автоматического рефакторинга - 2

Друзья! Эту статью перевела команда ТГК «AI for Devs» — канала, где мы рассказываем про AI-ассистентов, плагины для IDE, делимся практическими кейсами и свежими новостями из мира ИИ. Подписывайтесь, чтобы быть в курсе и ничего не упустить!

Что дальше?

Во-первых, попробуйте Instinct сами! Модель весит 7B параметров, так что на большинстве ноутбуков она будет работать медленно, но при достаточном «железе» — отличный вариант для локального развертывания. Подробнее читайте в нашем гайде.

Если хотите развивать наш датасет, пайплайны обучения или открытые веса (например, чтобы запускать KTO на своих данных о принятых/отклонённых правках), загляните в наш репозиторий на GitHub, модельную карточку на HuggingFace и датасет.

Автор: python_leader

Источник

Rambler's Top100