DTGaraGe AI ACADEMY

PROMPT ENGINEERING

как питаш определя какво получаваш
INPUT → OUTPUT
❌ "обясни ми машинното обучение"
vs
✓ "Обясни backpropagation на разработчик с 5 год. C++ опит. Без math notation. Аналогия с game engine е OK."
01
АНАТОМИЯ НА ДОБРИЯ ПРОМПТ

Добрият промпт не е изречение. Той е структура. Всеки елемент носи информация, която моделът използва, за да стесни пространството от възможни отговори.

// СТРУКТУРНИ КОМПОНЕНТИ
РОЛЯ
Кой си ти или кой е моделът. Задава контекстния фрейм.
„Ти си senior DevOps инженер с опит в Kubernetes и Debian."
КОНТЕКСТ
Какво знае моделът за ситуацията. Колкото повече, толкова по-точен отговор.
„Имам Apache 2.4 на Debian 12. SSL е конфигуриран. Форумът е XenForo 2.3."
ЗАДАЧА
Какво точно искаш. Глагол + обект. Без неяснота.
„Напиши Apache rewrite rule, която пренасочва /old-path към /new-path с 301."
ФОРМАТ
Как да изглежда отговорът. Markdown, JSON, таблица, bullet points, код блок.
„Отговорът да е само конфиг блок. Без обяснения."
ОГРАНИЧЕНИЯ
Какво НЕ трябва. Изрично е по-ефективно от имплицитно.
„Без deprecated директиви. Без mod_rewrite ако може без него."
ПРИМЕР
Input/output двойка, която показва точно какво искаш.
„Пример: /old → /new (не /old/ → /new/)"
Не е нужно да включваш всички компоненти винаги. Но колкото повече от тях присъстват - толкова по-малко "гадаене" прави моделът.
02
CORE ТЕХНИКИ
ТЕХНИКА 01

Zero-Shot Prompting

Директна задача без примери. Работи добре за прости, ясни задачи. Бързо и евтино.

ТЕХНИКА 02

Few-Shot Prompting

Даваш 2-5 примера input→output преди истинската задача. Моделът "хваща" паттерна.

ТЕХНИКА 03

Chain of Thought

Карате модела да мисли на глас стъпка по стъпка. "Let's think step by step" или изрична верига.

ТЕХНИКА 04

Role Prompting

Задаваш идентичност на модела. "Ти си senior security researcher..." променя тона и дълбочината.

ТЕХНИКА 05

Constrained Output

Определяш точния формат на изхода. JSON schema, markdown template, таблица с точни колони.

ТЕХНИКА 06

Self-Consistency

Питаш N пъти с висока temperature, след това гласуваш или синтезираш отговорите. За сложни reasoning задачи.

ТЕХНИКА 07

Decomposition

Разбиваш голяма задача на малки стъпки. Всяка стъпка е отделен промпт. По-надеждно от едно монолитно питане.

ТЕХНИКА 08

ReAct Pattern

Reason + Act. Моделът редува мислене и действие. Използва се с tools/function calling.

03
CHAIN OF THOUGHT

Chain of Thought (CoT) е техника, при която принудително карате модела да изведе reasoning-а си преди финалния отговор. Особено полезно при математика, логика, дебъгване и стъпкови процеси.

❌ БЕЗ CoT
Имам 3 сървъра. Всеки обработва 1200 заявки/сек. Един пада. Останалите поемат трафика. Ще издържат ли ако peak е 2000 req/s?

→ Моделът може да отговори директно "да" или "не" без да покаже логиката. Трудно е да провериш дали е прав.
✓ С CoT
Имам 3 сървъра. Всеки обработва 1200 req/s. Един пада. Останалите поемат трафика. Peak е 2000 req/s.

Разсъди стъпка по стъпка: капацитет, разпределение, резерв. След това дай заключение.

→ Виждаш смятането. Можеш да хванеш грешки в логиката.

ТРИГЕРИ ЗА CoT

// Универсален тригер
"Let's think step by step."

// По-директен
"Разсъди на глас преди да дадеш отговор."

// За дебъгване
"Провери всяка стъпка поотделно. Покажи работата си."

