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

Хотя open source модели для агентного программирования в последние месяцы развиваются стремительно, направление Next Edit пока находится в зачаточном состоянии. Основной прогресс был достигнут командой Zed с их моделью Zeta, и мы рады, что можем опираться на их опыт [6]. Одна из наших целей — подчеркнуть открывающиеся возможности и заложить основу для будущей работы, которая принесёт пользу не только нашей команде, но и сообществу, и всей экосистеме разработчиков.
И хотя существующие модели вроде Mercury Coder показывают отличные результаты, Instinct даёт разработчикам возможность запускать или настраивать Next Edit-модель на собственных GPU, решая задачи приватности и кастомизации.
|
Аспект |
Традиционное атодополнение |
Next Edit |
|---|---|---|
|
Область изменений |
Вставляет текст только в точке курсора |
Переписывает окно кода (удаления, вставки, замены) |
|
Сложные изменения |
Требует многократного подтверждения |
Выполняет сложный рефакторинг одной операцией |
|
Перестройка кода |
Не умеет удалять или перестраивать код |
Понимает траектории редактирования и намерения разработчика |
|
Рабочий поток |
Частые прерывания сбивают ритм |
Поддерживает поток с минимумом отвлечений |
Обычное таб-дополнение вставляет код только в точке курсора во время набора. Это полезно при работе с шаблонным кодом, но в реальности большую часть времени разработчики занимаются рефакторингом, поддержкой, итерациями — то есть редактированием кода.
Например, рефакторинг функции может включать: удаление старых параметров (5 нажатий клавиш), переход к оператору return (2 перемещения курсора), изменение возвращаемого типа (8 нажатий), обновление тела функции (20+ нажатий и 5+ перемещений курсора). С Instinct вся эта последовательность превращается в одно нажатие Tab для подтверждения — 40+ ручных операций сокращаются до одной.
Чтобы создать нашу Next Edit-модель, нам нужны были качественные обучающие данные. Вместо того чтобы синтетически генерировать примеры, мы автоматически собрали более 4000 реальных правок от команды Continue во время работы над нашим open source-кодом. Это на порядок больше, чем датасет Zeta, опубликованный ранее в этом году, и такие данные лучше отражают реальные паттерны разработки, чем чисто синтетические примеры, собранные из git-коммитов.
Каждый пример данных включал:
пять последних правок разработчика,
релевантный контекст из других файлов,
участок кода для переписывания,
фактическое изменение, которое разработчик внёс в этот участок.
Ключевой вопрос, с которым мы столкнулись, — что считать «правкой». Каждое нажатие клавиши? Каждый раз при сохранении файла? Все нажатия в рамках определённого окна времени? После множества итераций мы определили набор эвристик на основе строк и времени, которые группировали отдельные нажатия в цельные и самодостаточные диффы.
Анализируя последовательности таких диффов, мы заметили, что разработчики иногда возвращались к одним и тем же строкам, многократно изменяя их. Мы ввели фильтры, отбрасывающие такие примеры, поскольку хотели, чтобы Instinct делал эффективные и ненавязчивые изменения без повторов.
Пайплайны контекста автодополнения [7] Continue предоставляли релевантную информацию о кодовой базе, включая содержимое текущего файла в prompt. Область редактирования (участок кода, который модель должна переписать) мы определили как отрезок, начинающийся строкой выше курсора и заканчивающийся пятью строками ниже. Это решение базировалось на естественных особенностях диффов в собранном датасете.
В совокупности последовательность правок, контекст, содержимое текущего файла и выделенный участок кода дают всю необходимую информацию, чтобы понять намерения разработчика и предсказать следующий шаг в цепочке изменений.
Одной из проблем стало то, что команда Continue в основном работает с кодом на Typescript. Однако нам хотелось, чтобы модель сохраняла поддержку нескольких языков. Помимо продуманного подхода к обучению (об этом ниже), мы использовали развернутую у себя модель Qwen3-Coder-30B, чтобы синтетически «перевести» диффы, контекст и содержимое файлов на Java, C, Python и Rust. Таким образом мы построили многоязычный датасет на основе данных с Typescript. Набор точных корректоров и фильтров обеспечивал высокое качество и сопоставимое распределение правок среди 4000+ синтетических примеров.
С готовым многоязычным датасетом мы перешли к supervised fine-tuning (SFT). Для специализированных задач вроде Next Edit SFT обычно выполняется с помощью Low-Rank Adaptation (LoRA): она хоть и усваивает меньше, зато и забывает меньше [8] из уже имеющихся у предобученной модели навыков программирования.
Главная проблема LoRA в том, что параметры для дообучения фиксируются ещё до старта обучения. Более предпочтительно выявить те параметры, обновление весов которых действительно критично, и менять только их. Тогда задача Next Edit будет не обучением «с нуля» ценой потери прежних знаний, а адаптацией к редактированию при сохранении общего кодерского бэкграунда.
Именно такое решение мы нашли в алгоритме Selective Knowledge Transfer (SeleKT), применяемом для обучения NextCoder [9] — моделей с инструкциями для редактирования кода. SeleKT вычисляет плотные градиенты (как при полном fine-tuning), выбирает top-k по величине и обновляет только их. Таким образом, практика показывает, что действительно нужно изменить, вместо угадывания заранее. В итоге корректируются только самые важные веса для задачи Next Edit. Более того, зануление мелких обновлений помогает избежать переобучения и деградации уже имеющихся знаний — проблем, с которыми столкнулся бы полный fine-tuning.
Мы дообучили 5% параметров модели Qwen2.5-Coder-7B [10] с помощью SeleKT. После первоначального подбора гиперпараметров процесс обучения был стандартным: постепенный разогрев learning rate и последующее затухание по косинусной кривой в течение 5 эпох. Для быстрой оценки качества переписываний на обучении мы использовали метрику CodeBLEU [11], сравнивая предсказанные изменения с эталонными. Сравнение 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 [12], показывает, что модель также значительно ускоряет рабочий процесс.
Если пройтись назад по таблице динамического программирования (DP) в алгоритме вычисления расстояния Левенштейна, можно извлечь посимвольный дифф между редактируемой областью и предложенным переписыванием. Этот дифф затем можно «нарезать» на операции редактирования: например, добавление трёх символов в одной позиции, удаление пяти в другой и т. д.
Минимальное время выполнения правки определяется оптимальной комбинацией нажатий клавиш и перемещений курсора, необходимых для всех операций. Это тоже можно формализовать как задачу DP. Мы исходили из следующих допущений: разработчик печатает со средней скоростью 90 слов в минуту, может выделять и удалять блоки вместо многократного Backspace, использует мелкие перемещения стрелками вместо более затратных прыжков курсора, а при расчёте учитывается пространственная дистанция между позициями курсора (строка и символ), а не просто индекс в строке.
Это нижняя граница времени для ручного редактирования. Мы сравнили её со средним временем инференса модели на нашем внутреннем эндпоинте SGLang плюс временем одного нажатия клавиши (Tab для подтверждения).
Результат: даже если бы разработчик сразу знал нужную правку и выполнил её оптимальной последовательностью действий со скоростью 90 WPM, использование модели всё равно обеспечивало бы получение качественного изменения в 6,4 раза быстрее.

