# Ошибки в коде от ИИ: десять типичных багов и как их найти

> Десять типичных ошибок в коде от ИИ: секреты в коде, нет проверки прав, тихие сбои, гонки, N+1, даты и другие. Как выглядит каждая и как её заметить.

Published: 2026-01-10 · Source: https://subxcat.com/ru/articles/ai-code-common-bugs · Author: SUBXCAT

Ошибки в коде от ИИ повторяются из проекта в проект. Модели учились на огромном количестве примеров, а примеры чаще показывают, как сделать, чтобы заработало, чем как сделать, чтобы не сломалось. Поэтому баги в сгенерированном коде предсказуемы — и это хорошая новость: их можно искать по списку.

Ниже десять самых частых. Для каждой — как она выглядит и как её заметить, даже если ты не читаешь код каждый день.

## 1. Секреты прямо в коде

Ключ от платёжной системы, базы или API модели записан строкой в файле, иногда в той части, что уходит в браузер.

Как заметить: поищи по проекту `sk_`, `secret`, `api_key`, `password`, `service_role`. Всё, что нашлось вне файла с переменными окружения, — проблема. Если файл уже был в GitHub, ключ надо менять, а не просто удалять.

## 2. Нет проверки прав на сервере

Интерфейс показывает только свои записи, но сервер отдаёт любую по идентификатору. Проверка «чьё это» есть в кнопке, а не в запросе.

Как заметить: заведи два аккаунта, возьми идентификатор записи первого и запроси её из-под второго. Попробуй прочитать, изменить и удалить.

## 3. Нет обработки ошибок

Код ждёт, что внешний сервис ответит, база доступна, а файл существует. Когда это не так, пользователь видит белый экран или вечную загрузку.

Как заметить: отключи интернет посреди действия, введи несуществующий адрес, подними лимит у тестового ключа. Посмотри, что увидит человек и что останется в логе.

## 4. Гонки

Два запроса приходят одновременно и оба проходят проверку: промокод применён дважды, последний товар продан двум людям, баланс ушёл в минус.

Как заметить: нажми кнопку оплаты или применения кода несколько раз подряд очень быстро, или отправь два одинаковых запроса параллельно. Если результат удвоился — нужна блокировка или уникальное ограничение в базе.

## 5. Запросы N+1

Страница списка делает один запрос за списком и ещё по одному на каждую строку — за автором, ценой, картинкой. На десяти записях незаметно, на тысяче страница открывается секундами.

Как заметить: включи логирование запросов к базе и открой список. Если число запросов растёт вместе с числом строк, это оно.

## 6. Даты и часовые пояса

Время сохраняется без часового пояса, сравнивается в часовом поясе сервера, а показывается в часовом поясе браузера. Запись «на 10:00» превращается в 13:00, а скидка «до конца дня» заканчивается в обед.

Как заметить: поменяй часовой пояс на компьютере и посмотри на те же данные. Проверь граничные случаи: полночь, последний день месяца, переход на летнее время там, где он есть.

## 7. Входные данные без проверки

Сервер верит тому, что пришло из браузера: цене, роли, количеству, идентификатору владельца. Форма не даёт ввести минус, а API принимает.

Как заметить: отправь запрос в обход формы — с отрицательными числами, огромными строками, лишними полями вроде `role: admin` или чужим `user_id`.

## 8. Тихие сбои

Ошибку поймали и ничего с ней не сделали. Письмо не ушло, оплата не записалась, файл не сохранился, а пользователь видит «Готово».

Как заметить: поищи в коде пустые обработчики ошибок — `catch` без тела или только с выводом в консоль. Каждый такой — место, где ты узнаешь о проблеме от клиента.

```js
try { await sendEmail(user) } catch (e) {}
```

## 9. Дублированная логика

Каждый раз, когда просишь новую функцию, ИИ пишет её заново, а не использует существующую. Расчёт цены оказывается в трёх местах, и после правки скидки корзина и чек показывают разные суммы.

Как заметить: поменяй одно правило — например, налог или формат телефона — и проверь все экраны, где оно встречается. Если где-то осталось старое, ищи копию.

## 10. Устаревшие API

Модель знает библиотеку такой, какой она была на момент обучения. В код попадают удалённые функции, старые способы настройки и примеры, которые авторы библиотеки давно не рекомендуют.

Как заметить: предупреждения об устаревании в консоли при сборке и запуске, ошибки после обновления зависимостей, код, который не совпадает с текущей документацией.

## Коротко

- Ошибки в коде от ИИ предсказуемы, поэтому их удобно искать по списку.
- Самые опасные — секреты в коде, отсутствие проверки прав и доверие к данным из браузера.
- Гонки, N+1 и часовые пояса не видны на демо и проявляются с реальными пользователями.
- Тихие сбои и пустые `catch` прячут проблемы, пока о них не напишет клиент.
- Большинство проверок из списка делаются за минуты, без глубокого чтения кода.

Если хочешь пройти этот список на своём проекте вместе с инженерами, SUBXCAT может помочь.
