AI Prompting

Як отримувати кращий результат від штучного інтелекту

Роман Савіцький

  • Tieto Tech Consulting (Create Ukraine)
  • Digital Experience L4
  • Co-owner BeerJS Zhytomyr
  • Викладач ДУ "Житомирська політехніка"

Один запит.

Два результати.

Code review — той самий код, різний промт

❌ Погано

Зроби code review

→ "Код виглядає добре. Можливо варто додати коментарі." Марно.

✅ Добре

You're a senior TypeScript engineer. Review this React hook below. Focus on: 1) potential memory leaks or stale closures, 2) missing edge cases, 3) performance issues with re-renders. Be specific — point to line numbers. Skip style nitpicks.

→ Конкретні проблеми з поясненням чому це баг.

Різниця не в AI. Різниця — в запиті.

Ментальна модель

Як правильно думати про AI

AI — це не автодоповнення в IDE

🔍

Stack Overflow

Знаходить готові рішення

⚡

Autocomplete

Продовжує те що вже пишеш

🤝

Pair programmer

Думає разом з тобою якщо дати контекст

Garbage in — garbage out.

Чим краще ти описуєш задачу — тим кращий код отримуєш

4 елементи сильного промту

👤 Роль

"You're a senior backend engineer who specializes in Node.js"

🎯 Мета

"Refactor this function to handle async errors properly"

📎 Контекст

"This runs in AWS Lambda, cold starts matter, no external dependencies"

📋 Формат

"Show only the changed function with inline comments explaining why"

Контекст як основа

Розбираємо кожен елемент на реальних кейсах

Роль

AI думає як той фахівець, ким ти його зробив

❌

Поясни мені що таке event loop

✅

You're a Node.js instructor. Explain the event loop to a developer who knows JavaScript basics but has never worked with async code. Use a real-world analogy, then show a code example with setTimeout and a Promise.

"Security researcher"
→ знайде вразливості
"Staff engineer"
→ архітектурне мислення
"Tech lead at a startup"
→ прагматичні рішення

Мета

Чим конкретніша задача — тим точніша відповідь

❌

Допоможи оптимізувати цей запит

✅

This PostgreSQL query takes 3s on 2M rows. Do three things: 1) Identify the bottleneck (use EXPLAIN output below); 2) Rewrite the query; 3) List what indexes to add with the exact CREATE INDEX statements.

💡 Нумерований список завдань → структурована відповідь без "води"

Контекст проекту

AI не знає твій стек — розкажи йому

❌

Як краще зберігати сесії користувачів?

→ Отримаєш загальну лекцію про cookies vs JWT vs Redis

✅

Stack: Next.js 14 App Router, deployed on Vercel, ~10k DAU. Context: sessions now stored in JWT in cookies, users report being logged out randomly on mobile. Should we move to Redis sessions? What are the trade-offs in our specific setup?

Формат

Скажи як саме хочеш отримати відповідь

Для коду:

"Show only the diff, not the full file"
"Add JSDoc comments"
"TypeScript, strict mode"

Для пояснень:

"ELI5 — explain like I'm a junior"
"TL;DR at the top"
"Pros/cons table"

Обмеження:

"No external libraries"
"Must work in Node 18"
"Keep it under 20 lines"

Мова відповіді:

"Answer in Ukrainian"
"Code comments in English"
"Variable names in English"

Промти, які працюють

3 патерни для розробника

Патерн 1: Role Prompting

Senior on demand

You're a staff engineer doing a pre-merge code review. I'm a mid-level dev. Review this PR diff below. Flag: 1) race conditions or concurrency issues; 2) missing error handling; 3) anything that would fail under load. For each issue — show the problematic line and a fix.

Рольові пресети для девів:
  • "Security auditor"
  • "Performance engineer"
  • "Developer advocate writing docs"
  • "QA engineer writing test cases"
Чому це працює:

AI активує відповідний словниковий запас, пріоритети і підхід до проблеми. "Security auditor" знайде те, що "senior dev" пропустить.

Патерн 2: Chain of Thought

Змуси AI думати вголос

We have a race condition in our checkout flow: sometimes orders are created twice when users double-click. Think step by step: 1) What are the possible root causes? 2) Which is most likely given we use React + Node + PostgreSQL? 3) What's the fix with minimal changes to existing code?

Тригери:
  • "Think step by step"
  • "Walk me through your reasoning"
  • "What could go wrong here?"
Коли критично:

Debugging складних багів, архітектурні рішення, вибір між підходами — де важливо не просто "що", а "чому"

Патерн 3: Few-Shot

Один приклад вартий тисячі слів опису

Write unit tests in this style:

// Example 1:
it('returns null when user is not found', async () => {
  mockDb.findById.mockResolvedValue(null);
  expect(await getUser('123')).toBeNull();
});
// Example 2:
it('throws AuthError when token is expired', async () => {
  await expect(validateToken(expiredToken)).rejects.toThrow(AuthError);
});

