Přeskočit na obsah

Prompting od základů · lekce 3 z 8 · 12 min čtení

Strukturovaný výstup: tabulky, seznamy a JSON

Jak od AI dostat výstup v přesném tvaru, když putuje do tabulky, do jiného systému nebo kolegovi: tabulky, odrážky, pevné šablony a JSON vysvětlený pro laiky. A proč „přesně 100 slov“ nefunguje.

Když ti kolega pošle shrnutí porady jako souvislý odstavec, přečteš si ho. Když ti ale pošle dvacet faktur jako dvacet odstavců a ty je máš dostat do účetní tabulky, budeš ho proklínat. Na tvaru záleží tím víc, čím dál výstup putuje. Jazykový model ve výchozím stavu píše jako ochotný člověk v chatu: odstavce, odrážky, úvodní věta, závěrečné shrnutí. Tahle lekce je o tom, jak ho přimět psát přesně v tom tvaru, který potřebuje tabulka, systém nebo kolega, a jak poznat, že to opravdu dodržel.

Proč na struktuře záleží

Výstup z AI má obvykle jednoho ze tří adresátů, a každý potřebuje něco jiného:

Kam výstup jdeCo potřebujeTypický tvar
Člověk (kolega, šéf, klient)Rychle najít podstatnéNadpisy, krátké odrážky, závěr nahoře
Tabulka (Excel, Google Tabulky)Každý údaj ve vlastní buňceTabulka se stejnými sloupci v každém řádku
Jiný systém (CRM, účetnictví, automatizace)Přesný, strojově čitelný formátJSON nebo jiný pevný formát

Čím víc doprava v té tabulce, tím méně tolerance. Člověk přečte i odpověď, která je trochu jinak uspořádaná, než chtěl. Tabulka se rozbije, když jeden řádek má o sloupec víc. A program, který čeká JSON, skončí chybou, pokud před ním model napíše „Jasně, tady je výsledek:“.

Proč model vůbec potřebuje upozornit? Protože z dolaďování (viz Jak se model trénuje) si odnesl styl ochotného asistenta, který v chatu působí přirozeně. Bez jasného zadání formátu napíše nejpravděpodobnější tvar odpovědi pro danou otázku, a to je obvykle text pro člověka.

Odrážky a pevné šablony pro lidi

Pro lidské čtenáře stačí většinou říct, jak má výsledek vypadat. Několik postupů, které fungují:

  • Řekni počet a délku položek. „Pět odrážek, každá jedna věta“ je mnohem jasnější než „stručně v bodech“.
  • Řekni pořadí. „Nejdřív doporučení, pak tři důvody, pak rizika.“ Manažeři čtou první řádek, ať je na něm to podstatné.
  • Řekni, co chceš, ne co nechceš. Anthropic doporučuje místo „nepoužívej odrážky“ napsat „piš souvislé odstavce“. Zákaz říká jen, kam nejít, pokyn říká, kam jít.
  • Piš prompt ve stylu výstupu. Podle dokumentace Anthropicu formátování promptu ovlivňuje formátování odpovědi. Když chceš výstup bez nadpisů a tučného písma, nepiš ho tak ani v zadání.

Pro opakované úkoly je nejsilnější pevná šablona: dáš modelu kostru a necháš ho ji vyplnit. Funguje to podobně jako příklady z minulé lekce, jen místo hotové ukázky ukazuješ prázdný formulář.

Šablona pro zápis z porady
Z přepisu porady níže vytvoř zápis přesně podle této šablony.
Nic nepřidávej, nic nevynechávej. Pokud nějaká informace
v přepisu není, napiš „neuvedeno“.

## Rozhodnutí
- (každé rozhodnutí jednou větou)

## Úkoly
| Úkol | Kdo | Termín |
|------|-----|--------|

## Otevřené otázky
- (co zůstalo nevyřešeno)

<prepis>
...sem vlož přepis...
</prepis>

