Zpět na blog
Pro vývojáře

Prompt engineering pro vývojáře: Jak z AI vytěžit maximum při psaní kódu

Většina vývojářů používá AI jako glorifikovaný autocomplete. Tady jsou techniky, které z něj udělají skutečného pair-programming partnera. S konkrétními prompty, které fungují — a porovnáním nástrojů, které je nejlépe využijí.

Základní princip: kontext je všechno

Rozdíl mezi nepoužitelným a produkčním výstupem z AI je téměř vždy v množství kontextu. Když AI nemá dostatek informací, hádá. A hádání znamená halucinace, nesprávné API, špatné typy a kód, který sice vypadá rozumně, ale neprojde ani prvním code review.

Podívejme se na konkrétní příklad — validace e-mailu:

Slabý prompt

Napiš funkci pro validaci e-mailu.

Silný prompt

Napiš TypeScript funkci validateEmail(input: string): boolean. Použij regex dle RFC 5322. Pure function, žádné side effects. JSDoc s příkladem. Pokryj edge cases: prázdný string, bez @, unicode domain.

Druhý prompt specifikuje: jazyk, název, vstup/výstup, standard, omezení, dokumentaci, edge cases. AI nemá co hádat. Výstup je o řád lepší — a často použitelný přímo bez úprav.

Pravidlo palce: pokud váš prompt nezodpovídá alespoň 3 z 5 otázek (What, Where, Why, Which, With), bude výstup generický. Konkrétnost je nejsilnější páka na kvalitu.

Pravidlo pěti W funguje jako mentální checklist před odesláním promptu:

  • What — co přesně chcete (funkce, třída, test, refaktoring, migrace)
  • Where — jazyk, framework, verze, runtime prostředí
  • Why — účel, v jakém kontextu se kód používá, business logika
  • Which — jaká omezení (no any, immutable, max délka, performance budget)
  • With — jaké typy, knihovny, konvence, existující patterns v codebase

V praxi to znamená, že prompt pro produkční kód je typicky 5–15 řádků. Ne proto, že byste chtěli být upovídaní, ale protože kvalitní specifikace vyžaduje prostor. Stejně jako dobrý ticket v Jira.

Technika 1: Few-shot — učení příkladem

Když potřebujete specifický formát výstupu nebo dodržení konvence, dejte AI 1–3 příklady. Extrémně užitečné pro transformace, generování testů a migraci kódu. Few-shot je nejspolehlivější technika, protože AI nemusí interpretovat abstraktní pravidla — vidí konkrétní vzor a replikuje ho.

Prompt ke zkopírování

Potřebuji převést REST API endpointy na TypeScript typy. Tady je vzor: Vstup: GET /users/:id → Response: { id: number, name: string, email: string } Výstup: type GetUserResponse = { id: number; name: string; email: string; } Vstup: POST /users → Body: { name: string, email: string } → Response: { id: number } Výstup: type CreateUserBody = { name: string; email: string; }; type CreateUserResponse = { id: number; }; Teď zpracuj tyto endpointy stejným způsobem: [vložte vaše endpointy]

AI pochopí vzor a aplikuje ho konzistentně — včetně edge cases. Funguje skvěle i pro refaktoring: ukažte jak jste přepsali jednu komponentu ze starého patternu na nový a AI přepíše zbytek. To ušetří hodiny při migraci codebasu.

Few-shot je obzvlášť cenný při práci s interními konvencemi, které AI nezná z trénovacích dat. Pokud máte vlastní naming convention, error handling pattern nebo specifickou strukturu modulů, dva příklady řeknou víc než odstavec popisu.

Praktická ukázka — převod React class components na hooks. Dáte AI jeden příklad transformace a řeknete „aplikuj na dalších 12 komponent". Bez few-shot by AI použil svůj vlastní styl. S few-shot dodržuje přesně vaši konvenci — pojmenování stavových proměnných, pořadí hooků, formát cleanup funkcí.

10×

rychlejší generování testů s AI oproti ručnímu psaní