Now write tests for the cart.addItem() function below: [код функції]

💡 AI відтворить стиль: назви тестів, структуру, моки — без зайвих пояснень що саме ти хочеш

Pro tip: "Do you have any questions?"

Дай AI можливість уточнити перед тим як починати

Refactor this Express middleware to handle auth errors properly. Stack: Node 20, TypeScript strict. No new dependencies.

Before you start — do you have any clarifying questions?

Без цього рядка:

AI одразу пише код, базуючись на припущеннях. Потім виявляється що не врахував edge case який ти мав на увазі.

З цим рядком:

AI питає: "Should expired tokens return 401 or redirect to login? What about malformed tokens?" — і ти вирішуєш це ДО написання коду.

Особливо корисно для нетривіальних задач де є неочевидні рішення

Патерн 4: Devil's Advocate

Попроси AI оскаржити твоє рішення

I'm planning to split our monolith into microservices. We have 3 devs, 10k DAU, single PostgreSQL DB, deployed on one VPS.

Play devil's advocate: convince me this is a terrible idea right now. Be specific to our situation.

Інші формулювання:
  • "What are the strongest arguments against this approach?"
  • "What would a skeptical staff engineer say about this?"
  • "What's the worst that can happen if we go this route?"
Коли застосовувати:
  • Вибір архітектури
  • Вибір технологічного стеку
  • Будь-яке рішення з довгостроковими наслідками

Типові помилки

Топ-3 чому AI "видає сміття"

Помилка #1: Занадто мало контексту

❌ Проблема

Напиши функцію для валідації

AI не знає: що валідувати, яка схема даних, яку бібліотеку використовуєш (Zod? Yup? Custom?), що повертати при помилці.
✅ Рішення

Write a Zod schema to validate this incoming webhook payload: [JSON example]. Requirements:
- event must be one of: "order.created", "order.paid", "order.cancelled"
- timestamp must parse to a valid Date
- Unknown fields should be stripped. Return typed result.

Помилка #2: Немає коду або помилки

❌ Проблема

Чому мій компонент ре-рендериться занадто часто?

AI дасть лекцію про useCallback, useMemo, React.memo — без розуміння твоєї конкретної проблеми.
✅ Рішення

This React component re-renders on every parent render even though its props don't change. Here's the component: [код]. React DevTools Profiler shows: re-renders triggered by onSave prop. Find why and fix with minimal changes.

Помилка #3: Прийняти першу відповідь як фінальну

❌ Проблема

Скопіював код → запушив у PR → ревʼювер знайшов 5 проблем

✅ Ітеруй у діалозі
"Now add error handling for the case when DB is down"
"What are the edge cases you didn't handle?"
"Write tests for this implementation"
"Review your own code — what would you change?"
"Review your own code" — один з найефективніших прийомів

Оптимізація

Від промтів — до системи

Чому промти варто писати англійською?

Токени — валюта AI

Що таке токен?

Фрагмент тексту (~4 символи для латиниці, ~2 символи для кирилиці). AI обробляє і оплачується саме в токенах.

Різниця на практиці:

Кирилиця займає 1.5–2x більше токенів — менше "пам'яті" залишається на код і контекст.

🇺🇦 Ukrainian

"Напиши мені функцію для валідації"

~10 токенів

🇬🇧 English

"Write me a validation function"

~6 токенів

Live demo: platform.openai.com/tokenizer  |  tiktokenizer.vercel.app

Правила — задай контекст один раз

Custom Instructions / System Prompt

ChatGPT: Settings → Personalization → Custom Instructions
Claude: Projects → Project Instructions

Приклад для розробника:

I'm a mid-level fullstack developer. Stack: Next.js 14, TypeScript (strict), PostgreSQL, Prisma, deployed on Vercel. I prefer functional patterns over OOP. When reviewing code, be blunt — don't soften criticism. Always show the fixed code, not just describe the fix. Default language for code comments: English. For explanations: Ukrainian.

Більше не повторюєш стек і преференції в кожному запиті

Глобальні vs Локальні налаштування

Два рівні кастомізації + вибір моделі

🌐 Глобальні (для всіх чатів)

  • ChatGPT → Settings → Personalization → Custom Instructions
  • Claude → Settings → Custom Instructions
  • Gemini → Settings → Extensions / Personalization

Діють завжди. Хто ти, як відповідати, якою мовою.

📁 Локальні (під окрему тему)

  • ChatGPT → Explore GPTs → Create
  • Claude → Projects → New Project
  • Gemini → Gems → Create a Gem

Окремий чат із своїм промтом, файлами, поведінкою.

⚡ OpenRouter — одна точка входу до всіх моделей

Єдиний інтерфейс для GPT-4o, Claude, Gemini, Llama, Mistral та ін.

openrouter.ai — платиш тільки за використання, без підписок

