Чекліст промптингу
Особистий, вистражданий, без «будьте ласкаві, шановна модель». Порядок пунктів — це порядок, у якому вони економлять час.
0. До першого повідомлення
Найдорожчі помилки трапляються до того, як щось написано.
| Питання собі | Якщо відповідь «ні» |
|---|---|
| Я сам розумію, який результат вважатиму правильним? | Спершу сформулювати критерій приймання. Інакше й модель не вгадає. |
| Це нова задача чи продовження старої? | Нова → новий контекст. Змішувати дешевше тільки на вигляд. |
| Модель має чим себе перевірити (тест, лінтер, exit code, скрін)? | Додати перевірку до початку роботи, а не після. |
| Це взагалі задача для агента, чи швидше зробити руками? | Дві команди в термміналі не варті промпта. |
1. Формулювання
Спочатку результат, потім контекст. Перше речення — що має бути на виході. Далі — обмеження. Історія питання, якщо потрібна, — у кінці.
Погано: «Ми тут переїжджаємо на новий пейментний провайдер, і в нас є легасі-сервіс, і взагалі там усе складно, і от треба щось зробити з вебхуками.»
Добре: «Додати обробник вебхука payment.refunded у App\Http\Webhooks\StripeController. Ідемпотентність — по event_id через таблицю webhook_events. Тести — у стилі наявного ChargeSucceededTest. Не чіпати роутинг.»
Конкретика замість прикметників. Не «зроби надійніше» — а «додай ретрай з експоненційним бекофом, 3 спроби, лог кожної». Прикметник модель інтерпретує, число — виконує.
Явні межі. Що НЕ чіпати — так само важливо, як що чіпати. Без цього агент «заодно» відрефакторить сусідній клас.
Один запит — одна задача. Три задачі в одному повідомленні дають три половинчасті результати й контекст, у якому вже не розібратись.
2. Формат відповіді
Якщо потрібен короткий вивід — сказати прямо і числом: «до 150 слів», «тільки дифф», «тільки список файлів». За замовчуванням повертається розлоге.
Якщо потрібна структура — описати її. Таблиця з такими колонками. JSON із такими ключами. Список рівно з п'яти пунктів.
Якщо потрібен файл — сказати, що це файл, і де він має лежати. Інакше вивалиться в чат і загубиться.
3. Прив'язати перевірку
Головне питання: хто скаже, що зроблено правильно? Якщо відповідь «я, очима, потім» — виграшу в швидкості нема, роль тест-раннера просто переїхала на людину.
Робочі варіанти:
- «після зміни прогнати
php artisan test --filter=WebhookTestі показати вивід» - «показати
git diff, не переказ» - «зняти скріншот, порівняти з макетом, перелічити відмінності»
- exit code білда, лінтер,
psalm/phpstan
І окремо: вимагати доказ, а не заяву. «Готово, працює» — не результат. Команда + її вивід — результат.
4. Ітерація
- Дві невдалі спроби поспіль → не третя спроба. Стерти контекст, переписати промпт із урахуванням того, що з'ясувалося. Третя спроба в отруєному контексті майже ніколи не влучає, зате з'їдає найбільше.
- Виправлення формулювати як нову задачу з повним контекстом, а не як «ні, не так». «Не так» без деталей — це запрошення вгадувати вдруге.
- Якщо модель зробила щось дивне — перше питання не «чому вона тупить», а «що в контексті привело її до цього». Зазвичай знаходиться протухле правило або суперечлива інструкція.
- Велика фіча: інтерв'ю → специфікація файлом → свіжа сесія на реалізацію. Планувати й виконувати в одному контексті — гарантований дрейф.
5. Що не працює (перевірено)
- Ввічливість. «Будь ласка» і «дякую» не впливають на якість, впливають на кількість токенів.
- Погрози, обіцянки чаю, «від цього залежить моя карʼєра». Працювало на моделях 2023-го, зараз це просто шум у контексті.
- «Подумай уважно» як заклинання. Є
/effortіultrathink— вони роблять це насправді. - Копіювання простирадла логів цілком. Потрібен стектрейс і 20 рядків навколо, решта — витрачений контекст.
- «Ти експерт з X» на початку промпта. Роль не додає знань, додає впевненості в тоні.
- Просити «зроби як краще». Немає «краще» без критерію — буде середнє по інтернету.
6. Гігієна контексту
- Один контекст — одна тема. Перемикання теми =
/clear. - Все, що має пережити сесію, лягає у файл або в проєктний документ, а не лишається в чаті.
- Правила, які мусять виконуватись, ідуть у конфіг (
permissions.deny, хук), а не в текст розмови: текст розмови гине при компакції. - Періодично перечитувати власний CLAUDE.md / скіли на предмет протухлого. Інструкція піврічної давності не нейтральна — вона активно бреше.
Сам чекліст
Перед:
- Сформульовано, який результат вважатиметься правильним
- Нова тема → новий контекст
- Є runnable-перевірка, доступна моделі
- Задача не швидша руками
У промпті:
- Перше речення — результат, не передісторія
- Конкретні числа й імена замість прикметників
- Явно вказано, що НЕ чіпати
- Рівно одна задача
- Заданий формат і обсяг відповіді
- Вказано, чим перевіряти, і що показати як доказ
Після:
- Отримано доказ (команда + вивід), а не «готово»
- Дифф прочитаний, а не проскролений
- Дві невдачі → стерти й переписати, не третя спроба
- Все, що знадобиться завтра, збережено поза чатом
┌───────────────────────────────────────────────┐
│ 1. ЗАПЕРЕЧЕННЯ │
│ "я ж чітко написав" │
└───────────────────┬───────────────────────────┘
▼
┌───────────────────────────────────────────────┐
│ 2. ГНІВ │
│ "НІ. НЕ ТАК. Я Ж СКАЗАВ." │
└───────────────────┬───────────────────────────┘
▼
┌───────────────────────────────────────────────┐
│ 3. ТОРГИ │
│ "давай ще раз, але уважніше" │
│ "подумай крок за кроком" │
│ "від цього залежить моя карʼєра" │
└───────────────────┬───────────────────────────┘
▼
┌───────────────────────────────────────────────┐
│ 4. ДЕПРЕСІЯ │
│ скролить контекст на 40 повідомлень назад │
└───────────────────┬───────────────────────────┘
▼
┌───────────────────────────────────────────────┐
│ 5. ПРИЙНЯТТЯ │
│ /clear │
│ і з першого разу все виходить │
└───────────────────────────────────────────────┘
середня тривалість шляху: 45 хв
тривалість кроку 5: 90 сек
Єдина оптимізація, яка тут можлива — перестрибнути одразу на п'ятий крок. Ніхто ще не навчився.