Prompt Engineering

Prompt Engineering je disciplína zameraná na navrhovanie a optimalizáciu vstupov (promptov) pre veľké jazykové modely (LLM) s cieľom dosiahnuť čo najlepší výstup. Nejde len o „správne sa opýtať" — je to systematický prístup k formulácii inštrukcií, kontextu a obmedzení, ktorý výrazne ovplyvňuje kvalitu, presnosť a užitočnosť AI odpovede.


1. Prečo na prompte záleží

Rovnaký model môže na rovnakú otázku odpovedať diametrálne odlišne v závislosti od promptu:

❌ Slabý prompt:
"Napíš kód na triedenie."

✅ Dobrý prompt:
"Napíš funkciu v Pythone, ktorá zoradí zoznam slovníkov podľa kľúča 'date'
(formát ISO 8601) od najnovšieho po najstarší. Použi type hints. Ošetri
prázdny zoznam a neplatné dátumy (vráť ich na koniec). Napíš 3 unit testy."

Rozdiel nie je v „múdrosti" modelu, ale v kvalite inštrukcie. LLM nemá vlastný zámer — optimalizuje odpoveď na základe toho, čo dostane na vstupe.


2. Základné techniky

Zero-shot prompting

Model dostane úlohu bez príkladov. Funguje pri jednoduchých, jednoznačných úlohách.

Preklad do slovenčiny: "The quick brown fox jumps over the lazy dog."

Few-shot prompting

Model dostane 2-5 príkladov pred samotnou úlohou. Výrazne zlepšuje konzistentnosť formátu a kvality.

Preklad technických termínov:
- "machine learning" → "strojové učenie"
- "neural network" → "neurónová sieť"
- "overfitting" → "pretrénovanie"
- "gradient descent" → ?

Chain-of-Thought (CoT)

Model je inštruovaný, aby „myslel nahlas" — vysvetlil postup krok za krokom pred finálnou odpoveďou.

Otázka: Ak má firma 150 zamestnancov a 30% pracuje remote, koľko ľudí je
v kancelárii ak je piatok a 10% kancelárskych zostáva doma?

Mysli krok za krokom:
1. Remote zamestnanci: 150 × 0.30 = 45
2. Kancelárski: 150 - 45 = 105
3. Piatkoví absenti: 105 × 0.10 = 10.5 ≈ 11
4. V kancelárii v piatok: 105 - 11 = 94

Odpoveď: 94 ľudí

System prompting

Definovanie roly, správania a obmedzení modelu na úrovni systémovej inštrukcie.

System: Si senior Python developer. Odpovedáš stručne, používaš type hints,
preferuješ funkcionálny štýl. Ak niečo nevieš, povedz to namiesto vymýšľania.

Structured output

Požiadanie modelu o výstup v presnom formáte (JSON, YAML, tabuľka, markdown).

Analyzuj tento text a vráť výsledok ako JSON:
{
  "sentiment": "positive|negative|neutral",
  "confidence": 0.0-1.0,
  "key_topics": ["topic1", "topic2"],
  "summary": "max 2 vety"
}

3. Pokročilé techniky

Technika Popis Použitie
Tree-of-Thought Model exploruje viacero riešení paralelne a vyberie najlepšie Komplexné problémy s viacerými cestami
Self-consistency Spustiť rovnaký prompt N-krát a vybrať najčastejšiu odpoveď Zvýšenie spoľahlivosti matematiky/logiky
ReAct Kombinácia uvažovania (Reasoning) a akcií (Acting) Agentné úlohy s nástrojmi
Meta-prompting Nechať AI napísať/vylepšiť prompt za teba Optimalizácia promptov
Constitutional prompting Definovanie pravidiel, ktoré model nesmie porušiť Bezpečnosť, compliance
Retrieval-Augmented Doplnenie promptu o relevantnú externú informáciu (RAG) Práca s aktuálnymi/proprietárnymi dátami

4. Anatómia efektívneho promptu

Dobrý prompt má typicky tieto komponenty:

┌─────────────────────────────────────────┐
│ 1. ROLA (kto si)                        │
│    "Si senior data engineer..."         │
├─────────────────────────────────────────┤
│ 2. KONTEXT (čo riešime)                 │
│    "Pracujeme na ETL pipeline..."       │
├─────────────────────────────────────────┤
│ 3. ÚLOHA (čo chcem)                     │
│    "Napíš SQL query, ktorá..."          │
├─────────────────────────────────────────┤
│ 4. OBMEDZENIA (čo nesmieš)              │
│    "Nepoužívaj subquery, max 50 riadkov"│
├─────────────────────────────────────────┤
│ 5. FORMÁT (ako chcem výstup)            │
│    "Vráť ako markdown tabuľku"          │
├─────────────────────────────────────────┤
│ 6. PRÍKLADY (few-shot)                  │
│    "Vstup: X → Výstup: Y"              │
└─────────────────────────────────────────┘

