AI Blindspots

Подготовительный рефакторинг

Preparatory refactoring — это когда сначала рефакторишь код, чтобы упростить будущие изменения, а потом уже делаешь сами изменения. Рефакторинг может быть сложным, но поскольку он сохраняет функциональность, его проще ревьюить, чем изменения логики.

Современные LLM без четкого плана не умеют декомпозировать изменения таким образом — они пытаются сделать все сразу. Иногда они еще и переусердствуют, как тот инженер-перфекционист, который слишком серьезно воспринял "правило бойскаута" и начинает чистить весь код подряд, пока вносит изменения. Поскольку ревью изменений от LLM критично важно, весь рефакторинг должен происходить заранее в отдельных PR'ах.

В идеале нужно просто запретить LLM делать посторонний рефакторинг (хотя Cursor Sonnet 3.7 плохо следует таким инструкциям, так что это не всегда работает). Альтернатива — сделать предварительный проход по коду, который LLM планирует изменить, дать ей шанс "навести красоту", а потом уже делать основные изменения. Иногда проблему усугубляет контекст с best practices (например, "код должен иметь type annotations") — модель может решить добавлять аннотации везде. Помогает четко ограничить область кода, которую LLM должна редактировать.

Примеры