Как научить LLM исправлять код без лишних изменений
При исправлении простых ошибок модели вроде GPT-5.4 часто делают избыточную редактуру: вместо точечного патча они переписывают функции, меняют структуру и добавляют лишнюю логику. Это усложняет код-ревью, потому что diff становится большим и трудночитаемым, хотя баг можно было исправить одной строкой. Проблема особенно критична при доработке существующего кода, где важно сохранить исходную структуру.
Для оценки ввели метрики минимальности изменений: нормализованное расстояние Левенштейна на уровне токенов и добавленную когнитивную сложность. Эксперименты на BigCodeBench показали, что даже топовые модели склонны к лишним изменениям, а модели с рассуждениями переписывают код сильнее, чем без них. Простое указание в промпте сохранять оригинальный код заметно снижает diff и повышает точность.
При обучении лучше всего себя показало RL с функцией вознаграждения, учитывающей корректность и минимальность правок: оно снижает объём изменений без потери качества и не вызывает деградации навыков. SFT, наоборот, приводит к переобучению и ухудшает обобщение. Упрощённый вариант с LoRA даёт близкий эффект, что делает настройку таких моделей дешевле и практичнее.
Коротко
- Избыточная редактура возникает, когда модель исправляет баг, но переписывает значительную часть кода без необходимости, увеличивая diff и усложняя ревью.
- Для оценки минимальности правок используются метрики: расстояние Левенштейна на уровне токенов и добавленная когнитивная сложность.
- GPT-5.4 показала одну из худших метрик по объёму лишних изменений, тогда как Claude Opus 4.6 делает более точечные правки.
- Явное указание в промпте сохранять оригинальный код снижает объём изменений и одновременно улучшает Pass@1 у большинства моделей.
- RL-обучение даёт лучший баланс: снижает лишние изменения, сохраняет качество и не вызывает катастрофического забывания.
FAQ
Зачем бороться с избыточной редактурой в кодинг-моделях, если код остаётся корректным?
Потому что лишние изменения увеличивают diff, усложняют ревью и повышают риск незаметной деградации кодовой базы.
Как можно быстро снизить объём лишних изменений без обучения модели?
Добавить в промпт явное требование сохранять оригинальный код и его логику — это сразу уменьшает diff и повышает точность.
Какая методика обучения лучше всего учит модели делать минимальные правки?
Обучение с подкреплением, где вознаграждение учитывает и корректность, и минимальность изменений — оно даёт лучший результат без потери навыков.
Читайте также
Как я дообучал модель на своих текстах после провала статьи на Хабре
Как я локально тестировал новый Qwen 3.6 и Gemma 4
Как писать промпты для разработки: опыт, который экономит часы
Как тимлид заменил десятки вкладок на файловую систему и Claude Code
Как в рабочий чат добавили ИИ-ассистента и что из этого вышло
- Избыточная редактура как отдельный failure mode LLM: LLM при исправлении багов склонны менять больше кода, чем требуется, даже если результат корректен. Это создает большой diff и усложняет код-ревью, увеличивая риск незаметной деградации кодовой базы, особенно при работе с существующим кодом.
[LLM / Failure Modes]
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
LLM для кодинга системно переписывают больше кода, чем нужно для фикса багов. Это можно измерить и частично исправить — через промптинг и обучение с подкреплением.