Коли корисно:

  • Порівняти відповіді різних моделей
  • Доступ до моделей без окремих підписок
  • API для своїх проектів

Скіли — спеціалізовані агенти під задачу

GPTs (ChatGPT) / Projects (Claude)

🔍

PR Reviewer

Security + performance + style guide. Знає твій eslint config.

🧪

Test Writer

Jest + Testing Library, твій стиль тестів, твої моки.

📄

Doc Writer

JSDoc, README, ADR — в стилі твого проекту.

Суть: один раз налаштував системний промт → перемикаєш "режим" залежно від задачі. Код-рев'ю — один агент, написання тестів — інший.

Memory Bank

Persistent context між сесіями

Проблема: AI не памʼятає контекст між розмовами. Щоразу пояснюєш архітектуру, рішення, конвенції.

Memory Bank — набір markdown-файлів які ти підтримуєш і даєш AI на початку сесії.

memory/
├── projectBrief.md # що будуємо
├── techContext.md # стек, залежності
├── systemPatterns.md # архітектура, патерни
├── activeContext.md # поточна задача
└── decisions.md # ADR — чому так

Як використовувати:

  • На початку сесії: "Read all files in memory/"
  • AI отримує повний контекст проекту
  • Оновлюєш файли коли змінюється архітектура
  • Працює в Claude Code, Cursor, будь-якому агенті

Spec-driven Development

Спочатку spec — потім код

Замість "напиши функцію X" — спочатку пишеш детальний SPEC.md, AI імплементує строго по ньому.

Результат передбачуваний. Edge cases обговорені до написання коду.

# SPEC.md — Cart.addItem()

## Goal
Add item to cart, prevent duplicates

## Inputs
- productId: string (UUID)
- quantity: number (1–99)

## Edge cases
- item already in cart → increment qty
- out of stock → throw OutOfStockError
- qty > stock → clamp to available

## Out of scope
- Pricing, discounts

## Definition of done
- Unit tests cover all edge cases
- No DB calls in unit tests

Workflow:

  1. Пишеш SPEC.md разом з AI (brainstorm)
  2. AI задає уточнюючі питання
  3. Узгоджуєш spec
  4. "Implement according to SPEC.md"
  5. AI не вигадує — реалізує те що узгоджено

ChatGPT vs Claude vs Gemini

Коротко про вибір інструменту

🤖

ChatGPT

Найширша екосистема. GPTs, Code Interpreter, Plugins. Найлегший старт.

Custom Instructions + GPTs

🌟

Claude

200k токенів контексту. Кращий для великих кодових баз. Сильніший у довгих задачах.

Projects + Instructions

💎

Gemini

Реальний час + пошук. Інтегрований з Google Workspace. 1M токен контекст.

Gemini в Google Docs/Gmail

Навчись писати промти — і перенесеш на будь-який інструмент. Концепція однакова.

Наступний рівень

Коли промти стають системою

Superpowers — структурований AI workflow

github.com/obra/superpowers

Фреймворк від Jesse Vincent — набір скілів для AI-агентів (Claude Code, Cursor) які реалізують повний dev workflow.

7 скілів:
  1. Brainstorm — уточнює вимоги
  2. Write Plan — розбиває на задачі
  3. Git Worktrees — ізольоване середовище
  4. TDD — red-green-refactor
  5. Subagents — паралельна реалізація
  6. Code Review — перевірка по spec
  7. Finish Branch — merge і cleanup

Принцип:

AI не одразу пише код. Спочатку розуміє → планує → реалізує → перевіряє.

Це наступний рівень після Memory Bank + Spec-driven — коли весь workflow автоматизований.

Takeaway

Що забрати з собою

Шаблон промту для розробника

[Role] You're a [senior/staff/security] engineer.

[Task] [Що конкретно зробити — дієслово + обʼєкт].

[Context] Stack: [стек]. Constraints: [обмеження].

[Focus] Pay attention to: [edge cases / performance / security].

[Format] Show [diff only / full file / just the fix] with [inline comments / test coverage].

Приклад: You're a staff engineer. Refactor this Express middleware to handle auth errors properly. Stack: Node 20, TypeScript strict. Constraints: no new dependencies. Focus on: token expiry, missing headers, malformed JWTs. Show only changed files with inline comments explaining each change.

Рівні зрілості роботи з AI

Рівень 1 — Новачок: "Напиши мені код" → копіює без розуміння
Рівень 2 — Джун: Дає контекст → отримує корисний результат → ітерує
Рівень 3 — Мід: Правила + скіли + шаблони → системна робота з AI
Рівень 4 — Сеніор: Memory Bank + Spec-driven → AI як pair programmer
Рівень 5 — Staff: Superpowers workflow → повністю автоматизований dev process

Дякую!

Питання?

🔗 Роман Савіцький — BeerJS Zhytomyr

Шаблон промту + Memory Bank структура — в чаті після виступу