Fill-in-the-Middle: как модель дописывает код в середине файла

denisart 14 минут назад Fill-in-the-Middle: как модель дописывает код в середине файла Простой 4 мин 375 Машинное обучение * FAQ Дисклеймер. Я занимаюсь кодинговыми AI-ассистентами: начинал с автодополнения, сейчас...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: denisart 14 минут назад Fill-in-the-Middle: как модель дописывает код в середине файла Простой 4 мин 375 Машинное обучение * FAQ Дисклеймер. Я занимаюсь кодинговыми AI-ассистентами: начинал с автодополнения, сейчас работаю с агентами и внедрением AI в SDLC. Последние три года я регулярно выступаю с докладами и образовательными лекциями.
За это время у меня накопилось много заметок о том, как устроены AI-ассистенты и агенты, написанных простым языком. Клоуз-тест (cloze-test) - это упражнение, в котором некоторая часть текста скрывается (маскируется), и участнику необходимо заполнить эти пробелы учитывая лексику и контекст. Слово cloze произошло от closure из гештальдпсихологии, а сам тест предложил Вилсон Тэйлор в далеком 1953 году .
Технические детали
В 2018 году похожий тест применили для обучения языковой модели BERT . Если при классическом обучении LLM предсказывает следующий токен некоторой входной последовательностиtoken1, token2, token3, ... -> predict_next_tokenто в cloze-подходе авторы статьи заставили BERT-модель предсказывать замаскированные токены, получая фрагменты контекста слева и справа, которые обычно называют PREFIX и SUFFIXПредсказание замаскированного текстаПодобный метод обучения моделей называют Fill-in-the-Middle (FIM).
Эту идею можно применить и к тексту, содержащему код. Обычно при FIM-подходе во время обучения добавляют специальные токены, которые обозначают PREFIX, SUFFIX, MIDDLE (замаскированный код). На картинках эти токены представлены как |PREFIX| , |SUFFIX| и |MIDDLE| соответственноFIM промптВ этом примере |END_OF_TEXT| также является специальным токеном, который обозначает конец генерации.
Его можно воспринимать как один из стоп-сигналов: если модель сгенерировала его, клиент прекращает генерацию и возвращает ответ (без этого токена). На практике часто добавляют и другие стоп-условия. В итоге, так как LLM просто продолжает входящую последовательность, отправляя на вход |PREFIX|{prefix}|SUFFIX|{suffix}|MIDDLE|, мы ожидаем получить {masked_code}|END_OF_TEXT|FIM примерРассмотрим небольшой пример: пусть в некотором файле card.
Отраслевые последствия
py мы замаскировали код Card("Q", "Hearts и хотим, чтобы LLM его предсказала. Во время обучения модель учится предсказывать продолжение PREFIX так, чтобы сгенерированный код логично соединял PREFIX и SUFFIX. Она заметит в префиксе созданный датакласс Card, а из суффикса видно, что ниже ожидается объект card с полем rank, т.
идет обращение к его полю card. Составим промпт для LLM по принципу, описанному вышеПример запроса для card. pyВ нашем примере мы можем получить примерно такой ответОбычно модели содержат и другие специальные токены, которые позволяют предоставлять модели дополнительный контекст: содержание других файлов, содержание pull request, репорты из GitHub/GitLab issues, и т.
Пример запроса для нескольких файловЕдиного соглашения об именовании таких специальных токенов нет, поэтому мы используем обобщенный вид |{TOKEN_NAME}|, не привязываясь к конкретной модели.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.






