Skip to main content

AI Slop (ШИ-шлак и загрязнение кодовой базы)

Системный феномен деградации кодовой базы в результате массового добавления низкокачественного, многословного, избыточно усложненного или дублированного кода, сгенерированного языковыми моделями без архитектурного надзора.

1. Обзор концепции и системная проблема

С падением стоимости генерации токенов индустрия разработки столкнулась с новой формой инфляции: стоимость создания строки кода упала почти до нуля, тогда как стоимость его понимания, ревью, поддержки и отладки осталась неизменной или даже возросла.

AI Slop (Искусственный шлак) — это код, который синтаксически корректен и даже проходит примитивные тесты, но является концептуально вредным для здоровья проекта. Он характеризуется:

  • Необоснованным раздуванием размера файлов (Code Bloat).
  • Скрытым дублированием существующей функциональности.
  • Замаскированными крайними случаями (Edge Cases), которые модель "загладила" опасными fallback-значениями вместо вызова корректных исключений.
  • Утрата единого инженерного стиля проекта.

Если в репозиторий попадает 30% AI Slop, кодовая база становится неподдерживаемой в течение 6–12 месяцев: новые фичи ломают старые непредсказуемым образом, время онбординга новых разработчиков увеличивается в три раза, а скорость разработки падает до нуля.

Процесс загрязнения репозитория (The Slop Accumulation Cycle):
[Задача] ---> [Промпт без контекста] ---> [LLM генерирует 200 строк бойлерплейта]
                                                       |
                                                       v
[Сгенерирован дубликат функции formatCurrency] <--- [Слепой клик "Accept"]
                                                       |
                                                       v
[Раздувание бандла + Новые скрытые баги] <--- [Мердж в main без глубокого ревью]

2. Архитектурная таксономия и ментальная модель

Разновидности шлака, возникающие в процессе бездумной кодогенерации:

  1. Slop повторного изобретения (Reinvention Slop):
    • Модель не видит существующего хелпера cn() (clsx/tailwind-merge) или formatDate() и генерирует свой локальный аналог прямо внутри компонента.
    • Результат: 20 различных реализаций одной операции с разным поведением при null или undefined.
  2. Slop защитного программирования (Defensive Bloat):
    • Бесконечные проверки if (user && user.profile && user.profile.settings) в средах с современным опциональным цепочкой (Optional Chaining user?.profile?.settings) или строгой типизацией TypeScript, которая уже гарантирует наличие поля.
  3. Slop скрытия ошибок (Silent Failure Slop):
    • Оборачивание любой потенциальной проблемы в try { ... } catch (e) { return null; }.
    • Результат: система не падает, но тихо теряет данные или генерирует искаженные отчеты, превращая отладку в продакшене в кошмар.
  4. Slop комментариев (Comment Hallucination):
    • Десятки строк очевидных комментариев, которые модель добавляет для объема, создавая визуальный шум и мешая видеть суть алгоритма.

3. Технический пайплайн и внутренняя механика

Сравнение: Здоровый код против AI Slop

Пример AI Slop (Раздутый, опасный, многословный):

// Функция для расчета скидки для пользователя в зависимости от типа
export function calculateDiscount(user: any): number {
  // Проверка, что пользователь не равен null и не равен undefined
  if (user !== null && user !== undefined) {
    // Проверка, существует ли роль пользователя
    if (user.role) {
      if (user.role === 'VIP') {
        return 0.20; // 20 процентов скидки
      } else if (user.role === 'PREMIUM') {
        return 0.15; // 15 процентов скидки
      } else {
        return 0.05; // стандартная скидка
      }
    } else {
      return 0;
    }
  } else {
    // Вернуть ноль, если пользователь не существует
    return 0;
  }
}

Идиоматический продуктовый код (Чистый, строго типизированный):

export type UserRole = "VIP" | "PREMIUM" | "STANDARD";

const ROLE_DISCOUNTS: Record<UserRole, number> = {
  VIP: 0.20,
  PREMIUM: 0.15,
  STANDARD: 0.05,
} as const;

export function getDiscount(role?: UserRole): number {
  return role ? ROLE_DISCOUNTS[role] ?? 0 : 0;
}

Автоматический фильтр отклонения дубликатов в CI/CD

Внедрение проверки кодовой базы на копипаст с помощью jscpd:

