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 (Роздутий, небезпечний, багатослівний):

// Function to calculate user discount based on type
export function calculateDiscount(user: any): number {
  // Check if user is not null and not undefined
  if (user !== null && user !== undefined) {
    // Check if user role exists
    if (user.role) {
      if (user.role === 'VIP') {
        return 0.20; // 20 percent discount
      } else if (user.role === 'PREMIUM') {
        return 0.15; // 15 percent discount
      } else {
        return 0.05; // standard discount
      }
    } else {
      return 0;
    }
  } else {
    // Return zero if user does not exist
    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, цитат), висловленої з високою ймовірнісною впевненістю.

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