// За архитектурни решения
"Анализирай плюсовете и минусите на всеки вариант,
след което препоръчай един с обосновка."

// Forced format CoT
"Отговори в следния формат:
АНАЛИЗ: [reasoning тук]
ЗАКЛЮЧЕНИЕ: [финалният отговор]"
При Ollama/локални модели CoT вдига качеството драматично - особено при по-малки модели. Phi-4 с добър CoT промпт бие Llama-70B без такъв.
04
FEW-SHOT ПРИМЕРИ

Показваш на модела точно какъв output искаш чрез 2-5 примера преди реалната задача. Ефективно за форматиране, класификация, трансформации и всякакви задачи с ясен pattern.

// Класификация на тикети
Класифицирай следните support тикети:

Формат: [ТИКЕТ] → [КАТЕГОРИЯ] : [ПРИОРИТЕТ]
Категории: hardware, software, network, billing
Приоритет: low, medium, high, critical

Примери:
"Не мога да се свържа с интернет" → network : high
"Искам фактура за март" → billing : low
"BSOD при стартиране" → hardware : critical
"Excel не отваря .xlsx файлове" → software : medium

Сега класифицирай:
"Принтерът печата само бели листа"
"Не мога да вляза в имейла си от 3 часа"
"Нужна ми е офис лиценз за нов служител"

ПРАВИЛА ЗА FEW-SHOT

ПРАВИЛО ЗАЩО
2-5 примера са достатъчни Повече примери ≠ по-добър резултат. Токени са пари.
Примерите трябва да са разнообразни Ако всички примери са "positive", моделът ще прекалява с positive.
Покривай edge cases в примерите Ако има граничен случай, покажи го в пример, не само в инструкцията.
Форматът на примерите = форматът на изхода Моделът копира точния формат. Бъди прецизен.
Ред на примерите има значение Последният пример влияе най-много. Слагай "типичния" случай последен.
// Few-shot за трансформация на данни
Конвертирай следните лог редове към JSON:

INPUT: "[2024-03-15 14:23:11] ERROR: Connection refused on port 5432"
OUTPUT: {"timestamp":"2024-03-15T14:23:11","level":"ERROR","message":"Connection refused","port":5432}

INPUT: "[2024-03-15 14:23:45] INFO: Server started on port 8080"
OUTPUT: {"timestamp":"2024-03-15T14:23:45","level":"INFO","message":"Server started","port":8080}

Сега конвертирай:
[2024-03-15 15:01:33] WARN: Disk usage at 87% on /dev/sda1
05
SYSTEM PROMPT

System prompt-ът е "конституцията" за целия разговор. Задава се веднъж, при всяка заявка е в контекста, но не е видим за потребителя. Там слагаш постоянните правила, роля, ограничения.

❌ СЛАБ SYSTEM PROMPT
"Ти си полезен асистент."

Безполезно. Това е default-ът. Нищо не ограничава, нищо не насочва.
✓ ДОБЪР SYSTEM PROMPT
"Ти си technical support бот за fixpc.bg. Специализираш в Windows 10/11, хардуерна диагностика и ремонт на лаптопи. Отговаряш само на БГ. Не давай съвети за теми извън тази сфера. Ако въпросът е неясен, питай за model и симптом преди да отговориш. Максимум 150 думи на отговор."
# Python - Claude API с добър system prompt
import anthropic

client = anthropic.Anthropic(api_key="...")

SYSTEM = """Ти си N3Xus - строг Linux mentor.
Правила:
- Само команди, минимум обяснения
- Ако въпросът е глупав, кажи го директно
- Пишеш само на БГ
- Code blocks задължително за всяка команда
- Никога не казваш "лесно" или "просто"
- Предупреждаваш при destructive операции"""

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=SYSTEM,
    messages=[
        {"role": "user", "content": "как да изтрия дублирани файлове?"}
    ]
)
# Ollama - system prompt в Modelfile
FROM llama3.2

SYSTEM """
Ти си DevOps asistent специализиран в Debian/Ubuntu.
Даваш конкретни команди, не теория.
Предупреждаваш преди rm, dd и всяка destructive операция.
Форматът ти: кратко обяснение → команда → бележка ако трябва.
"""