// .jscpd.json
{
  "threshold": 1.5,
  "reporters": ["console", "json"],
  "ignore": ["**/node_modules/**", "**/dist/**", "**/*.d.ts"],
  "absolute": true,
  "minTokens": 35,
  "minLines": 5
}

Если коммит сгенерированного кода поднимает процент дублирования выше 1.5%, пайплайн автоматически блокирует PR.


4. Практические инженерные сценарии в продакшене

01. Разгрузка клиентского бандла после очистки шлака

Команда заметила, что размер JavaScript-бандла Next.js вырос с 180 КБ до 950 КБ за 3 месяца активного использования агентов. Аудит выявил, что агенты установили 4 разные библиотеки для работы с датами (date-fns, dayjs, moment, luxon) и 3 разные иконные паки. После удаления дубликатов и унификации через базовый импорт бандл сократился на 70%.

02. Предотвращение утечки памяти через спагетти-слушатели событий

Агент сгенерировал компонент с подпиской на WebSocket, но внутри useEffect забыл про функцию очистки (return () => socket.off(...)). Вместо этого модель добавила проверку флага isMounted. При переключении маршрутов старые слушатели продолжали висеть в памяти, что привело к падению вкладки браузера из-за переполнения heap через 20 минут сессии.

03. Очистка базы данных от галлюцинированных колонок

Разработчик слепо применил миграцию Prisma, предложенную моделью. Модель добавила в таблицу 8 избыточных полей "на будущее" с некорректными типами (varchar вместо jsonb). Архитектор обнаружил это на этапе code review, удалил миграцию до ее деплоя на staging и вернул модель к минималистичной схеме.


5. Подводные камни, типовые ошибки и безопасность

  1. Иллюзия полноты за счет комментариев: Наличие хороших JSDoc-комментариев перед функцией создает обманчивое впечатление высокой качества, тогда как внутри находится медленный алгоритм или опасная интерполяция строк в SQL. Оценивайте только логику и асимптотику, а не внешний вид.
  2. Галлюцинация зависимостей (Package Slop / Slop Typosquatting): Модель может сгенерировать импорт несуществующего NPM-пакета (например, import { superValidator } from 'fast-super-validator'). Злоумышленники намеренно регистрируют такие распространенные галлюцинации на npmjs.com и размещают там вредоносный код, который выполняется во время npm install на вашем сервере.
  3. Утрата архитектурных инвариантов системы: Если проект строился по принципам Clean Architecture или FSD (Feature-Sliced Design), неконтролируемый агент быстро размоет границы слоев, вызывая методы баз данных прямо из UI-компонентов. Требуйте от агентов строгого соблюдения проектных правил через .cursorrules или AGENTS.md.
/ Частые вопросыSchema.org FAQPage

FAQ: AI Slop (ШИ-шлак и загрязнение кодовой базы)

Характерные маркеры включают: 1) Тавтологические комментарии, пересказывающие синтаксис (например, `// loop through users and return ids`); 2) Огромные конструкции try-catch с пустыми блоками или примитивным `console.log(error)`; 3) Изобретение собственных хелперов вместо использования существующих в кодовой базе утилит (наличие 5 различных функций форматирования дат); 4) Избыточная абстракция и ненужные интерфейсы для кода с одним использованием.
/ Внутренняя перелинковка
Все термины
Выгорание и Flow

AI Technical Debt (Технический долг генеративного кода)

Экспоненциальное накопление архитектурной энтропии, скрытых дефектов и неподдерживаемых зависимостей в кодовой базе из-за сверхбыстрого добавления сгенерированного кода без системного рефакторинга.

Читать термин
Выгорание и Flow

Вибекодинг Усталость (Vibecoding Fatigue)

Специфический синдром ментального истощения и отчуждения разработчика, вызванный сверхбыстрой генерацией кода без удержания ментальной модели, что приводит к параличу отладки (Debugging Paralysis).

Читать термин
Выгорание и Flow

Verification Discipline (Дисциплина верификации сгенерированного кода)

Фундаментальный инженерный принцип, согласно которому любой результат генерации искусственного интеллекта рассматривается как непроверенная гипотеза, требующая обязательного эмпирического подтверждения до принятия.

Читать термин
Промпты и RAG

Галлюцинации ИИ (Hallucinations & Confabulations)

Генерация языковой моделью фактически неверной, вымышленной или несуществующей информации (библиотек, методов API, цитат), выраженной с высокой вероятностной уверенностью.

Читать термин