Technika 2: Chain-of-thought pro debugování

Chain-of-thought (CoT) přiměje AI přemýšlet krok po kroku. Zásadní pro debugování, optimalizaci a architektonická rozhodnutí. Nestačí říct „oprav tento bug" — chcete, aby AI problém analyzoval, protože pouze analýzou najde skutečný root cause, ne jen symptom.

Slabý prompt

Tato funkce nefunguje, oprav ji.

Silný prompt

Tato funkce vrací duplikáty. Projdi kód řádek po řádku, identifikuj root cause, navrhni minimální opravu a test, který by bug zachytil.

Prompt ke zkopírování

Tady je funkce, která má vracet seřazený seznam unikátních e-mailů, ale vrací duplikáty při case-insensitive porovnání: [vložte kód] Analyzuj krok po kroku: 1. Projdi kód řádek po řádku a sleduj tok dat 2. Identifikuj kde přesně se ztrácí deduplikace 3. Vysvětli root cause 4. Navrhni minimální opravu (nemění API, jen interní logiku) 5. Navrhni test, který by bug zachytil

CoT dává výrazně lepší výsledky než „oprav to", protože AI si vynucuje systematický postup. Bonus: naučíte se z analýzy — vidíte, jak AI o problému přemýšlí, a často to odkryje aspekty, které jste přehlédli.

Kde CoT exceluje nejvíc:

  • Race conditions — AI projde timeline paralelních operací a identifikuje kde dochází ke konfliktu
  • Memory leaky — systematická analýza referencí, event listenerů a subscription cleanup
  • Performance bottlenecky — krok po kroku analýza complexity, N+1 queries, zbytečných re-renderů
  • Architektonická rozhodnutí — trade-off analýza s explicitním zvážením pros/cons každé varianty

Tip pro pokročilé: kombinujte CoT s konkrétním výstupním formátem. Například: „Analyzuj krok po kroku, pak shrň do tabulky: Problém | Severity | Řádek | Fix". Strukturovaný výstup je snáze zpracovatelný při code review.

Technika 3: System prompt jako .editorconfig pro AI

Pokud používáte API (OpenAI, Anthropic) nebo nástroj s custom instrukcemi, system prompt je nejsilnější nástroj pro konzistenci. Je to ekvivalent .editorconfig nebo .eslintrc — definuje pravidla, která AI dodržuje v každé odpovědi. Tady je šablona, kterou doporučuji uložit do repozitáře:

System prompt šablona

Jsi senior [jazyk] vývojář. Pracuješ na projektu s tímto stackem: [framework, DB, ORM, test runner]. Konvence: - Funkcionální přístup, immutable data kde je to možné - Explicitní typy, nikdy any/unknown bez důvodu - Error handling přes Result/Either type, ne try-catch - Testy: Vitest, arrange-act-assert pattern Formát odpovědí: - Kód bez zbytečných komentářů (kód by měl být self-documenting) - Pokud měníš existující kód, ukaž jen diff, ne celý soubor - Vysvětli jen netriviální rozhodnutí (1–2 věty, ne odstavce) - Pokud je víc přístupů, navrhni ten nejjednodušší a zmíň alternativy jednou větou

Sdílejte tento prompt v týmu — každý pak dostává konzistentní výstupy. Aktualizujte ho jak se mění stack a konvence. Funguje to jako onboarding pro AI „kolegu".

V praxi system prompt funguje nejlépe, když kombinuje tři úrovně instrukcí:

  • Identita — kdo AI je (senior dev, security expert, performance engineer)
  • Pravidla — co dodržovat (konvence, patterns, omezení)
  • Formát — jak strukturovat odpověď (diff vs celý soubor, komentáře, vysvětlení)

Nástroje jako Cursor (v souboru .cursorrules), Claude Code (CLAUDE.md) nebo GitHub Copilot (.github/copilot-instructions.md) umožňují uložit system prompt přímo do repozitáře. To je ideální workflow — pravidla jsou verzovaná, sdílená a aktualizovaná spolu s kódem.

