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 структура — в чаті після виступу