PARAMETER temperature 0.3
PARAMETER num_ctx 8192
System prompt-ът се кешира при Claude API (prompt caching). При дълги system prompts това намалява цената с до 90% след първото извикване.
06
РОЛИ И ПЕРСОНИ

Задаването на роля не е само "бъди по-добър". Ролята активира специфичен "режим" в модела - различна лексика, различни приоритети, различна дълбочина. Ефектът е измерим.

РОЛЯ ПРОМПТ ЕФЕКТ
Security Researcher "Ти си senior pentester с опит в web application security..." По-задълбочен анализ на attack vectors, CVE awareness
Code Reviewer "Ти си principal engineer правещ code review. Безпощаден към бъгове и security issues." Критичен поглед, не само "добре е"
Teacher "Обясни като на разработчик с 2 год. опит в Python, но нулев опит с async." Адаптирано ниво, без излишна простота или сложност
Devil's Advocate "Намери всичко, което може да се счупи в следния план." Изважда слабости, които normal prompting пропуска
Domain Expert "Ти си DBA с 10 год. опит в MySQL оптимизация на производствени бази." По-конкретни, по-практични отговори
Ролята не дава на модела информация, която не притежава. Не прави от Haiku Opus. Тя насочва каква информация да е на преден план.
07
OUTPUT КОНТРОЛ

Не питай "какво мислиш?" ако искаш JSON. Форматът трябва да е явна инструкция, не предположение.

JSON OUTPUT

Анализирай следния error log и отговори САМО с валиден JSON.
Никакъв текст преди или след JSON блока.

Schema:
{
  "severity": "low|medium|high|critical",
  "type": string,
  "root_cause": string,
  "fix": string,
  "affects_production": boolean
}

Log: [2024-03-15 03:22:11] FATAL: MySQL connection pool exhausted. Max connections: 100. Active: 100. Waiting: 47.

MARKDOWN СТРУКТУРА

Напиши документация за следната PHP функция.

Структура (задължителна):
## Описание
[какво прави - 1-2 изречения]

## Параметри
| Параметър | Тип | Описание |
...

## Връща
[тип и описание]

## Пример
```php
[работещ пример]
```

## Грешки
[какво може да хвърли и кога]

Функция:
[твоят код]

КОНТРОЛ НА ДЪЛЖИНАТА

// Кратко
"Отговори в максимум 3 изречения."
"Само командата. Без обяснение."
"TL;DR версия - максимум 50 думи."

// Дълго и подробно
"Подробно обяснение с примери за всяка стъпка."
"Включи edge cases и potential pitfalls."
"Production-ready код с error handling."
Ако искаш JSON - кажи "отговори САМО с валиден JSON". Без "САМО" моделът ще добави "Ето JSON-а:" преди него и кодът ти ще се счупи при parse.
08
АНТИПАТЕРНИ

Грешките при промптинг са предвидими. Ето кое не работи и защо.

❌ VAGUE ПРОМПТИ
"Направи го по-добро."
"Помогни ми с кода."
"Обясни ми тази концепция."
"Направи уебсайт."

Без контекст, без ограничения, без формат. Получаваш generic отговор.
❌ CONFIRMATION SEEKING
"Добре ли е следният подход?"
"Мислиш ли, че трябва да..."

Моделите са обучени да са "полезни" - ще потвърдят почти всичко. Питай "какво може да се счупи?" вместо "добре ли е?"
❌ МЕГАПРОМПТ
Един промпт с 10 задачи, 5 ограничения, 3 формата и 2 примера наведнъж.

Моделите имат "attention" проблеми с много изисквания. Разбий на части.
❌ НЕГАТИВНИ ИНСТРУКЦИИ
"Не използвай for loops."
"Не пиши дълго."
"Не добавяй коментари."