Uložte system prompt do repozitáře jako .cursorrules nebo CLAUDE.md. Celý tým pak dostává konzistentní výstupy a pravidla se verzují spolu s kódem.

Technika 4: Kontextové okno — vkládejte relevantní soubory

Moderní modely mají kontext 100k–200k tokenů (Claude až 1M). Využijte to. Víc kontextu = méně halucinací. Před dotazem vložte:

  • Schéma databáze (nebo relevantní tabulky)
  • TypeScript typy / interfaces
  • Existující kód modulu, do kterého přidáváte
  • Relevantní testy (AI pochopí expected behavior)
  • Konfiguraci (tsconfig, eslint rules, package.json)
  • README nebo architektonické rozhodnutí (ADR)

73 %

snížení halucinací při poskytnutí dostatečného kontextu (dle interních testů s GPT-4 a Claude)

Nástroje jako Cursor, Copilot Workspace nebo Claude Code to dělají automaticky — indexují codebase a vkládají relevantní soubory. Při práci ve webovém rozhraní vkládejte ručně. Čím víc kontextu, tím méně halucinací.

Porovnání nástrojů pro kontextové okno

Každý nástroj řeší kontext jinak. Tady je srovnání tří hlavních přístupů:

  • Cursor — automaticky indexuje celý projekt. Stačí napsat prompt a Cursor vloží relevantní soubory. Výhoda: minimální effort. Nevýhoda: někdy vloží irelevantní kontext, což zabírá tokeny. Podpora @file a @codebase tagů pro manuální kontrolu.
  • GitHub Copilot (Chat) — ve VS Code integrovaný chat s přístupem k otevřeným souborům. Kontext je omezený na workspace. #file tagy pro explicitní reference. Od verze s agent mode umí sám hledat v souborech.
  • Claude Code (CLI) — terminálový nástroj, který čte soubory na vyžádání. Obrovský kontext (1M tokenů). Ideální pro práci s velkými codebase, migrace, refaktoring napříč mnoha soubory. Nejlepší pro komplexní úkoly, kde potřebujete pracovat s desítkami souborů najednou.

Praktický tip

Vytvořte v repozitáři soubor AI_CONTEXT.md s přehledem architektury, konvencí, klíčových rozhodnutí a anti-patterns. Když pracujete s webovým AI, prostě ho zkopírujte na začátek konverzace. Dramaticky to zlepší relevanci odpovědí.

Technika 5: Generování testů — ne po, ale před implementací

AI exceluje v generování testů. Ale nejsilnější přístup je TDD s AI — nechte AI napsat testy před implementací. Proč? Protože testy definují kontrakt. Když máte testy, implementace je „jen" splnění specifikace.

Prompt ke zkopírování

Napiš unit testy pro funkci parseConfig(yaml: string): Result<AppConfig, ParseError> Funkce čte YAML konfiguraci a vrací typovaný objekt. Tady je typ AppConfig: [vložte typ] Testovací scénáře: - Validní kompletní konfig - Chybějící povinné pole (testuj každé zvlášť) - Nevalidní datový typ (string místo number, atd.) - Prázdný input - Syntakticky neplatný YAML - Extrémní hodnoty (negativní čísla, prázdné stringy, velmi dlouhé hodnoty) Framework: Vitest. Pattern: arrange-act-assert. Popisné test names v češtině.

AI vám vygeneruje testy včetně edge cases, na které byste sami nepomysleli. Pak implementujete kód, který testy splní. Reálná úspora: 30–60 minut na každém testovacím souboru.

Workflow v praxi vypadá takto:

  1. Definujte rozhraní funkce (název, parametry, návratový typ)
  2. Nechte AI vygenerovat testy na základě rozhraní
  3. Projděte testy, přidejte chybějící scénáře specifické pro vaši business logiku
  4. Implementujte funkci (s pomocí AI nebo ručně)
  5. Spusťte testy — pokud neprochází, iterujte