Proč to funguje: model nemusí vymýšlet strukturu, jen ji vyplní. Všechny zápisy z porad pak vypadají stejně, takže je kolegové snadno čtou a dají se porovnávat. A pokyn „napiš neuvedeno“ zabrání tomu, aby si model chybějící termín vymyslel.

Tabulky: z chatu do Excelu

Tabulky jsou nejčastější strukturovaný výstup v kancelářské práci: srovnání nabídek, výpis údajů ze smluv, přehled úkolů. Chatovací nástroje tabulky obvykle zobrazí hezky naformátované a ve většině případů je jde zkopírovat rovnou do tabulkového programu.

Aby tabulka byla opravdu použitelná, zadej ji přesně:

  1. Vyjmenuj sloupce a jejich pořadí. „Sloupce: Dodavatel, Cena bez DPH (Kč), Termín dodání, Záruka (měsíce), Poznámka.“
  2. Řekni, jak psát hodnoty. Čísla bez jednotek v buňce (jednotka patří do záhlaví), data v jednom formátu (např. 2026-03-01 nebo 1. 3. 2026), prázdné údaje jako „neuvedeno“ nebo prázdnou buňku.
  3. Jeden řádek = jedna věc. Model má sklon do jedné buňky nacpat víc informací. Pokud má nabídka dvě varianty, chceš dva řádky.

JSON: formát, kterému rozumí programy

Když výstup z AI nemá číst člověk, ale jiný program, potřebuje formát, který je jednoznačný. Program neumí „pochopit“ větu „Faktura je na 12 400 Kč, splatná do konce měsíce“. Potřebuje dostat cenu a datum na přesně určeném místě. K tomu se nejčastěji používá JSON.

JSON(JavaScript Object Notation)
Textový formát pro zápis dat, který umí číst lidé i programy. Data se zapisují jako dvojice „název: hodnota“ ve složených závorkách. Je to dnes nejběžnější způsob, jakým si aplikace na internetu předávají data, a skoro každý systém ho umí přijmout.

Takhle vypadá jednoduchý JSON s údaji z faktury:

{
  "dodavatel": "Čistota Brno s.r.o.",
  "cislo_faktury": "2026-0142",
  "castka_kc": 12400,
  "splatnost": "2026-03-31",
  "zaplaceno": false,
  "polozky": ["Úklid kanceláří – únor", "Mytí oken"],
  "poznamka": null
}

Stačí znát pár pravidel, abys JSON přečetl:

  • Složené závorky { } ohraničují jeden „objekt“, tady jednu fakturu.
  • Každý řádek je název a hodnota oddělené dvojtečkou. Názvy jsou v uvozovkách a dohodnuté předem (program přesně ví, že hledá castka_kc).
  • Text je v uvozovkách ("2026-0142"), čísla bez uvozovek a bez mezer (12400), ano/ne se píše true/false.
  • Hranaté závorky [ ] jsou seznam více hodnot, tady položky faktury.
  • null znamená „hodnota chybí“. To je důležité: chybějící údaj má být null, ne vymyšlená hodnota.

Proč ne prostě tabulka? JSON umí věci, které tabulka neumí elegantně: seznamy uvnitř záznamu (faktura s několika položkami), vnořené údaje (dodavatel s adresou a IČO) a přesné typy (číslo je číslo, ne text, který vypadá jako číslo). A hlavně je to formát, který systémy čekají.

Vytažení údajů z e-mailu do JSON

Prompt:

Z e-mailu níže vytáhni údaje o objednávce. Odpověz POUZE JSONem
bez dalšího textu, přesně v tomto tvaru:

{
  "zakaznik": text,
  "produkty": [ { "nazev": text, "pocet": číslo } ],
  "pozadovany_termin": "RRRR-MM-DD" nebo null,
  "pozaduje_slevu": true/false
}

Pokud údaj v e-mailu není, použij null. Nic si nedomýšlej.

