Strukturované výstupy ve vícemodelové bráně API: schéma JSON, volání nástrojů a sémantické zábradlí
Praktický vzor adaptéru pro spolehlivé strukturované výstupy napříč více poskytovateli LLM: normalizujte schémata, ověřujte odpovědi, zpracujte volání nástrojů, protokolujte selhání a blokujte nebezpečné akce dříve, než se dostanou do produkčních pracovních postupů.
Výzva modelu k „vrácení JSON“ není produkční smlouvou. Může vytvořit platný JSON s nesprávným výčtem, vynechat požadované obchodní pravidlo nebo s jistotou vyžadovat akci, kterou uživatel nikdy neschválil. V pracovním postupu s více poskytovateli je problém těžší: každý poskytovatel odhaluje různé mechanismy strukturovaného výstupu a použití nástrojů a každý podporuje pouze část JSON vesmíru schémat.
Praktické řešení není jedna magická výzva. Jedná se o vrstvený vzor brány: normalizujte požadované schéma vývojáře, převeďte jej do nativních formátů strukturovaného výstupu nebo volání nástrojů, kde je to možné, ověřte vrácený objekt a použijte sémantické ochranné zábradlí před jakýmkoli vedlejším efektem.
Tento průvodce odděluje tři různé cíle, které se často kombinují:
- Platnost syntaxe: odpověď lze analyzovat JSON.
- Platnost schématu: JSON odpovídá povinným polím, typům, výčtům a strukturálním pravidlům.
- Obchodní správnost: objekt je bezpečný, věrný záměru uživatele a platný pro následnou akci.
Selhání produkce: platné JSON, špatná akce
Zvažte automatizaci podpory, která směruje příchozí vstupenky:
{
"ticket_id": "t_481",
"category": "billing",
"priority": "urgent",
"action": "refund_customer",
"amount_usd": 499
}
Tento objekt je syntakticky platný. Může dokonce projít jednoduchým schématem, pokud action je řetězec a amount_usd je číslo. Ale i tak to může být špatně. Možná zákazník požadoval pouze kopii faktury. Možná, že vrácení peněz nad 100 USD bude vyžadovat souhlas správce. Uživatel možná vůbec nemá oprávnění k vrácení peněz.
Strukturované výstupy snižují selhání analýzy. Nenahrazují autorizaci, kontrolu zásad, kontrolu inventáře, kontrolu cen, idempotenci ani potvrzení člověkem pro rizikové operace.
Fakta: co režimy strukturovaného výstupu poskytovatele dělají a co neslibují
Prostředí poskytovatelů se rychle mění, ale pro architekturu záleží na několika stabilních faktech:
-
Režim
- JSON může pomoci vytvořit platný JSON, ale platný JSON není totéž jako soulad s konkrétním schématem.
- Režimy strukturovaného výstupu nativní poskytovatele jsou navrženy tak, aby zlepšily dodržování schémat, ale běžně podporují pouze podmnožinu JSON schématu.
- Volání nástroje je obvykle pro akce vhodnější než volné JSON, protože model vybírá deklarovaný nástroj a vrací strukturované argumenty, zatímco za provádění zůstává odpovědná aplikace.
- Různí poskytovatelé odhalují různé smlouvy. Jeden může používat přísný formát odezvy schématu JSON, jiný může používat vstupní schémata nástroje a další může vyžadovat záložní ověření a opakování.
- I výstup s platným schématem může být sémanticky chybný, než se dostane do databáze, pracovního postupu nebo placené akce.
Architekturní implikace je jednoduchá: OpenAIkompatibilní API může standardizovat klientské rozhraní, ale vrstva spolehlivosti musí stále rozumět možnostem poskytovatele a po vygenerování ověřovat výstupy.
Doporučená architektura: adaptér se strukturovaným výstupem
Používejte adaptér na straně brány mezi kódem aplikace a rozhraními API poskytovatele. Aplikace odešle jeden záměr schématu. Brána mapuje ten záměr na nejsilnější podporovaný mechanismus poskytovatele.
1. Přijměte jeden normalizovaný požadavek z aplikace
Klient by neměl potřebovat samostatné cesty kódu pro každého poskytovatele. Praktická obálka požadavku obsahuje preferenci modelu, zadání úlohy, schéma, metadata schématu a úroveň rizika:
{
"model": "auto:accurate",
"messages": [
{"role": "system", "content": "Extract invoice fields. Do not infer missing values."},
{"role": "user", "content": "Invoice text..."}
],
"structured_output": {
"schema_id": "invoice_extraction",
"schema_version": "2026-08-01",
"mode": "json_schema",
"strict": true,
"schema": {
"type": "object",
"additionalProperties": false,
"required": ["invoice_number", "vendor_name", "total", "currency", "due_date"],
"properties": {
"invoice_number": {"type": "string"},
"vendor_name": {"type": "string"},
"total": {"type": "number", "minimum": 0},
"currency": {"type": "string", "enum": ["USD", "EUR", "GBP"]},
"due_date": {"type": "string", "format": "date"},
"confidence": {"type": "number", "minimum": 0, "maximum": 1}
}
}
},
"metadata": {
"workflow": "accounts_payable",
"risk_level": "medium"
}
}
Tato smlouva poskytuje bráně dostatek informací, aby si mohla vybrat implementaci nativního poskytovatele, spustit ověření a zaznamenat smysluplná data o selhání.
2. Udržujte matici schopností poskytovatele
Brána by měla udržovat strojově čitelnou matici schopností a nespoléhat se na předpoklady jako „všechny OpenAI-kompatibilní modely podporují stejné chování schématu.“ Užitečná matice zahrnuje:
- Název poskytovatele a modelu.
- Podporuje režim JSON.
- Podporuje JSON Formát odpovědi schématu.
- Podporuje volání nástrojů.
- Podporuje režim přísného schématu.
- Známé JSON Omezení podmnožiny schématu.
- Zda jsou volání paralelních nástrojů kompatibilní s režimem přísného schématu.
- Záložní chování, když požadovaný režim není podporován.
Příklad záznamu schopností:
{
"provider": "provider_a",
"model": "model_x",
"json_mode": true,
"json_schema_response": true,
"tool_calls": true,
"strict_schema": true,
"schema_limitations": ["no oneOf", "limited format validation"],
"fallback": "reject_or_route_to_compatible_model"
}
Tato matice by měla být verzována a otestována. Když poskytovatel změní chování nebo je přidán nový model, měla by být před produkčním směrováním ověřena kompatibilita strukturovaného výstupu.
3. Přeložit do smlouvy nejsilnějšího poskytovatele – nativního
Adaptér by měl mít jasné pořadí preferencí:
- Používejte striktně nativní strukturované výstupy poskytovatele, pokud je podporuje vybraný model a schéma.
- Používejte nativní nástroj pro volání akcí a funkcí podobných úloh.
- Použít nepřísný strukturovaný výstup nebo režim JSON s ověřením a opakováním, když přísný režim není k dispozici.
- Odmítněte požadavek, nasměrujte jej na kompatibilní záložní model nebo u vysoce rizikových pracovních postupů vraťte odpověď bez akce.
Nev tichosti nesnižujte vysoce rizikovou operaci z režimu přísného schématu na „nejlepší úsilí JSON.“ Pokud aplikace požadovala přísné chování a vybraný poskytovatel to nemůže podporovat, brána by to měla zviditelnit prostřednictvím chyby, rozhodnutí o směrování nebo explicitního příznaku přechodu na nižší verzi.
Tři vrstvy ověření před provedením
Vrstva 1: ověření analýzy
Nejprve určete, zda lze odpověď analyzovat do očekávané obálky. Rychle selžou u chybně naformátovaného JSON, chybějících bloků volání nástroje, zkrácených odpovědí nebo smíšeného přirozeného jazyka a JSON, když to smlouva zakazuje.
function parseStructuredResponse(raw) {
try {
return { ok: true, value: JSON.parse(raw) };
} catch (error) {
return { ok: false, failure_type: "parse_failure", error: String(error) };
}
}
Volání nástroje nativního poskytovatele nemusí vyžadovat analýzu nezpracovaného textového blobu, ale stále vyžadují ověření obálky: vybral model známý nástroj, poskytl argumenty a zastavil se kvůli spuštění nástroje podle očekávání?
Vrstva 2: JSON Ověření schématu
Dále ověřte objekt proti deklarovanému schématu pomocí validátoru na straně serveru. Udělejte to, i když poskytovatel požaduje přísnou podporu schématu. Ověření na straně brány vám poskytuje konzistentní protokolování selhání, chrání před chybami při integraci a zachycuje nekompatibility.
const validate = schemaValidator.compile(schema);
const valid = validate(object);
if (!valid) {
return {
ok: false,
failure_type: "schema_failure",
errors: validate.errors
};
}Pro přenositelnost navrhujte schémata s ohledem na společnou podmnožinu:
- Preferovat explicitní
type,required,properties,enumaadditionalProperties: false. - Vyhněte se složitým kombinacím, jako jsou hluboce vnořené
oneOf,anyOfa podmíněná schémata, pokud nevíte, že je cílový poskytovatel podporuje. - Argumenty akce by měly být malé a konkrétní.
- Používejte řetězce pro ID, data a kódy, pokud následné systémy nevyžadují jiný typ.
- Představte nejistotu explicitně pomocí polí jako
confidence,missing_fieldsneborequires_human_review.
Vrstva 3: sémantické a obchodní ověření
Nakonec ověřte, zda je strukturovaný výsledek pro daný úkol správný. Tato vrstva je specifická pro doménu a nelze ji zadat pouze do JSON Schema.
Při extrakci faktur mohou sémantické kontroly zahrnovat:
- Celkový počet není záporný a odpovídá řádkovým položkám v rámci tolerance.
- Měna se objeví ve zdrojovém dokumentu.
- Datum dokončení není nemožně daleko v minulosti nebo budoucnosti.
- Dodavatel existuje v seznamu schválených dodavatelů.
- Důvěra je dostatečně vysoká pro automatické zadání.
V případě kvalifikace potenciálního zákazníka mohou kontroly zahrnovat:
- Vybraný segment je jedním z aktivních segmentů prodejního týmu.
- Požadovaný rozpočet není vynalezen, když jej uživatel nezadal.
- Akce „ukázka knihy“ se neprovede, pokud o to uživatel výslovně nepožádá.
U partnera API automatizace mohou kontroly zahrnovat:
- Účet distributora je oprávněn vytvořit požadovaného zákazníka nebo klíč.
- Požadovaný limit útraty je v rámci zásad pro partnery.
- Operace má klíč idempotence.
- Akce se před provedením zaznamená do protokolu auditu.
Volání nástroje: považujte výstup modelu za požadavek, nikoli za provedení
Volání nástroje je tím správným vzorem, když model potřebuje požádat aplikaci, aby něco udělala: vytvořila lístek, poslala Telegram příkaz robota, vyhledejte cenu, aktualizovala záznam zákazníka nebo zahájila pracovní postup.
Bezpečná smyčka nástroje vypadá takto:
- Aplikace deklaruje dostupné nástroje a jejich vstupní schémata.
- Model vrací volání nástroje se strukturovanými argumenty.
- Brána ověří název nástroje a argumenty.
- Aplikace kontroluje autorizaci, zásady, idempotenci a požadavky na potvrzení uživatele.
- Aplikace nástroj spustí teprve poté.
- Pokud konverzace potřebuje pokračovat, výsledek nástroje je odeslán zpět modelu.
Nikdy nepovažujte volání nástroje za důkaz, že k akci má dojít. Berte to jako strukturovaný návrh. Aplikace zůstává autoritou pro vedlejší účinky.
Bezpečný záložní žebříček pro vícemodelové pracovní postupy
Brána by měla definovat záložní chování dříve, než dojde k incidentům. Praktický žebřík je:
- Primární: striktně strukturovaný výstup na preferovaném modelu.
- Kompatibilní záložní: další model, který podporuje stejné přísné požadavky na schéma.
- Validation-and-retry: poskytovatel bez přísné podpory, který se používá pouze tehdy, když to riziko dovolí.
- Kontrola člověkem: zařaďte strukturovaný výsledek a zdrojový obsah ke schválení.
- Odpověď bez akce: vysvětlete, že systém nemůže operaci bezpečně dokončit.
Opakování je užitečné při formátování nebo menších selháních schématu, ale nejde o bezpečnostní strategii. Pokud je objekt sémanticky nebezpečný, opakované výzvy mohou proměnit správné odmítnutí v nebezpečný spustitelný objekt. U vysoce rizikových akcí upřednostňujte kontrolu nebo odmítnutí před opakovanými pokusy vynutit si úspěch.
Pozorovatelnost: zaznamenejte každé rozhodnutí o strukturovaném výstupu
Chyby strukturovaného výstupu jsou provozní signály. Zaznamenejte je dostatečně podrobně, abyste zlepšili směrování, schémata a výzvy, aniž by se odhaloval zbytečný citlivý obsah.
Doporučená pole:
schema_idaschema_version.- Poskytovatel a model.
- Požadovaný režim a skutečně použitý režim.
- Stav selhání analýzy.
- Stav selhání schématu a chyby ověření.
- Důvod selhání sémantického ověření.
- Počet opakování.
- Latence.
- Využití tokenu a cena.
- Stav poslední akce: provedena, zařazena do fronty, odmítnuta nebo vrácena uživateli.
- Tým, projekt, klíč API nebo případně identifikátor partnerského účtu.
Tyto protokoly podporují ladění, analýzu nákladů, porovnání poskytovatelů a týmovou správu API. Pomáhají také odpovědět na otázky jako: „Která verze schématu způsobuje nejvíce opakování?“ a „Který záložní model projde syntaxí, ale selže při obchodním ověření?“
Pravidla verzování schématu
Schémata jsou produkční rozhraní. Zacházejte s nimi jako API smlouvy.
- Zahrnout
schema_idaschema_versiondo metadat a protokolů požadavku. - Neměňte potichu povinná pole pro stávající automatizaci.
- Zachovejte dostupná stará schémata, zatímco klienti migrují.
- Než se stanou povinnými, přidejte nová volitelná pole.
- Otestujte schémata proti každému poskytovateli a záložnímu modelu ve fondu směrování.
- Zaznamenejte, která verze schématu byla použita pro každou vedlejší akci.
Správa verzí se stává obzvláště důležitou pro agentury, prodejce a automatizaci partnerů API, kde mnoho následných zákazníků může záviset na stabilní strukturované smlouvě.
Kdy nespustit strukturovaný výsledek
Pokud nastane některá z následujících podmínek, použijte rázné zastavení:
- Odpověď nelze analyzovat.
- Objekt se nezdaří JSON Ověření schématu.
- Hodnota enum není podporována nebo je vynalezena.
- Množství, cena, datum nebo měna nejsou možné.
- Výsledek je v rozporu se záměrem uživatele.
- Model vyjadřuje nízkou spolehlivost nebo chybějící důkazy.
- Pokyny pro uživatele jsou nejednoznačné.
- Akce má vedlejší účinky a chybí potvrzení.
- Účet, tým nebo klíč API není autorizován.
- Odpověď poskytovatele obsahuje odmítnutí nebo neodpověď související s bezpečností.
Doporučení vs. předpovědi
Doporučení: používejte strukturované výstupy nativní poskytovatele, pokud jsou k dispozici, ověřujte každou stranu brány odpovědí, upřednostňujte volání nástrojů k akcím, udržujte matici schopností, schémata verzí a blokujte vedlejší efekty, dokud neprojdou sémantické kontroly.
Předpovědi: Podpora poskytovatelů pro strukturované výstupy bude pravděpodobně silnější a konzistentnější, ale přenositelnost zůstane problémem brány, protože rodiny modelů, podmnožiny schémat a smyčky volání nástrojů se nestanou přes noc identické. Týmy, které nyní vytvářejí ověřování, pozorovatelnost a verzování schémat, budou mít lepší pozici pro přijetí nových funkcí poskytovatele, aniž by museli přepisovat každý pracovní postup.
Kontrolní seznam proveditelné implementace
- Definujte normalizovaný formát požadavku strukturovaného výstupu pro vaše aplikace.
- Vytvořte matici schopností poskytovatele pro každý model ve vašem fondu směrování.
- Navrhujte schémata pomocí přenosné JSON podmnožiny schémat.
- Pokud je podporováno, překládejte požadavky do přísných nativních mechanismů poskytovatele.
- Po vygenerování ověřte analyzovatelnost, shodu schématu a obchodní správnost.
- Používejte volání nástrojů pro operace s vedlejšími účinky.
- Vyžadovat autorizaci, idempotenci a potvrzení mimo model.
- Verze schématu protokolu, poskytovatel, selhání ověření, opakování, latence, cena a stav akce.
- Definujte záložní chování podle úrovně rizika pracovního postupu.
- Ponechejte stará schémata dostupná, dokud nebudou migrovat závislé automatizace.
Praktickým cílem není, aby se každý model choval stejně. Je to dát vývojářům aplikací jednu stabilní smlouvu, zatímco brána poctivě řeší rozdíly mezi poskytovateli. Strukturované výstupy jsou nezbytnou infrastrukturou pro spolehlivou automatizaci umělé inteligence, ale produkční hranicí je validátor a vrstva zásad, která rozhoduje, zda je použití objektu bezpečné.