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. Архітектурна таксономія та ментальна модель
Різновиди шлаку, що виникають у процесі бездумної кодогенерації:
- Slop повторного винаходу (Reinvention Slop):
- Модель не бачить наявного хелпера
cn()(clsx/tailwind-merge) абоformatDate()і генерує свій локальний аналог прямо всередині компонента. - Результат: 20 різних реалізацій однієї операції з різною поведінкою при
nullабоundefined.
- Модель не бачить наявного хелпера
- Slop захисного програмування (Defensive Bloat):
- Нескінченні перевірки
if (user && user.profile && user.profile.settings)у середовищах із сучасним опціональним ланцюжком (Optional Chaininguser?.profile?.settings) або строгою типізацією TypeScript, яка вже гарантує наявність поля.
- Нескінченні перевірки
- Slop приховування помилок (Silent Failure Slop):
- Огортання будь-якої потенційної проблеми в
try { ... } catch (e) { return null; }. - Результат: система не падає, але тихо втрачає дані або генерує спотворені звіти, перетворюючи налагодження в продакшені на кошмар.
- Огортання будь-якої потенційної проблеми в
- 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. Підводні камені, типові помилки та безпека
- Ілюзія повноти за рахунок коментарів: Наявність гарних JSDoc-коментарів перед функцією створює оманливе враження високої якості, тоді як всередині знаходиться повільний алгоритм або небезпечна інтерполяція рядків у SQL. Оцінюйте лише логіку та асимптотику, а не зовнішній вигляд.
- Галюцинація залежностей (Package Slop / Slop Typosquatting):
Модель може згенерувати імпорт неіснуючого NPM-пакету (наприклад,
import { superValidator } from 'fast-super-validator'). Зловмисники навмисно реєструють такі поширені галюцинації в npmjs.com і розміщують там шкідливий код, який виконується під часnpm installна вашому сервері. - Втрата архітектурних інваріантів системи:
Якщо проект будувався за принципами Clean Architecture або FSD (Feature-Sliced Design), некерований агент швидко розмиє межі шарів, викликаючи методи бази даних прямо з UI-компонентів. Вимагайте від агентів суворого дотримання проектних правил через
.cursorrulesабоAGENTS.md.
FAQ: AI Slop (ШІ-шлак та засмічення кодової бази)
Пов'язані терміни
AI Technical Debt (Технічний борг генеративного коду)
Експоненціальне накопичення архітектурної ентропії, прихованих дефектів та непідтримуваних залежностей у кодовій базі через надшвидке додавання згенерованого коду без системного рефакторингу.
Vibecoding Fatigue (Втома від вайбкодингу)
Специфічний синдром ментального виснаження та відчуження розробника, викликаний надшвидкою генерацією коду без утримання ментальної моделі, що завершується паралічем налагодження (Debugging Paralysis).
Verification Discipline (Дисципліна верифікації згенерованого коду)
Фундаментальний інженерний принцип, згідно з яким будь-який результат генерації штучного інтелекту розглядається як неперевірена гіпотеза, що потребує обов'язкового емпіричного підтвердження до прийняття.
Галюцинації ШІ (Hallucinations & Confabulations)
Генерація мовною моделлю фактологічно неправдивої, вигаданої або неіснуючої інформації (бібліотек, методів API, цитат), висловленої з високою ймовірнісною впевненістю.