Негативните инструкции работят по-слабо от позитивните. "Използвай list comprehension" > "не използвай for loops".
Най-честата грешка: питаш за решение, вместо да опишеш проблема. Моделът може да намери по-добро решение от това, което имаш предвид.
АНТИПАТЕРН ВМЕСТО ТОВА
"Напиши ми скрипт за backup" "Имам 3 директории на Debian 12. Искам daily backup на /etc, /var/www, /home към /mnt/backup с дата в името. Да пази последните 7 копия. bash скрипт за cron."
"Не пиши дълго" "Максимум 100 думи. Само командите, без обяснения."
"Поправи кода" "Кодът хвърля IndexError на ред 47. Очаквам списък, получавам празен tuple когато API-то не върне резултати. Поправи само error handling-а."
"Добре ли е?" "Намери 3 начина по-добро решение. Намери какво може да се счупи при 1000 concurrent users."
09
ГОТОВИ ШАБЛОНИ

Copy-paste шаблони за честите задачи. Попълни [квадратните скоби].

CODE REVIEW

// ШАБЛОН: CODE REVIEW
Направи code review на следния [ЕЗИК] код. Контекст: [какво прави кодът, в какъв проект] Провери за: 1. Bugs и edge cases 2. Security vulnerabilities (особено: SQL injection, XSS, path traversal) 3. Performance проблеми 4. Четимост и maintainability Формат: - КРИТИЧНО: [проблеми, които трябва да се поправят веднага] - ПРЕПОРЪКИ: [подобрения без спешност] - ОК: [какво е добре направено] Код: ```[ЕЗИК] [КОДЪТ ТУК] ```

ДЕБЪГВАНЕ

// ШАБЛОН: DEBUG
Имам bug в [ЕЗИК] приложение. Очаквано поведение: [какво трябва да се случва] Реално поведение: [какво всъщност се случва] Error message: [точния текст на грешката] Кога се случва: [при какви условия - само при X, само когато Y] Вече опитах: [какво си пробвал - пропусни ако не е пробвано нищо] Релевантен код: ```[ЕЗИК] [КОДЪТ] ``` Разсъди стъпка по стъпка. Дай 2-3 хипотези с вероятност, след това препоръчай коя да тествам първо.

ТЕХНИЧЕСКИ ДОКУМЕНТ

// ШАБЛОН: TECH ARTICLE
Напиши технически туториал за [ТЕМА]. Аудитория: [ниво - начинаещ/средно ниво/напреднал] [език/технология] разработчик Целта след прочитане: читателят трябва да може да [конкретна цел] Включи: - Защо е важно / кога се използва - Prerequisites (какво трябва да знае вече) - Стъпка по стъпка с работещи примери - Честите грешки и как да се избегнат - Следващи стъпки Стил: директен, технически, без hype. Конкретни команди с очакван output. Дължина: [кратко ~500 думи / средно ~1000 / дълго ~2000+]

АРХИТЕКТУРНО РЕШЕНИЕ

// ШАБЛОН: ARCHITECTURE DECISION
Трябва ми архитектурна препоръка. Проблем: [описание] Constraints: - Технологии: [какво вече използваш] - Екип: [размер, ниво] - Бюджет за инфраструктура: [приблизително] - Очакван трафик: [orders of magnitude] Варианти, които съм разгледал: [опционално] Анализирай всеки вариант по: сложност на имплементация, оперативна тежест, scalability, разходи. Финалната препоръка да включва обосновка за trade-offs.

REGEX HELP

// ШАБЛОН: REGEX
Напиши regex за следното: Искам да match-вам: [описание] Език/инструмент: [Python re / JavaScript / grep / sed / PHP preg_match] Примери за MATCH: - [пример 1] - [пример 2] Примери за НЕ MATCH: - [пример 1] - [пример 2] Обясни regex-а компонент по компонент след като го дадеш.

PROMPT ОЦЕНКА

// ИЗМЕРВАНЕ НА ПРОМПТ КАЧЕСТВО
Конкретност на задачата
9/10
Ясен формат на output
8/10
Контекст за моделa
7/10
Ограничения / constraints
6/10
Примери (few-shot)
5/10

Всеки промпт е итерация. Първият е рядко финален. Ако резултатът не е добър - добави контекст, ограничи формата или добави пример. Три корекции са норма.