<email>
Dobrý den, za firmu Novák Stav bychom potřebovali 12 kancelářských
židlí Ergo a 2 stoly Basic. Ideálně do 20. března. Díky, Petr Novák
</email>

Očekávaný výstup:

{
  "zakaznik": "Novák Stav",
  "produkty": [
    { "nazev": "kancelářská židle Ergo", "pocet": 12 },
    { "nazev": "stůl Basic", "pocet": 2 }
  ],
  "pozadovany_termin": null,
  "pozaduje_slevu": false
}

Všimni si termínu: e-mail neříká rok, takže správně je buď null, nebo se model musí zeptat. Kdyby doplnil „2026-03-20“, je to domněnka, kterou bys chtěl vidět označenou. Na takových drobnostech se rozhoduje, jestli automatizace funguje, nebo tiše dělá chyby. Jak přesně s nejistými údaji naložit, musíš rozhodnout ty a napsat to do zadání.

Kontroluj strukturu, nejen obsah

I když model dostane přesné zadání, výstup není zaručeně v pořádku. Model formát „píše“ token po tokenu stejně jako jakýkoli jiný text, a nic ho v běžném chatu nenutí dodržet ho na sto procent. Typické chyby:

  • Text navíc. „Tady je požadovaný JSON:“ před samotnými daty, nebo vysvětlivka za nimi.
  • Rozbitý formát. Chybějící čárka, uvozovka nebo závorka, komentář uvnitř JSONu, tabulka, kde jeden řádek má víc sloupců.
  • Jiné názvy. Místo castka_kc napíše castka, místo true napíše "ano".
  • Vymyšlené hodnoty. Prázdné pole vyplní něčím věrohodným místo null.
  • Useknutý konec. U dlouhých výstupů může odpověď skončit uprostřed, protože model narazil na limit délky odpovědi.

Co s tím:

  1. Strukturu ověř nástrojem. Na JSON existují volně dostupné validátory (stačí vyhledat „JSON validator“), tabulku zkontroluješ po vložení do tabulkového programu. U citlivých dat ale nevkládej skutečné údaje do neznámé webové služby.
  2. Obsah ověř proti zdroji. Validátor ti řekne, že JSON je platný, ne že je částka správná. Pár záznamů vždy porovnej s originálem, zvlášť na začátku.
  3. Chyby oprav v zadání, ne ručně. Když model opakovaně píše "ano" místo true, přidej to do promptu nebo přidej ukázku. Ruční opravy se v automatizaci neškálují.
Do hloubkyStrukturované výstupy v API: když formát musí platit vždy

Když se AI napojuje přímo na firemní systémy (bez člověka, který odpověď čte), nestačí „model většinou poslechne“. Proto výrobci nabízejí v rozhraní pro programátory (API) funkce obvykle nazvané strukturované výstupy (structured outputs).

Princip: vývojář předem popíše požadovaný tvar dat pomocí takzvaného JSON schématu (JSON Schema), tedy formálního popisu, jaká pole musí odpověď mít, jakého typu a které jsou povinné. Model pak při generování nemůže zvolit token, který by tvar porušil. Odborně se tomu říká omezené dekódování (constrained decoding): ze všech možných dalších tokenů se vybírá jen z těch, které schéma dovoluje. Anthropic i OpenAI u svých funkcí uvádějí, že výstup odpovídající schématu tímto způsobem zaručují. OpenAI výslovně rozlišuje starší „JSON režim“, který zaručuje jen platný JSON, od strukturovaných výstupů, které zaručují i dodržení schématu.

Dvě důležité výhrady. Zaprvé, i tyto funkce mají výjimky: například když model odmítne odpovědět nebo když odpověď narazí na limit délky, dokumentace Anthropicu uvádí, že výstup schématu odpovídat nemusí. Zadruhé, a to hlavně: schéma zaručuje tvar, ne pravdu. Pole castka_kc bude vždy číslo, ale pořád to může být špatné číslo.

Jak se s API a strukturovanými výstupy pracuje v praxi, probereme v kurzu Jak se staví AI aplikace.