Tenhle přístup je výrazně efektivnější než „napiš funkci a pak k ní testy", protože testy vás přinutí přemýšlet o edge cases před implementací. AI je v tom skvělé — vymyslí scénáře, které byste přeskočili: prázdné vstupy, unicode znaky, extrémně dlouhé stringy, negativní čísla, null vs undefined.

Prompt ke zkopírování

Napiš integrační testy pro tento API endpoint. Použij supertest + Vitest. Endpoint: POST /api/orders Body: { productId: string, quantity: number, couponCode?: string } Auth: Bearer token (JWT) Testovací scénáře: - Happy path: validní objednávka s a bez kupónu - Auth: chybějící token, expirovaný token, neplatný token - Validace: chybějící povinná pole, neplatný productId, quantity 0, záporná quantity - Business logic: produkt neexistuje, produkt není skladem, neplatný kupón, expirovaný kupón - Edge cases: duplicitní objednávka, souběžné objednávky (race condition) Pro každý test: jasný popis, expected HTTP status, expected response body.

Technika 6: Code review promptem

Než pošlete PR na review, prožeňte ho přes AI. Ne jako náhradu lidského review, ale jako první filtr. Lidský reviewer se pak může soustředit na architekturu a business logiku místo triviálních chyb.

Prompt ke zkopírování

Proveď code review tohoto diffu. Pro každý soubor zhodnoť: 1. Správnost logiky — funguje to korektně? Jaké vstupy by ho rozbily? 2. Edge cases — co není ošetřeno? 3. Výkon — je tu N+1 query, zbytečná alokace, chybějící index? 4. Bezpečnost — injection, XSS, unvalidated input, leaked secrets? 5. Čitelnost — dá se to zjednodušit bez ztráty funkčnosti? Severity pro každý nález: critical / warning / nit. Na konci shrň: „Approve / Request changes" s odůvodněním.

Tohle zachytí většinu běžných chyb — chybějící null check, nezavalidovaný vstup, N+1 query. Reálný příběh z praxe: AI review zachytilo SQL injection v parametrizovaném query, kde developer omylem použil string interpolaci místo prepared statement. Lidský reviewer to přehlédl, protože kód „vypadal" bezpečně.

Pro systematické code review v CI/CD pipeline existují nástroje jako CodeRabbit nebo Sourcery, které automaticky reviewují každý PR. Ale i manuální prompt ve webovém rozhraní je extrémně hodnotný — zvláště pro solo developery, kteří nemají koho požádat o review.

AI code review není náhrada lidského review — je to multiplikátor. Lidský reviewer se soustředí na „proč" (architektura, business logika), AI na „jak" (edge cases, security, performance).

Technika 7: Bezpečnostní audit

Security review je jedna z oblastí, kde AI poskytuje obrovskou hodnotu, protože má „přečteno" tisíce zdokumentovaných zranitelností. Většina vývojářů nemá security background — AI tuto mezeru efektivně vyplní.

Prompt ke zkopírování

Proveď bezpečnostní audit tohoto kódu. Zaměř se na OWASP Top 10: - Injection (SQL, NoSQL, OS command, LDAP) - Broken authentication / session management - XSS (stored, reflected, DOM-based) - Insecure deserialization - Security misconfiguration - Sensitive data exposure (hardcoded secrets, logging PII) - Broken access control (IDOR, missing authz checks) Pro každý nález uveď: - Severity (Critical/High/Medium/Low) - Řádek(y) kódu - Popis zranitelnosti - Proof of concept (jak by to útočník zneužil) - Navrhovaná oprava (konkrétní kód)

AI nenahradí pentest, ale zachytí 80 % běžných chyb v každodenním vývoji. SQL injection, hardcodovaný API klíč, chybějící rate limiting — věci, které se snadno přehlédnou pod časovým tlakem.

Konkrétní příklady, co AI běžně najde:

  • eval() s uživatelským vstupem — command injection
  • JWT token v URL query parametru — exposure přes server logy a referer header
  • Chybějící httpOnly flag na session cookie — přístupný přes XSS
  • CORS s origin: '*' na API s autentizací — bypass same-origin policy
  • Logování celého request body včetně hesel — PII leak do log systému
  • Použití Math.random() pro generování tokenů — predikovatelné výstupy

