Menu
Přihlásit
Návod Automatizace

Jak získat JSON z AI: structured outputs v praxi

Chcete vědět, jak získat JSON z AI spolehlivě? Praktický návod na structured outputs u OpenAI, Claude i Gemini – bez lámání automatizace.

Aktualizováno 9 min čtení 4 kroky

Obsah článku 6 sekcí

V kostce

  • Strict structured outputs dekódují model přímo proti JSON schématu, takže formátová selhání prakticky zmizí; prompt-based JSON jich má podle typu obsahu 10–30 %.
  • Claude má od ledna 2026 nativní structured outputs (output_config.format, GA) a u modelů 5.5 už nelze vynutit tool_choice any/tool — sílí strict tool use nebo structured outputs.
  • V strict režimu musí být additionalProperties: false, volitelná pole se u OpenAI řeší přes typ ["string", "null"] a validace jako format či minimum se přenášejí na váš kód.
  • Ošetřete i tak edge case: refusal (HTTP 200 s message.refusal / stop_reason refusal) a useknutí na limitu tokenů (finish_reason length).
Jak získat JSON z AI: structured outputs v praxi - ilustrační obrázek

Postavíte automatizaci, která má z e-mailu vytáhnout jméno klienta, částku a termín — a výsledek poslat rovnou do n8n nebo do tabulky. Do promptu napíšete „vrať mi JSON". Model odpoví. Jenže jednou přidá „Tady je výsledek:", podruhé zabalí data do bloku ```json, potřetí zapomene čárku nebo vymyslí jiné jméno pole. Váš parser spadne a celá linka se zastaví. Pokud řešíte, jak získat JSON z AI tak, aby to fungovalo při každém běhu, mám pro vás dobrou zprávu: v roce 2026 už na to existuje spolehlivá cesta a není ní preciznější regulární výraz.

V tomto návodu vám ukážu tři způsoby, jak z modelu dostat strukturovaná data (JSON mode, function calling a structured outputs), kde se který hodí, a konkrétní postup nasazení structured outputs u OpenAI, Claude i Gemini. Nakonec si to ukážeme na reálném příkladu — extrakci dat z e-mailu přímo do automatizace.

Proč prompt „vrať mi JSON" nestačí a vaše automatizace padá

Nejčastější chyba je domnívat se, že jde o problém špatného promptu. Není. Jazykové modely jsou pravděpodobnostní — generují tokeny, které se statisticky hodí. Když napíšete „vrať JSON", model většinou poslechne, ale nikdy na 100 %. Občas přidá zdvořilou větu, občas ho zabalí do markdownu, občas uvozovky, které se špatně escapují, a u složitějších dat vám klidně přejmenuje pole nebo přidá pole navíc.

Důsledek: když AI řetězíte do business procesu — třeba do lead nurturingu přes Make nebo do self-hosted pipeline — jeden rozbitý běh zablokuje celou linku. Běžná praxe je pak napsat try/catch, doplnit regex na odstranění markdownu, přidat retry a doufat. Funguje to, dokud objem nezroste.

Skutečná oprava není lepší prompt ani přísnější parser. Je to omezit model už při dekódování tak, aby neplatný výstup prostě nemohl vygenerovat. Přesně to dělají structured outputs.

Tři cesty k datům z AI: JSON mode, function calling a structured outputs

Než se pustíme do krokování, rozveďme tři přístupy, které se často pletou:

  1. JSON mode — model odpoví platným JSONem, ale negarantuje konkrétní strukturu. Pole se můžou jmenovat pokaždé jinak nebo chybět. Hodí se, když vám jde jen o to, aby to šlo naparsovat. OpenAI k němu přímo doporučuje: „vždy raději použijte Structured Outputs."
  2. Function calling (tool use) — nadefinujete nástroj (funkci) s JSON schématem parametrů a model vyplní argumenty. Pozor na zásadní změnu: u aktuálních modelů Claude 5.5 (Sonnet, Opus i Haiku) už nejde vynutit volání nástroje parametrem tool_choice: any či tool — API vrací chybu 400. Správná cesta je dnes tzv. strict tool use (schéma se validuje gramatikou, volení necháte na auto) nebo rovnou structured outputs.
  3. Structured outputs (strict) — model se dekóduje přímo proti vašemu JSON schématu (tzv. constrained decoding). Výsledek je garantovaně validní a pole-pole odpovídá schématu. U OpenAI zapnete response_format s json_schema a strict: true, u Claude output_config.format (GA od ledna 2026), u Gemini response_format s mime_type: application/json a schématem.

Rozdíl ve spolehlivosti je drastický. Zatímco prompt-based JSON zvládne správný formát zhruba v 70–90 % případů (a zbytek vám rozbije pipeline), strict structured outputs dosahují v podstatě 100% shody se schématem. To není marketingový slib — je to matematický důsledek toho, že model při dekódování dostává povolené jen ty tokeny, které vedou k validnímu JSONu.

Kdy co zvolit? Pravidlo je jednoduché. Pokud data z AI nikam dál neposíláte a jen si je přečtete, bohatě stačí obyčejný text. Jakmile ale výstup řetězíte do dalšího kroku automatizace — e-mail do CRM, recenze do dashboardu, lead do databáze — vždy sáhněte po structured outputs. Function calling si nechte na situace, kdy má model nejen vrátit data, ale rozhodnout, kterou akci spustit (a kombinujte ho se strict režimem). A JSON mode berte jako kompromis, když váš nástroj strict mód nepodporuje.

Jak získat JSON z AI krok za krokem: structured outputs

Tady je konkrétní postup. Bude vám známý, ať voláte OpenAI, Claude nebo Gemini — liší se jen názvy parametrů, myšlenka je stejná.

Nadefinujte JSON schéma toho, co chcete

Nejprve popište data, která potřebujete, jako JSON Schema. Buďte konkrétní: udejte typy polí, co je povinné (required), a kde to dává smysl použijte enum pro omezené množiny hodnot. Například pro extrakci leadu z e-mailu:

{
  "type": "object",
  "properties": {
    "jmeno_klienta": { "type": "string" },
    "email": { "type": "string" },
    "firma": { "type": "string" },
    "castka_czk": { "type": "number" },
    "termin": { "type": "string" },
    "priorita": { "type": "string", "enum": ["nizka", "stredni", "vysoka"] }
  },
  "required": ["jmeno_klienta", "email", "castka_czk", "priorita"],
  "additionalProperties": false
}

Klíčové je "additionalProperties": false — říká modelu, že nesmí vymyslet žádná pole navíc. OpenAI i Anthropic ho v strict režimu vyžadují. Dva rozdíly proti běžnému JSON Schema stojí za pozornost:

  • Volitelná pole se v strict režimu řeší jinak: u OpenAI musí být všechna pole v required a volitelnost se emulovat přes typ ["string", "null"]. Validace typu format: "email" či rozsahů minimum/maximum přitom strict režim u obou poskytovatelů ignoruje nebo rovnou odmítá — rozsahy a e-mail si zkontrolujte ve vlastním kódu.
  • Schéma má limity: OpenAI maximum je 5 000 vlastností a 10 úrovní zanoření; Anthropic nepodporuje rekurzivní schémata a složitější regexy. Když schéma přeroste limity, dostanete chybu ještě před generováním.

Zapněte striktní mód (constrained decoding)

Teď schéma připojte k volání modelu:

  • OpenAI: response_format: {type: "json_schema", json_schema: {strict: true, schema: …}} (v Responses API text.format). Funguje od modelů GPT-4o dál; pro nové projekty dokumentace doporučuje aktuální řadu (např. gpt-6-astra).
  • Claude: output_config: {format: {type: "json_schema", schema: …}} v Messages API — od ledna 2026 obecně dostupné, bez beta hlavičky. Starší parametr output_format je zastaralý. V SDK je k tomu helper parse(): předáte Pydantic model a dostanete rovnou parsed_output.
  • Gemini: v aktuálním API nastavíte response_format s mime_type: "application/json" a schématem. Starší názvy responseMimeType/responseSchema najdete ještě v komunitních návodech k OpenAI-kompatibilnímu koncovému bodu, ale oficiální dokumentace už používá novou podobu — i když si AI workflow stavíte jen na mobilu, platí stejná pravidla.

V tento okamžik se mění způsob, jakým model generuje výstup. Už nevolí libovolné tokeny — volí jen ty, které vedou k JSONu odpovídajícímu vašemu schématu. Proto výsledkem nemůže být „Tady je JSON:" s prózou okolo. Prostě dostanete objekt.

Naparsovat a napojit na automatizaci

Protože je výstup garantovaně validní, parsování se smrskne na jedno json.loads (nebo JSON.parse). Žádný odstraňovač markdownu, žádné zachraňování chybějících čárek. Pole rovnou pošlete dál — do databáze, do n8n pipeline v produkci, do CRM nebo do Google Sheets.

Dvě edge case přesto ošetřete: model se může odmítnout odpovědět (bezpečnostní refusal — u OpenAI ji najdete v message.refusal, u Claude jako stop_reason: "refusal"; HTTP zůstává 200, takže ji musíte aktivně kontrolovat) a odpověď se může useknout na limitu tokenů (finish_reason: "length"). Obojí je řádově vzácné, ale automatizace musí vědět, co s tím.

Když AI potřebuje nejen vrátit data, ale i zavolat další nástroje (dohledat v databázi, odeslat e-mail), kombinujte structured outputs s MCP servery — schéma určuje, jak vypadá výstup, tool use určuje, co se s ním děje dál.

Retry jen pro obsah, ne pro formát

Tím, že formát padá prakticky na nulu, se retry logika přesune z „oprav rozbitý JSON" na „oprav obsah". Model sice vrátí validní objekt, ale třeba špatně odhadne prioritu nebo datum. To řešíte klasicky — validačními pravidly na obsah, ne na syntaxi. Šetří to tokeny, nervy i peníze za API, protože odpadá spousta zbytečných retry kol.

Praktický příklad: extrakce dat z e-mailu do n8n

Ať to není jen teorie, tady je stejný úkol dvěma způsoby. Máte e-mail od klienta a chcete z něj dostat strukturovaný záznam do n8n.

Předtím (prompt + regex) Do promptu napíšete „vrať JSON s poli jmeno, castka, termin". Model odpoví „Jistě, tady je výsledek: json { … } ". V n8n si napíšete regex na vytažení bloku, ošetříte výjimky, nastavíte retry. Přesto vám průměrně zhruba 10–15 % běhů spadne na okrajových případech — chybějící čárka, jiný formát data, česká diakritika v názvu pole. Ruční opravy se stanou rutinou.

Potom (structured outputs) Nadefinujete schéma jako v kroku 1, zapnete strict mód. Model vrátí čistý objekt odpovídající schématu. V n8n použijete uzel AI Agent s volbou Require Specific Output Format a k němu sub-node Structured Output Parser, kam schéma vložíte vizuálně — žádný kód na parsování. Formátových selhání je nula, ty pár případů, kdy se opravuje, jsou čistě obsahové (např. špatně vyčtená částka). Celá linka začne fungovat spolehlivě i při desetinásobném objemu.

Tip z praxe: držte schémata malá a účelová. Čím víc polí model musí vyplnit, tím spíš u obsahu tápe. Pro omezené hodnoty jako priorita nebo stav vždy použijte enum. A počítejte s tím, že strict režim má svoji režii: Anthropic k dotazu automaticky přidává interní system prompt (účetné do vstupních tokenů) a změna schématu invaliduje prompt cache — při časté rotaci schémat tedy caching tolik nepomůže. Samotná gramatika se u Anthropic cacheuje na serveru 24 hodin, takže opakovaná volání se stejným schématem jsou rychlá.

Časté otázky

Funguje structured outputs u Claude i OpenAI?

Ano, u všech třech velkých poskytovatelů. U OpenAI zapnete response_format s json_schema a strict: true. U Claude od ledna 2026 nativně přes output_config.format v Messages API (dříve beta hlavička, nyní GA). U Gemini nastavíte response_format s mime_type: application/json a schématem.

Jaký je rozdíl mezi JSON mode a structured outputs?

JSON mode vám zaručí, že dostanete platný JSON, ale nezaváže model konkrétní struktuře — pole se můžou jmenovat pokaždé jinak. Structured outputs garantují, že výstup bude pole-pole odpovídat vašemu schématu, protože se model dekóduje přímo proti němu. OpenAI dokonce doporučuje JSON mode ve nových projektech nepoužívat.

Musím přesto ošetřovat výjimky?

Formátové výjimky v podstatě zmizí. Pořád ale validujte obsah — rozsahy hodnot, správné položky enumu, to, jestli model správně pochopil částku. A ošetřete refusal a useknutí na limitu tokenů. Retry logika se přesune z opravy syntaxe na opravu obsahu.

Stojí structured outputs víc?

Připlatíte jen málo — u Anthropic několik set tokenů za automaticky vložený system prompt. Cenová výhra ve spolehlivosti to běžně přebije, zvlášť u pipeline s vyšším objemem (Batch API navíc slevňuje 50 %). Pro srovnání cen jednotlivých modelů máme přehled tarifů.

Dá se to použít v n8n bez kódování?

Ano. n8n má uzly AI Agent s přepínačem Require Specific Output Format a Structured Output Parser, kam schéma připojíte vizuálně — nemusíte psát žádné parsování ručně. Podobně to jde v Make, Zapieru i v dalších automatizačních nástrojích.

Shrnutí: přestaňte parsovat, začněte schémovat

Structured outputs posouvají AI z „odpovídá prózou, kterou snad dostanete do dat" na „vrací data, kterým vaše automatizace můžou věřit". Recept je krátký: nadefinujte JSON schéma, zapněte strict mód a přestaňte zachraňovat výstup regulárními výrazy. Výsledek je pipeline, která běží spolehlivě i tehdy, když si model vymyslí vtipnou hlavičku e-mailu.

Nejjednodušší začátek: vyberte jednu automatizaci, která vám dnes občas padá na rozbitém výstupu z AI, a přepište ji se schématem. Rozdíl uvidíte během pár běhů. A jakmile vám tohle sedí, máte solidní základ pro složitější věci — orchestraci týmu agentů nebo analýzu dat v ChatGPT bez kódu.

Zmíněné AI nástroje

Pokračuj dál

Všechny články →