Друзья! Эту статью перевела команда ТГК «AI for Devs [1]» — канала, где мы рассказываем про AI-ассистентов, плагины для IDE, делимся практическими кейсами и свежими новостями из мира ИИ. Подписывайтесь [1], чтобы быть в курсе и ничего не упустить!
Во-первых, попробуйте Instinct сами! Модель весит 7B параметров, так что на большинстве ноутбуков она будет работать медленно, но при достаточном «железе» — отличный вариант для локального развертывания. Подробнее читайте в нашем гайде [13].
Если хотите развивать наш датасет, пайплайны обучения или открытые веса (например, чтобы запускать KTO [14] на своих данных о принятых/отклонённых правках), загляните в наш репозиторий на GitHub [15], модельную карточку на HuggingFace [3] и датасет.
Автор: python_leader
Источник [16]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/19431
URLs in this post:
[1] AI for Devs: https://t.me/+k2M02gENeksyM2Y6
[2] обучения: http://www.braintools.ru/article/5125
[3] Instinct: https://huggingface.co/continuedev/instinct?ref=blog.continue.dev
[4] Next Edit: https://blog.continue.dev/next-edit-powered-by-mercury-coder/
[5] Mercury Coder: https://hub.continue.dev/inceptionlabs/mercury-coder?ref=blog.continue.dev
[6] опыт: http://www.braintools.ru/article/6952
[7] Пайплайны контекста автодополнения: https://blog.continue.dev/root-path-context-the-secret-ingredient-in-continues-autocomplete-prompt/
[8] усваивает меньше, зато и забывает меньше: https://arxiv.org/abs/2405.09673?ref=blog.continue.dev
[9] NextCoder: https://www.microsoft.com/en-us/research/publication/nextcoder-robust-adaptation-of-code-lms-to-diverse-code-edits/?ref=blog.continue.dev
[10] Qwen2.5-Coder-7B: https://arxiv.org/abs/2409.12186?ref=blog.continue.dev
[11] CodeBLEU: https://arxiv.org/abs/2009.10297?ref=blog.continue.dev
[12] Coeditor: https://arxiv.org/abs/2305.18584?ref=blog.continue.dev
[13] нашем гайде: https://docs.continue.dev/guides/instinct?ref=blog.continue.dev
[14] KTO: https://arxiv.org/abs/2402.01306?ref=blog.continue.dev
[15] репозиторий на GitHub: https://github.com/continuedev/instinct?ref=blog.continue.dev
[16] Источник: https://habr.com/ru/articles/946286/?utm_campaign=946286&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.