80 %

běžných bezpečnostních chyb zachycených AI auditem ještě před code review

Technika 8: Refaktoring s jasným cílem

„Vylepši tento kód" je nejhorší prompt pro refaktoring. AI potřebuje vědět co přesně a proč — jinak dostanete over-engineered abstrakcí, které nikdo v týmu nepochopí. Každý z těchto promptů dá konkrétní, použitelný výstup:

  • „Rozděl tuto 200-řádkovou funkci. Každá výsledná funkce max 30 řádků, single responsibility. Zachovej API."
  • „Převeď tyto callbacks na async/await. Zachovej error handling semantiku."
  • „Extrahuj duplicitní logiku z těchto 3 komponent do shared utility. Ukázat diff pro každou komponentu."
  • „Přepiš tento imperativní kód na funkcionální styl (map/filter/reduce). Žádné mutace."
  • „Tady jsou 3 soubory, které dělají podobnou věc. Navrhni abstrakci, ale jen pokud ušetří víc než 30 % kódu. Jinak je nech odděleně."

Poslední bod je důležitý: explicitně řekněte AI, kdy nemá abstrahovat. Jinak dostanete over-engineered řešení pro triviální problém. „Premature abstraction" je horší než duplikace.

Prompt ke zkopírování

Zrefaktoruj tento modul. Cíle (v pořadí priority): 1. Rozděl funkce delší než 40 řádků na menší (single responsibility) 2. Extrahuj magic numbers do pojmenovaných konstant 3. Nahraď any typy explicitními typy 4. Přidej error handling kde chybí (Result type, ne try-catch) Omezení: - Zachovej veřejné API beze změny - Žádné nové dependencies - Žádné abstrakce „pro budoucnost" — jen to, co je potřeba teď - Ukaž diff, ne celý soubor

Všimněte si explicitního pořadí priorit a omezení. Bez nich AI typicky začne tím, co je nejzajímavější (abstrakce, design patterns), ne tím, co přináší největší hodnotu (čitelnost, error handling).

Technika 9: Dokumentace existujícího kódu

Zdědili jste legacy codebase bez dokumentace? Tohle je killer use case pro AI. Za den dokáže jeden vývojář s AI zdokumentovat codebase, na který by bez AI potřeboval týden.

Prompt ke zkopírování

Vysvětli tento kód. Čtenář zná [jazyk/framework] ale nezná business logiku tohoto projektu. Struktura odpovědi: 1. Účel — co kód dělá (1–2 věty) 2. Vstupy a výstupy — co přijímá, co vrací 3. Side effects — co mění mimo svůj scope (DB, soubory, globální stav) 4. Závislosti — na čem závisí (jiné moduly, externí služby) 5. Potenciální problémy — bugy, race conditions, chybějící error handling 6. Navrhovaný JSDoc/docstring (copy-paste ready)

Protože AI nemá „curse of knowledge", dokumentace bývá srozumitelnější než ta, kterou by napsal autor kódu. AI vysvětluje to, co je čtenáři nejasné — ne to, co je zajímavé z technického pohledu.

Rozšířený workflow pro dokumentaci celého projektu:

  1. Začněte entry pointem (main, index, app) — nechte AI popsat high-level architekturu
  2. Pokračujte po modulech — každý modul zdokumentujte zvlášť
  3. Nechte AI vytvořit dependency graf — kdo volá koho
  4. Na konec: nechte AI napsat onboarding dokument pro nového vývojáře

Prompt ke zkopírování

Tady jsou hlavní moduly projektu: [vložte soubory] Vytvoř stručný architektonický přehled: 1. High-level popis — co systém dělá, pro koho 2. Diagram komponent (textový, ASCII nebo mermaid) 3. Data flow — jak data putují systémem (vstup → zpracování → výstup) 4. Klíčové abstrakce — hlavní třídy/moduly a jejich zodpovědnosti 5. External dependencies — jaké služby, API, DB systém používá 6. Known tech debt — co by se mělo zrefaktorovat (a proč)

