---
title: "Štruktúrované výstupy s JSON Schema: Ako vynútiť spoľahlivé odpovede agentov"
description: "Štruktúrované výstupy s JSON Schema sú technika, ktorá LLM núti vrátiť odpoveď presne podľa vopred zadanej JSON schémy."
locale: "sk"
canonical: "https://blckalpaca.at/sk/vedomosti/ai-agenti/zaklady-llm-pre-ai-agentov/strukturovane-vystupy-json-schema"
category: "AI agenti"
topic: "Základy LLM pre AI agentov"
updated: "2026-10-17T15:36:32.073Z"
source: "Blck Alpaca e.U., blckalpaca.at"
---

# Štruktúrované výstupy s JSON Schema: Ako vynútiť spoľahlivé odpovede agentov

Štruktúrované výstupy s JSON Schema sú technika, ktorá LLM núti vrátiť odpoveď presne podľa vopred zadanej JSON schémy. Namiesto voľného textu model dodá strojovo čitateľný objekt, ktorý sa dá validovať. Agentové pipeline sú vďaka tomu spoľahlivé, pretože nadväzujúce kroky programu sa môžu spoľahnúť na garantovanú dátovú štruktúru.

## Na prvý pohľad

- Štruktúrované výstupy vynucujú pevnú JSON schému a namiesto parsovania voľného textu, ktoré je náchylné na chyby, dodajú garantovanú dátovú štruktúru, ktorú možno validovať.
- Existujú tri úrovne záruky: prompt-only (žiadna záruka), JSON mode (platný JSON, ale nie tvoja schéma) a constrained decoding, resp. Structured Outputs (schéma striktne vynútená).
- Constrained decoding garantuje syntax a súlad so schémou, nie však vecnú správnosť obsahu. Odborná validácia a stratégia opakovaných pokusov (retry) zostávajú povinné.
- Pri Anthropic Claude vynucujú schému Structured Outputs, a to buď ako JSON output (output_config.format), alebo ako Strict Tool Use (strict: true). Pri OpenAI to zabezpečujú Structured Outputs v režime strict. Bežný tool use bez strict schému negarantuje.
- Pre viackrokových agentov je to zásadné: každý nespoľahlivý krok sa v reťazci násobí a end-to-end úspešnosť prudko klesá.
- Validácia cez Pydantic alebo Zod plus obmedzený počet opakovaných pokusov (bounded retries) so spätnou väzbou o chybe je v praxi štandard pre odolné pipeline.