Délka: proč „přesně 100 slov“ nefunguje

Jedno z nejčastějších zadání formátu je délka. A zároveň jedno z nejméně spolehlivých. Když napíšeš „přesně 100 slov“, dostaneš něco kolem stovky, ale klidně 85 nebo 120. Proč?

Odpověď znáš z lekce Tokeny: model nevidí slova, vidí tokeny. Jedno české slovo může být jeden token, ale často je to dva, tři i víc, podle toho, jak běžné slovo je. Model navíc text píše dopředu, token po tokenu, a nemá vestavěné počítadlo, které by průběžně sčítalo slova. Odhaduje délku podobně, jako odhaduješ ty, když píšeš rukou „asi na půl stránky“. Zkus si sám, na kolik tokenů se rozpadne obyčejná česká věta:

Vyzkoušej si: jak model vidí text

Napiš cokoli. Každý barevný dílek je jeden token, číslo pod ním je jeho ID ve slovníku modelu.

… tokenů10 slov66 znaků

Načítám tokenizér…

Znak ␣ je mezera, která patří k tokenu. Tokenizér je skutečný (modely GPT-4o od OpenAI); jiné modely dělí text trochu jinak, princip je stejný.

Co funguje lépe:

  • Rozsah místo přesného čísla: „120–180 slov“ nebo „zhruba na půl normostrany“.
  • Struktura místo počtu slov: „tři odstavce, každý dvě tři věty“ nebo „pět odrážek po jedné větě“. Věty a odrážky model drží mnohem spolehlivěji než slova.
  • Účel místo čísla: „aby se to vešlo do náhledu notifikace“ nebo „na jeden slajd“ dá modelu představu, proč na délce záleží.
  • Kontrola na konci: pokud je limit tvrdý (formulář s maximem znaků, inzerát), zkontroluj délku nástrojem a případně požádej o zkrácení. Počet znaků ti spočítá textový editor, model ne.

Jak to použít v práci

Až příště budeš chtít něco z AI dostat „do tabulky“ nebo „do systému“, polož si dvě otázky. Kdo nebo co výstup bude číst? Podle toho zvol tvar: odrážky pro lidi, tabulku pro Excel, JSON pro systém. Jak poznám, že je výstup v pořádku? U lidí stačí přečíst, u tabulek zkontrolovat sloupce, u JSONu validátor plus kontrola několika hodnot proti zdroji.

Pokud tvůj tým dělá stejný typ výstupu opakovaně (zápisy z porad, výpisy ze smluv, třídění e-mailů), stojí za to vytvořit jednu vyzkoušenou šablonu promptu s pevnou strukturou a sdílet ji. Je to malá investice, která dělá výsledky srovnatelnými a chyby viditelnými. Ověřování výstupů obecně se podrobně věnuje lekce Ověřování výstupů.

Co si odnést

  • Čím dál výstup putuje (člověk → tabulka → systém), tím přesnější formát potřebuje a tím méně odchylek snese.
  • Formát zadávej konkrétně: počet a pořadí položek, názvy sloupců, tvar hodnot, co dělat s chybějícím údajem. Pro opakované úkoly použij pevnou šablonu.
  • JSON je textový formát „název: hodnota“, kterému rozumí programy. Chybějící údaj má být null, ne odhad.
  • V běžném chatu formát nikdo nezaručuje: strukturu ověř nástrojem a obsah proti zdroji. Strukturované výstupy v API zaručují tvar, ne pravdivost.
  • Model počítá v tokenech a slova nepočítá. Místo „přesně 100 slov“ zadávej rozsah nebo strukturu a tvrdé limity kontroluj nástrojem.

Zdroje a další čtení

Kvíz k modulu

Prompting od základů

Otázka 1 z 6

Napíšeš „Napiš e-mail klientům o zdražení“ a dostaneš obecný, uhlazený text bez konkrétních údajů. Co je nejpravděpodobnější příčina?