Technika 10: Iterativní zpřesňování — pair programming dialog

Nejefektivnější workflow není napsat dokonalý prompt napoprvé. Je to dialog — stejně jako pair programming s kolegou:

  1. Zadejte hrubý prompt.
  2. Zhodnoťte výstup — co je dobře, co ne.
  3. Zpřesněte: „Dobrý základ, ale přidej error handling pro network failures a použij Result type místo try-catch."
  4. Opakujte: „Ještě uprav ten retry logic — exponential backoff, max 3 pokusy, timeout 5s."

AI si pamatuje kontext konverzace. Tohle je rychlejší než psát dokonalý 500-slovný prompt — stejně jako je rychlejší říct kolegovi „ještě uprav tohle" než specifikovat vše předem.

Klíčové fráze pro iteraci, které dobře fungují:

  • „Dobrý základ, ale..." — zachová dobrý kód, upraví specifické části
  • „Zachovej X, ale změň Y" — explicitně říká co nechat a co měnit
  • „Zkus jiný přístup: ..." — kompletně nový směr bez ztráty kontextu
  • „Tohle je příliš složité. Zjednodušit na..." — prevence over-engineering
  • „Přidej edge case pro..." — inkrementální vylepšení

Důležité: ukládejte si osvědčené prompty. Vytvořte ve firemním repu složku /prompts nebo sdílený dokument. Standardizované prompty dávají konzistentní výsledky napříč týmem a šetří čas při opakujících se úkolech (generování testů, code review, migrace).

Praktický tip

Vytvořte „prompt library" — sdílenou složku s ověřenými prompty pro běžné úkoly. Kategorizujte: testy, review, dokumentace, refaktoring, security. Nový člen týmu je produktivní s AI od prvního dne.

Bonus: Časté chyby při promptování

Většina vývojářů dělá při práci s AI stále dokola stejné chyby. Tady je seznam těch nejčastějších — a jak se jim vyhnout:

  • Příliš vágní zadání — „vylepši tento kód" místo konkrétního cíle. AI nemůže čist myšlenky.
  • Žádný kontext — prompt bez typů, bez existujícího kódu, bez informace o frameworku. AI pak generuje generický kód, který nesedí do vašeho projektu.
  • Slepé kopírování — přijmout výstup AI bez review. Vždy čtěte vygenerovaný kód. AI dělá subtilní chyby — špatné typy, chybějící error handling, deprecated API.
  • Ignorování kontextového limitu — dlouhá konverzace, kde AI „zapomíná" počáteční instrukce. Řešení: začněte novou konverzaci s aktualizovaným system promptem.
  • Over-prompting — 50-řádkový prompt pro triviální funkci. Pokud je úkol jednoduchý, prompt může být krátký. Složitost promptu by měla odpovídat složitosti úkolu.

Nejlepší prompt engineer není ten, kdo píše nejdelší prompty — je to ten, kdo dává AI právě tolik kontextu, kolik potřebuje. Ne víc, ne míň.

Shrnutí: Co funguje v praxi

Prompt engineering není magie — je to strukturované zadávání úkolů. Stejné principy jako dobrý ticket nebo code review request. Tři pravidla, která pokryjí 90 % situací:

  1. Kontext — vložte relevantní kód, typy, schéma. Čím víc, tím líp.
  2. Specifikace — jazyk, framework, konvence, omezení, formát výstupu.
  3. Iterace — nezkoušejte napsat dokonalý prompt napoprvé. Zpřesňujte dialogem.

A jedno meta-pravidlo: investujte čas do system promptů a prompt library. Upfront investice 2–3 hodin vám ušetří desítky hodin měsíčně. AI je nejsilnější, když ho používáte systematicky — ne ad hoc.

Chcete se naučit tyto techniky v praxi? Na našich workshopech pro vývojáře procvičujeme všechny zmíněné techniky na reálných příkladech z vašeho stacku.