Nie každý prompt potrebuje všetky komponenty — jednoduchým úlohám stačí úloha + formát.


5. Časté chyby a anti-patterny

Chyba Príklad Oprava
Vágnosť „Napíš niečo o databázach" „Vysvetli rozdiel medzi SQL a NoSQL s príkladmi pre e-shop"
Príliš veľa naraz „Napíš celú appku s backendom, frontendom a testami" Rozdeliť na menšie kroky
Chýbajúci formát „Porovnaj frameworky" „Porovnaj React, Vue, Svelte v tabuľke: výkon, ekosystém, krivka učenia"
Negatívne inštrukcie „Nepoužívaj zložité slová" „Použi jednoduché slová, max B1 úroveň"
Žiadne obmedzenia „Napíš kód" „Napíš funkciu v TypeScript, max 30 riadkov, bez externých závislostí"
Ignorovanie chýb Akceptovanie prvého výstupu „Skontroluj svoju odpoveď na chyby a oprav ich"

6. Prompt engineering pre kód

Programovanie je jedna z najsilnejších oblastí prompt engineeringu. Špecifické tipy:

  1. Špecifikuj jazyk, framework a verziu: „Python 3.12, FastAPI 0.115, Pydantic v2"
  2. Definuj štýl: „Type hints, docstrings, PEP 8, max 80 znakov na riadok"
  3. Uveď error handling: „Ošetri všetky edge cases, loguj chyby do stderr"
  4. Požaduj testy: „Napíš pytest testy vrátane edge cases"
  5. Uveď kontext: „Toto bude v Docker kontajneri s PostgreSQL 16"
  6. Iteruj: „Pridaj caching s Redis" → „Zmeň expiry na 5 minút" → „Pridaj invalidáciu pri PUT"
# Príklad výstupu z dobre zadaného promptu
from datetime import datetime
from typing import Optional

def parse_date_range(
    start: str,
    end: Optional[str] = None,
    fmt: str = "%Y-%m-%d"
) -> tuple[datetime, datetime]:
    """Parse date range strings into datetime objects.

    Args:
        start: Start date string.
        end: End date string (defaults to now).
        fmt: Date format (default ISO 8601 date).

    Returns:
        Tuple of (start_dt, end_dt).

    Raises:
        ValueError: If dates are invalid or start > end.
    """
    start_dt = datetime.strptime(start, fmt)
    end_dt = datetime.strptime(end, fmt) if end else datetime.now()

    if start_dt > end_dt:
        raise ValueError(f"Start {start} is after end {end}")

    return start_dt, end_dt

7. Prompt engineering v praxi — workflow

  1. Prvý draft: napísať prompt, pustiť, vyhodnotiť výstup.
  2. Iterácia: upraviť prompt na základe nedostatkov (chýbajúci kontext, zlý formát, hallucinácie).
  3. Testovanie: pustiť na viacerých vstupoch, overiť konzistentnosť.
  4. Verzinovanie: uložiť fungujúce prompty (prompt library) pre tím.
  5. Automatizácia: integrovať do CI/CD, API, agentov.

Tip: Veď si „prompt journal" — zápisky o tom, čo fungovalo a čo nie. Časom si vybuduješ intuitívne pochopenie modelu.


8. Quick Reference

Parameter Hodnota Poznámka
Definícia Optimalizácia vstupov pre LLM Systematická disciplína, nie len „pýtanie sa"
Zero-shot Úloha bez príkladov Pre jednoduché, jednoznačné úlohy
Few-shot 2-5 príkladov pred úlohou Výrazne zlepšuje konzistentnosť
Chain-of-Thought „Mysli krok za krokom" Lepšia matematika, logika, uvažovanie
System prompt Definícia roly a obmedzení Nastavuje správanie modelu
Kľúčová chyba Vágnosť a chýbajúci kontext Konkrétnosť = kvalita
Best practice Rola + kontext + úloha + formát Nie vždy treba všetko
Pre kód Jazyk + verzia + štýl + testy Čím presnejšie, tým lepšie

Zhrnutie

  • Prompt engineering je systematická disciplína — nie len „umenie pýtať sa" — zameraná na formuláciu vstupov pre LLM tak, aby výstup bol presný, konzistentný a užitočný.
  • Základné techniky (zero-shot, few-shot, chain-of-thought, system prompting) pokrývajú väčšinu prípadov použitia.
  • Pokročilé techniky (Tree-of-Thought, ReAct, RAG, meta-prompting) riešia komplexné scenáre vyžadujúce viacero krokov alebo externé dáta.
  • Efektívny prompt má jasne definovanú rolu, kontext, úlohu, obmedzenia, formát a ideálne príklady.
  • Najčastejšia chyba je vágnosť — čím konkrétnejší prompt, tým lepší výstup.
  • Pre programovanie je kľúčové špecifikovať jazyk, framework, štýl, error handling a požiadavky na testy.