Припиніть дозволяти штучному інтелекту створювати недбалі та дубльовані шаблони коду
Дозвіл LLM писати недбалий або дубльований код створює петлю зворотного зв'язку, де модель копіює власні погані шаблони. Пишіть чистий код, щоб навчити агента вашим стандартам.
Вплив: Середній
Чому це важливо
Ви можете негайно покращити якість генерації ШІ, рефакторивши шаблони у вашій кодовій базі, замість написання довгих системних промптів.
TL;DR
- 01ШІ аналізує вашу кодову базу, щоб зрозуміти як тут пишуть код, замість використання фундаментальних принципів проектування.
- 02Ухвалення поганих шаблонів коду змушує LLM генерувати дедалі гірший і дубльований код.
- 03Суб'єктивні інструкції для агентів часто не заважають генерації поганого коду; чиста кодова база є найкращим промптом.
Небезпека петлі зворотного зв'язку
Великі мовні моделі вбирають усе, що є у вашому репозиторії. Коли ви просите ШІ створити новий маршрут або фонове завдання, він не мислить фундаментальними принципами, а шукає паттерни у відкритому робочому просторі та історії комітів. Якщо раніше ви дозволили згенерувати дубльовану умову з чотирьох перевірок на кшталт if (user.isActive && !user.isSuspended), модель сприйме це як ваш свідомий вибір стилю. На п'ятій кінцевій точці модель видасть той самий скопійований код, помножуючи технічний борг.
Чому системні промпти не працюють
Багато розробників намагаються вирішити цю проблему, прописуючи суворі правила у файлах на кшталт AGENTS.md або .cursorrules. Проте моделям важко стабільно дотримуватися суб'єктивних інструкцій типу «не пишіть зайвих коментарів» або «пишіть елегантний код». Звичайні лінтери також не можуть легко виявити таке концептуальне дублювання.
Пишіть код так, ніби його підтримуватиме людина
Єдиний дієвий вихід — писати код так, ніби людина буде його підтримувати. Якщо ви винесете логіку в допоміжну функцію (helper), LLM знайде і використає цей хелпер під час наступної генерації. Зберігаючи чисту, модульну структуру без дублювання, ви неявно навчаєте ШІ дотримуватися цих високоякісних патернів, не перевантажуючи свої промпти інструкціями.
Спробуй за 2 хвилини
if (user.isActive && user.hasPermission('read') && !user.isSuspended && account.status === 'open') { /* ... */ }javascript
✓ Коли використовувати
- Під час розробки проектів в агентних середовищах на кшталт Cursor, Claude Code або Copilot.
- При встановленні командних правил для код-рев'ю пул-реквестів, створених ШІ.
✕ Коли НЕ варто
- Для одноразових скриптів, де довговічність та майбутня взаємодія зі ШІ взагалі не передбачаються.
Що зробити сьогодні
- Рефакторте будь-які дубльовані логічні блоки у чисті спільні допоміжні функції перед тим, як просити агента створити нові кінцеві точки.
- Перевірте свої файли .cursorrules або AGENTS.md, щоб переконатися, що вони доповнюють чисту структуру репозиторію, а не намагаються виправляти заплутаний код заднім числом.
Що каже спільнота
“The problem of duplicated code described in the article, goes in a different way in reality: AI does not update 4 places in the same way, but implement them a slightly different.”
“I have tried prompting it out and providing strong guidelines in my AGENTS.md against it, but I still get _way_ too many useless 'explain the code' style comments...”
“...if LLMs reduce the cost of maintaining more explicit or verbose code, we should use that to raise the standard, not preserve compromises made for human convenience.”
Джерела