Strukturovaný výstup z AI: JSON, tabulky a CSV bez chyb
Jak od AI spolehlivě získat platný JSON, tabulku nebo CSV. Prompty se schématem, validace v Pythonu a řešení nejčastějších problémů s formátem.
AI odpovídá přirozeně textem, ale často potřebujete data: JSON pro aplikaci, tabulku do Excelu, CSV pro import. Pokud formát nezadáte přesně, dostanete něco „skoro správně“ – a skoro správný JSON je nepoužitelný JSON.
Základní pravidla
- Řekněte přesný formát – ne „strukturovaně“, ale „jako JSON pole objektů“.
- Dejte schéma nebo příklad – názvy klíčů, typy hodnot.
- Určete, co dělat s chybějícími daty –
null, prázdný řetězec, vynechat? - Zakažte okolní text – „Vrať pouze JSON, bez vysvětlení.“
- Výstup vždy validujte – v kódu, ne očima.
JSON se schématem
Z textu níže vytáhni údaje o objednávce. Vrať pouze platný JSON
podle tohoto vzoru, bez dalšího textu:
{
"zakaznik": "string",
"email": "string nebo null",
"polozky": [
{"nazev": "string", "mnozstvi": number, "cena_kc": number}
],
"doprava": "string nebo null"
}
Pravidla:
- čísla jako čísla, ne řetězce (1250, ne "1 250 Kč"),
- chybějící údaj = null, nic nedomýšlej.
<text>
Dobrý den, objednávám 2× hrnek po 290 Kč a 1 konvici za 1 150 Kč.
Doručení Zásilkovnou. Petra Svobodová
</text>
Klíčové detaily: explicitní typy, převod „1 150 Kč“ na číslo a pravidlo pro chybějící e-mail.
Validace v Pythonu
Výstup AI vždy kontrolujte programově. Jednoduchá kontrola:
import json
raw = odpoved_ai.strip()
# AI někdy obalí JSON do bloku ```json ... ```
if raw.startswith("```"):
raw = raw.split("\n", 1)[1].rsplit("```", 1)[0]
try:
data = json.loads(raw)
except json.JSONDecodeError as e:
print(f"Neplatný JSON: {e}")
raise
Pro přísnější kontrolu struktury se hodí knihovna Pydantic (v2):
from pydantic import BaseModel
class Polozka(BaseModel):
nazev: str
mnozstvi: int
cena_kc: float
class Objednavka(BaseModel):
zakaznik: str
email: str | None
polozky: list[Polozka]
doprava: str | None
obj = Objednavka.model_validate_json(raw)
Pokud validace selže, pošlete chybovou hlášku zpět AI: „Tvůj JSON neprošel validací: [chyba]. Oprav ho.“
JSON přes API
Pokud voláte AI přes API kompatibilní s OpenAI (například ColdHost AI na https://coldhost-ai.cz/v1), můžete postup automatizovat:
from openai import OpenAI
client = OpenAI(base_url="https://coldhost-ai.cz/v1", api_key="VAS_API_KLIC")
resp = client.chat.completions.create(
model="coldhost-glacier",
messages=[
{"role": "system", "content": "Odpovídej pouze platným JSON podle zadaného vzoru."},
{"role": "user", "content": prompt},
],
)
raw = resp.choices[0].message.content
API klíč získáte v Nastavení → API. Klíč nikdy neukládejte přímo do kódu v repozitáři – načtěte ho z proměnné prostředí. Validaci výstupu i tak ponechte.
Tabulky v Markdownu
Pro čtení v chatu je ideální Markdown tabulka:
Porovnej tyto 3 notebooky v tabulce se sloupci:
Model | Procesor | RAM | Hmotnost | Výdrž baterie
Hodnoty, které v podkladech nejsou, označ "—".
Pod tabulku napiš max. 3 věty doporučení.
CSV pro Excel
U CSV pro český Excel pozor na oddělovač – česká lokalizace Excelu obvykle očekává středník, protože čárka je desetinný oddělovač:
Vrať data jako CSV:
- oddělovač středník (;),
- první řádek hlavička,
- desetinná čárka (12,50),
- text obsahující středník dej do uvozovek.
Bez dalšího textu.
Po uložení souboru zkontrolujte, že má každý řádek stejný počet sloupců:
awk -F';' '{print NF}' data.csv | sort | uniq -c
Pokud vidíte víc než jedno číslo, některý řádek je rozbitý (typicky kvůli neošetřenému středníku v textu). Tato jednoduchá kontrola nepočítá s uvozovkami – u složitějších dat použijte modul csv v Pythonu.
Nejčastější problémy
| Problém | Řešení |
|---|---|
| Text před/za JSON | „Vrať pouze JSON“ + odstranění ``` v kódu |
| Čísla jako řetězce | uveďte typ v schématu, příklad s číslem |
| Vymyšlené hodnoty | „chybějící údaj = null, nic nedomýšlej“ |
| Uříznutý dlouhý JSON | zpracovávejte data po menších dávkách |
| Nekonzistentní klíče | dejte přesný vzor, ideálně s příkladem |
| Komentáře v JSON | „JSON nesmí obsahovat komentáře“ |
Shrnutí
Strukturovaný výstup je o přesnosti: přesný formát, schéma, pravidla pro chybějící data a vždy validace v kódu. S tím vám AI spolehlivě převede volný text na data, se kterými můžete dál pracovat.