В современном мире программирования искусственный интеллект и большие языковые модели (LLM) уверенно входят в повседневную разработку. Их потенциал значительно ускоряет процесс написания кода, сокращает рутинные задачи и может помогать решать сложные проблемы. Однако вместе с новыми возможностями появляются и неожиданные вызовы, как это продемонстрировал недавний случай на популярной платформе sketch.dev, где использование кода, сгенерированного LLM, привело к серии серьезных сбоев в работе сервиса. Инцидент произошел 15 июля 2025 года и вызвал несколько мини-аварий, впоследствии оказавшихся чем-то большим.
Вначале казалось, что новая версия продукта стабильна, но спустя некоторое время CPU сервера неожиданно начал увеличивать нагрузку, что постепенно привело к загрузке системы и замедлению работы всего сервиса до практически неприемлемого уровня. После детального анализа производительности и ресурсов стало понятно, что причина катастрофы кроется в работе базы данных. Были выявлены чрезвычайно сложные SQL-запросы, которые выполняли множественные полные сканирования таблиц. В обычных условиях такие операции сильно нагружают сервер базы данных, особенно если таблицы объемные и индексация недостаточна. Гипотеза была проста – нагрузка достигла критического уровня, при котором база данных перестала справляться, что и вызвало замедление всего сервиса.
Команда разработчиков приняла решение отредактировать SQL запросы, направив их на оптимизацию и снижение нагрузки. Нововведения были быстро внедрены, и система показала кратковременную стабильность. Однако спустя некоторое время снова началась аналогичная проблема – сначала резкий рост нагрузки на процессор, а затем системный тормоз. Причина проблемы стала понятна после тщательного мониторинга и обмена мнениями: её запускал специфический путь выполнения кода, который в свою очередь зависел от активности одного пользователя – CEO компании. Чтобы предотвратить дальнейшие сбои, при перезапуске системы руководство временно заблокировало доступ CEO к сервису.
Дальнейшее изучение позволило выстроить полную картину происходящего. Общий анализ показал, что проблема не была связана напрямую с базой данных, хотя там и наблюдалась конкуренция процессов. Вместо этого ключевой фактор – недавно переработанный код, который был перемещен из одного файла в другой. Эта модификация стала роковой. Сложность в том, что эта часть программы была переписана и отрефакторена с помощью искусственного интеллекта – языковой модели, которая производила изменения на основе полученного контекста, а затем изменения проверялись людьми.
Написанный и внедренный ИИ код имел небольшую, но критическую ошибку, которая изменила логику работы цикла для обработки запросов к API Github со следующего: Ранее в оригинальном коде при обнаружении ошибки во время получения репозиториев выполнялся выход из цикла с помощью команды break. Это означало, что в случае ошибки запросов дальнейшая обработка останавливалась, предотвращая излишнюю нагрузку. В новом варианте, созданном ИИ, команда break была изменена на continue, что по логике означало, что в случае ошибки программа должна была просто пропустить текущий шаг и продолжить цикл. Однако из-за этого изменения возникла бесконечная петля, которая постоянно повторялась при ошибках, не позволяя системе перейти к обработке других задач. Именно эта некорректная логика вызвала бесконечные SQL-запросы к базе и, как следствие, рост нагрузки на процессор.
Отсутствие своевременного обнаружения ошибки объяснялось тем, что рефакторинг представлял собой отрывок из большого блока кода и происходил в рамках перемещения файлов. Git и другие системы контроля версий умеют определять изменения на уровне файлов, но плохо показывают отличия внутри больших участков сдвинутого кода. В этом случае человеческий обзор сливался с большими объемами одинакового кода, и критическое изменение осталось незамеченным. Опыт показывает, что подобные ошибки не новы и раньше встречались разработчикам независимо от использования искусственного интеллекта. Тем не менее, применение LLM значительно увеличивает вероятность таких багов из-за особенностей их работы: они фактически записывают патчи, отдельные вставки и удаления кода, что вносит дополнительный риск расхождений при переносе больших блоков.
Технически ИИ агент в данном случае попытался угадать, как исправить код локально, но сработал конфликт между механизмом транскрипции изменений и локальным прогнозированием текста. Локальное предсказание победило и внесло ошибку, которую разработчики не заметили при ревью. Таким образом, ошибка всего лишь один неверный символ или слово изменила работу всего приложение. Осознав эту уязвимость, команда sketch.dev оперативно внедрила принципиально новый механизм работы с патчами.
Теперь их агент LLM может использовать буфер обмена, который позволяет копировать код целиком, без риска потерять важные детали. Кроме того, внедряется автоматическое выравнивание отступов, особенно актуальное для языков с чувствительностью к форматированию, например Python. Хотя опыт использования новых инструментов все еще в начальной стадии, первые результаты демонстрируют серьезное улучшение качества автоматически сгенерированного кода. Очень важным в будущем станет развитие систем контроля изменений на уровне частей кода, а не только целых файлов, как сейчас это делает Git. Некоторые специалисты предлагают добавить возможность отслеживания и проверки изменений между несмежными фрагментами кода, что позволило бы предотвращать подобные ошибки при больших рефакторингах.
Данный инцидент становится не просто локальной проблемой одной команды, а наглядным кейсом для всей индустрии разработки программного обеспечения, которая все больше интегрирует ИИ в свои процессы. История skethc.dev напоминает, что несмотря на мощь и удобство больших языковых моделей, контроль качества и тщательное тестирование остаются незаменимыми элементами. Более того, ситуация подчеркивает, что идеальное взаимодействие между человеком и ИИ пока еще требует совершенствования инструментов ревью, отчетности и обнаружения изменений. Если до недавнего времени ошибки в коде появлялись лишь по невнимательности, то сейчас добавились риски, связанные с особенностями генерации программного текста из нейросетей.
Важно понимать, что ИИ не является абсолютно безошибочным разработчиком. Он может не только принести много пользы, но и привести к значительным конфузам, если не контролировать результат. Этот опыт показывает важность синергии человеческого профессионализма и технологий ИИ – каждый из них должен дополнять другой, а не заменять. Через призму инцидента на sketch.dev становятся понятны перспективы развития современных coding-агентов и необходимость постоянного улучшения процессов доставки кода, аудита изменений и мониторинга в реальном времени.