Ревью AI-кода
AI-код требует такого же code review, как код джуна. Скорость генерации обманывает: кажется, раз быстро — значит проверено. Нет. AI уверенно пишет неправильный код.
Чеклист при ревью AI-сгенерированного кода:
- Логика верна? Проверьте граничные случаи, null, пустые коллекции — AI часто их игнорирует.
- Безопасность: нет ли конкатенации строк в SQL, нет ли лишних открытых данных в ответе API.
- Производительность: нет ли N+1 запросов (AI легко генерирует цикл с запросом внутри), правильные ли индексы используются.
- Соответствие архитектуре: AI не знает ваших соглашений. Проверьте: правильный ли слой, правильные ли аннотации, не нарушает ли конвенции.
- Тесты: AI-тесты часто тестируют реализацию, а не поведение, или мокают слишком много.
Галлюцинации — AI уверенно называет методы и классы, которых не существует:
// AI написал — но такого метода нет в Spring Data:
repo.findByEmailAndStatusAndCreatedAfterOrderByRatingDescWithPagination(...)
Всегда проверяйте, что вызванные методы и классы реально существуют в той версии библиотеки, которую используете.
Копнуть глубже
Почему AI «галлюцинирует». Языковые модели предсказывают вероятный следующий токен на основе обучающих данных. Когда реальный API не представлен в обучении или задача нестандартная — модель генерирует «правдоподобное» имя метода по паттернам, не зная существует ли оно. Это не баг — это фундаментальное ограничение текущих LLM.
AI для code review в другую сторону. AI можно использовать и для review вашего кода: «посмотри на этот метод, найди потенциальные проблемы». Хорошо находит: неочевидные NPE, потенциальные race conditions, несоответствия между названием и логикой. Не заменяет human review, но как первый проход — полезно.
Тренд: AI + тесты как safety net. Хорошая практика при использовании AI: сначала написать тесты (TDD — см. тему «TDD»), потом просить AI сгенерировать реализацию под эти тесты. Тесты задают контракт — AI обязан ему соответствовать, тесты отловят галлюцинации.
• что такое галлюцинации AI и почему они происходят (если дошёл до 2-го слоя).