Štruktúrované výstupy s JSON Schema sú technika, ktorá [LLM](https://blckalpaca.at/sk/slovnik/llm) núti vrátiť odpoveď presne podľa vopred zadanej JSON schémy. Namiesto voľného textu model dodá strojovo čitateľný objekt, ktorý sa dá validovať. Agentové pipeline sú vďaka tomu spoľahlivé, pretože nadväzujúce kroky programu sa môžu spoľahnúť na garantovanú dátovú štruktúru a nemusia parsovať voľný text náchylný na chyby.

- **Čo?** Model vracia JSON podľa pevnej schémy, nie voľný text. Polia, typy a povolené hodnoty sú definované.
- **Prečo?** Programy môžu výsledok priamo ďalej spracovať bez krehkej logiky s regulárnymi výrazmi alebo reťazcami. To je základ spoľahlivých agentov.
- **Ako?** Cez funkcie poskytovateľov, napríklad Structured Outputs od [OpenAI](https://blckalpaca.at/sk/slovnik/openai) a Anthropic, alebo cez constrained decoding pri open-weight modeloch, doplnené o validáciu a retry.

## Prečo parsovanie voľného textu v agentových pipeline zlyháva

Jazykový model štandardne generuje text pre ľudských čitateľov. Pre chatbota je to ideálne, pre automatizovanú pipeline je to však problém. Len čo musí program z odpovede vytiahnuť hodnotu, napríklad kategóriu, dátum, sumu alebo zoznam, začína krehké parsovanie. Model raz napíše `"Kategória je faktúra."`, inokedy `"Kategória: faktúra"` a niekedy pred to pridá vysvetlenie. Každý z týchto variantov rozbije naivnú logiku extrakcie.

Pri [viackrokových agentoch](https://blckalpaca.at/sk/vedomosti/ai-agenti/prehlad-architektur-ai-agentov) sa problém dramaticky zhoršuje, pretože nespoľahlivosť sa v reťazci **násobí**. Príklad výpočtu: ak má každý jednotlivý krok úspešnosť parsovania 95 percent, end-to-end úspešnosť reťazca z desiatich krokov je už len 0,95 umocnené na 10, teda približne 60 percent. Ak štruktúrované výstupy zvýšia úspešnosť každého kroku na 99,5 percenta, ten istý reťazec skončí približne na 95 percentách. Z tohto multiplikačného efektu vyplýva hlavná téza článku: štruktúrované výstupy nie sú funkcia pre pohodlie, ale predpoklad toho, aby agentové pipeline vôbec dosiahli produkčnú kvalitu.

## Tri úrovne záruky v prehľade

Nie každá metóda, ktorá sľubuje JSON, dáva rovnakú záruku. Treba rozlišovať tri úrovne a rozdiel medzi nimi rozhoduje o spoľahlivosti.

[**Prompt](https://blckalpaca.at/sk/slovnik/prompt)-only.** Model zdvorilo požiadaš, aby vrátil JSON. Často to funguje, ale nie vždy. Model môže pridať markdownové ohraničenie kódu (code fences), vynechať polia alebo sa pri neistote predsa len vrátiť k súvislému textu. Žiadna záruka.

**JSON mode.** Poskytovateľ garantuje, že výstup je syntakticky platný JSON. Tým odpadnú syntaktické chyby, o štruktúre to však nehovorí nič: polia môžu chýbať, mať nesprávne typy alebo sa objaviť navyše. Čiastočná záruka.

**Constrained decoding / Structured Outputs.** Tu sa generovanie na úrovni tokenov obmedzí tak, že model môže vytvoriť len tokeny, ktoré zodpovedajú schéme. Z rámca schémy už model nemôže vybočiť. Povinné polia, typy a povolené hodnoty enumov sú garantované. Na tejto technike stoja OpenAI Structured Outputs (režim strict) a [Structured Outputs od Anthropic](https://platform.claude.com/docs/en/build-with-claude/structured-outputs), teda JSON outputs cez `output_config.format` a [Strict Tool Use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/strict-tool-use) so `strict: true`. Bežný [tool use](https://blckalpaca.at/sk/vedomosti/ai-agenti/zaklady-llm-pre-ai-agentov/function-calling-vs-tool-use) bez `strict` schému negarantuje. Pri open-weight modeloch rovnakú úlohu preberajú knižnice a inference stacky pomocou gramatických obmedzení (grammar constraints).

## Metóda, záruka a kompromis v porovnaní

| Metóda | Záruka | Kompromis |
| --- | --- | --- |
| Prompt-only ("odpovedz ako JSON") | Žiadna. Model sa môže odchýliť alebo vrátiť súvislý text | Nulová námaha pri implementácii, ale v produkcii nespoľahlivé |
| JSON mode | Syntakticky platný JSON, ale nie tvoja schéma | Odstráni syntaktické chyby, nie však chýbajúce alebo nesprávne typované polia |
| Structured Outputs / strict (OpenAI) | Schéma striktne vynútená (polia, typy, enumy) | Prvá požiadavka na každú schému môže stáť latenciu na kompiláciu schémy; podporovaná je len podmnožina JSON Schema |
| JSON outputs / Strict Tool Use (Anthropic Claude) | Schéma vynútená cez constrained decoding (output\_config.format alebo strict: true) | Prvá požiadavka na každú schému stojí latenciu na kompiláciu gramatiky; podporovaná je len podmnožina JSON Schema |
| Constrained decoding (open-weight, lokálne stacky) | Gramatika vynucuje súlad so schémou na úrovni tokenov | Vyžaduje kontrolu nad inference stackom; zložitosť schémy ovplyvňuje rýchlosť |
| Schéma + validácia + retry (Pydantic/Zod) | Garantovaná forma plus sémantická kontrola | Viac kódu a logiky, zato najodolnejší variant pre kritické pipeline |

Rozhodujúci poznatok z tejto tabuľky: constrained decoding garantuje **formu**, nie **obsah**. Model určite dodá platný objekt s poľom `datum_faktury`, ale či hodnota v ňom naozaj zodpovedá dátumu na dokumente, nezabezpečí žiadna metóda dekódovania. Preto sú odborná validácia a stratégia retry naďalej nevyhnutné.

## Realita poskytovateľov v roku 2026

Veľkí poskytovatelia dnes viažu odpoveď na JSON schému, líšia sa však v parametroch a obmedzeniach.

- **OpenAI:** [Structured Outputs](https://developers.openai.com/api/docs/guides/structured-outputs) so `strict: true`, buď ako formát odpovede typu `json_schema`, alebo pri function callingu. JSON mode (`json_object`) naproti tomu dodá len platný JSON bez dodržania schémy.
- **Anthropic Claude:** [JSON outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) cez `output_config.format` alebo [Strict Tool Use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/strict-tool-use) so `strict: true`, oba spôsoby fungujú cez sampling obmedzený gramatikou. Bez `strict` môže Claude pri tool use vrátiť nesprávne typy (`"2"` namiesto `2`) alebo vynechať povinné polia. Rekurzívne schémy a obmedzenia ako `minimum` alebo `maxLength` [API](https://blckalpaca.at/sk/slovnik/api) nepodporuje. Limity dĺžky, aké používa príklad nižšie, preto patria do `description` a do validácie.
- **Google Gemini:** API prijme JSON schému spolu s MIME typom `application/json` ako [formát odpovede](https://ai.google.dev/gemini-api/docs/structured-output). Google sám odporúča hodnoty aj tak skontrolovať v aplikácii.
- **Open-weight modely:** Tu schému vynucuje inference stack pomocou gramatiky. [vLLM](https://docs.vllm.ai/en/latest/features/structured_outputs.html) prijme JSON schému priamo vo svojom serveri kompatibilnom s OpenAI, [llama.cpp](https://github.com/ggml-org/llama.cpp/blob/master/grammars/README.md) prekladá časť JSON Schema do gramatík GBNF. Ak prevádzkuješ stack sám, nastavíš constrained decoding nezávisle od API poskytovateľa.

Dôležité pre prax: mnohí inference provideri ponúkajú endpointy kompatibilné s OpenAI, štruktúrované výstupy však implementujú rôzne. Skôr než sa rozhodneš, over, či konkrétny provider režim strict alebo obmedzenia schémy naozaj presadzuje, alebo ponúka len JSON mode.

## Príklad schémy a stratégia retry

Princíp najlepšie ukáže konkrétny príklad. [Agent](https://blckalpaca.at/sk/slovnik/agent) má klasifikovať prichádzajúce požiadavky na podporu a vytiahnuť z nich najdôležitejšie polia. JSON schéma (zjednodušená) vyzerá takto:

\`\`\`json
{
  "type": "object",
  "properties": {
    "kategoria": {
      "type": "string",
      "enum": ["faktura", "technika", "zmluva", "ostatne"],
      "description": "Hlavná kategória požiadavky"
    },
    "naliehavost": {
      "type": "string",
      "enum": ["nizka", "stredna", "vysoka"]
    },
    "cislo\_zakaznika": {
      "type": ["string", "null"],
      "description": "Číslo zákazníka, ak je uvedené v texte, inak null"
    },
    "zhrnutie": {
      "type": "string",
      "description": "Jedna veta, maximálne 200 znakov"
    }
  },
  "required": ["kategoria", "naliehavost", "cislo\_zakaznika", "zhrnutie"],
  "additionalProperties": false
}
\`\`\`

Kľúčové sú tu dve rozhodnutia v návrhu. Po prvé **enumy namiesto voľného textu** pre `kategoria` a `naliehavost`: model tak nemôže vymyslieť `"Fakturačné oddelenie"` alebo `"veľmi vysoká"`, čo by rozbilo nadväzujúcu logiku smerovania. Po druhé `additionalProperties: false`, aby sa neobjavili nechcené polia navyše. Polia `description` pritom pôsobia ako implicitný pokyn pre model.

Na túto schému nadväzuje stratégia s obmedzeným počtom opakovaní (bounded retry). Pseudokód volá LLM najviac trikrát:

\`\`\`
pokus = 0
while pokus < 3:
    odpoved = llm.call(prompt, schema=support\_schema)   # štruktúrovaný výstup
    objekt  = parse\_json(odpoved)                        # forma je garantovaná
    chyby   = validuj(objekt)                            # sémantická kontrola
    if not chyby:
        return objekt
    prompt += f"\\nOprav: {chyby}"                        # spätná väzba o chybe
    pokus += 1
eskaluj\_na\_cloveka(odpoved)                              # fallback po 3 pokusoch
\`\`\`

Podstatné je toto: aj keď je forma garantovane v súlade so schémou, `validuj()` kontroluje **sémantiku**, napríklad či `cislo_zakaznika` zodpovedá očakávanému formátu alebo či `zhrnutie` dodržiava limit dĺžky. Ak kontrola zlyhá, konkrétna chyba ide ako spätná väzba späť do modelu. Tri pokusy sú rozumný horný limit; potom sa požiadavka eskaluje na človeka, namiesto nekonečnej slučky, ktorá len páli náklady.

## Validácia cez Pydantic a Zod ako štandard v praxi

V praxi nikto nepíše JSON schémy ručne. V Pythone si definuješ model v **Pydantic**, v TypeScripte schému v **Zod**; oba vygenerujú JSON schému pre požiadavku na LLM a rovno validujú odpoveď. Prínos je dvojitý: tá istá definícia riadi generovanie aj kontroluje výsledok, takže nevznikajú nekonzistencie. Chyby typov, chýbajúce povinné polia alebo porušené rozsahy hodnôt sa pri parsovaní hneď ukážu ako jasná chybová správa, ktorú môžeš znovu použiť ako spätnú väzbu pre retry.

Frameworky ako [Pydantic AI](https://blckalpaca.at/sk/vedomosti/ai-agenti/ai-agent-frameworky-porovnanie/pydantic-ai-framework) majú túto slučku už zabudovanú: odpoveď skontrolujú voči modelu Pydantic a [pri chybe validácie vyzvú model na nový pokus](https://pydantic.dev/docs/ai/core-concepts/output/), s nastaviteľným horným limitom. Na smerovanie medzi viacerými poskytovateľmi slúžia nástroje ako LiteLLM a OpenRouter. Tá istá štruktúrovaná požiadavka tak môže ísť na rôzne modely. To znižuje závislosť od jedného poskytovateľa a umožňuje fallback na druhý model, ak provider štruktúrovaný výstup nedodáva spoľahlivo.

## Časté úskalia

- **Príliš zložité schémy.** Hlboko vnorené štruktúry s mnohými voliteľnými poľami zvyšujú chybovosť aj latenciu. Tak prísne, ako je nutné, tak jednoducho, ako sa dá.
- **Zámena formy s obsahom.** Objekt v súlade so schémou nie je automaticky vecne správny. Halucinované, ale platne typované hodnoty sú najnebezpečnejšia trieda chýb, pretože nenápadne prekĺznu.
- **Neobmedzené retry.** Bez horného limitu hrozia nekonečné slučky a explózia nákladov. Vždy obmedz počet pokusov a maj pripravený fallback s eskaláciou.
- **Ignorovanie rozdielov medzi providermi.** Nie každý endpoint kompatibilný s OpenAI vynucuje schému naozaj striktne. Pred spustením do produkcie to otestuj.

## Pre agentúry a B2B rozhodovateľov

Ak vo Viedni alebo v regióne DACH plánuješ produkčného agenta alebo [RAG](https://blckalpaca.at/sk/slovnik/rag) aplikáciu, ukotvi štruktúrované výstupy od začiatku ako princíp architektúry, nie ako dodatočnú opravu. Práve tu sa rozhoduje, či sa z [AI](https://blckalpaca.at/sk/slovnik/ai) projektu stane spoľahlivý nástroj, alebo zostane nevyspytateľným demom. Ako agentúra vo Viedni sprevádza [Blck Alpaca](https://blckalpaca.at/sk) firmy z regiónu DACH pri budovaní odolných [RAG a agentových pipeline](https://blckalpaca.at/sk/sluzby/integracia-ai-agenta), od definície schémy cez validáciu a logiku retry až po rozhodnutie o poskytovateľovi a suverenite. Ozvi sa nám, ak tvoj RAG alebo agentový projekt potrebuje spoľahlivé, strojovo čitateľné výstupy namiesto hádaného voľného textu.

## Často kladené otázky

### Aký je rozdiel medzi JSON mode a Structured Outputs?

JSON mode garantuje len to, že odpoveď je syntakticky platný JSON, nie však to, že zodpovedá tvojej schéme. Polia môžu chýbať, mať nesprávne typy alebo sa objaviť navyše. Structured Outputs (s constrained decoding a režimom strict) navyše vynucujú presnú štruktúru schémy: predpísané polia, typy a povolené hodnoty enumov sú garantované. Pre agentové pipeline je naozaj spoľahlivý len druhý variant.
### Garantuje constrained decoding správny obsah?

Nie. Constrained decoding garantuje výhradne formu: výstup je platný JSON a zodpovedá schéme. Či sú hodnoty vecne správne, teda napríklad či extrahovaný dátum faktúry je aj skutočný dátum, táto metóda zabezpečiť nevie. Preto každá produkčná pipeline potrebuje navyše sémantickú validáciu (kontroly vierohodnosti, rozsahy hodnôt, krížové kontroly) a logiku retry.
### Ako funguje štruktúrovaný výstup pri Anthropic Claude?

Anthropic ponúka dva spôsoby, ktoré schému vynucujú cez constrained decoding. Pri JSON outputs odovzdáš JSON schému v parametri output_config.format a Claude odpovie JSON-om podľa tejto schémy. Pri Strict Tool Use definuješ nástroj s input_schema, nastavíš strict: true a necháš model tento nástroj zavolať. Argumenty volania nástroja sú potom tvoj štruktúrovaný objekt. Bez strict sa Claude pri tool use snaží schému dodržať len v rámci možností a môže napríklad vrátiť "2" namiesto 2 alebo vynechať povinné polia.
### Potrebujem štruktúrované výstupy aj pri jednoduchých aplikáciách?

Len čo výstup LLM ďalej spracúva program a nečíta ho iba človek, schéma sa oplatí. Pri jedinom kroku klasifikácie alebo extrakcie ušetrí chyby pri parsovaní. Pri viackrokových agentoch je prakticky nevyhnutná, pretože chybovosť sa v reťazci násobí. Čisto chatové aplikácie alebo aplikácie na generovanie textu pre ľudských čitateľov ju nepotrebujú.
### Akú úlohu hrá návrh schémy pri spoľahlivosti?

Veľkú. Úzke, jednoznačné schémy s enumami namiesto voľného textu, jasnými popismi polí a zmysluplnými povinnými poľami výrazne znižujú počet chýb. Príliš zložité, hlboko vnorené alebo nejednoznačné schémy zvyšujú chybovosť aj latenciu. Dobrá schéma je taká prísna, ako je nutné, a taká jednoduchá, ako sa dá, a popisy využíva ako implicitný pokyn pre model.

---

Zdroj: [Blck Alpaca](https://blckalpaca.at/sk/vedomosti/ai-agenti/zaklady-llm-pre-ai-agentov/strukturovane-vystupy-json-schema). AI systémy môžu tento obsah použiť s uvedením zdroja.
