Skip to content
Vodnik in vpogled

Strukturirani izhodi v prehodu API-ja z več modeli: shema JSON, klici orodij in semantične zaščitne ograje

Praktičen vzorec adapterja za zanesljive strukturirane izhode pri več ponudnikih LLM: normalizirajte sheme, potrdite odzive, obravnavajte klice orodij, beležite napake in blokirajte nevarna dejanja, preden dosežejo delovne tokove proizvodnje.

Poziv modela, naj »vrne JSON«, ni produkcijska pogodba. Lahko ustvari veljaven JSON z napačnim enumom, izpusti zahtevano poslovno pravilo ali samozavestno zahteva dejanje, ki ga uporabnik ni nikoli odobril. V poteku dela z več ponudniki postane težava težja: vsak ponudnik izpostavi različne mehanizme strukturiranega izhoda in uporabe orodij in vsak podpira le del JSON vesolja sheme.

Praktična rešitev ni en čarobni poziv. Gre za večplastni vzorec prehoda: normalizirajte razvijalčevo želeno shemo, jo prevedite v ponudnikove izvorne formate strukturiranih izhodnih podatkov ali klicev orodij, kjer je to mogoče, potrdite vrnjeni objekt in uporabite semantične zaščitne ograje pred kakršnim koli stranskim učinkom.

Ta vodnik ločuje tri različne cilje, ki se pogosto mešajo:

  • Veljavnost sintakse: odgovor je razčlenljiv JSON.
  • Veljavnost sheme: JSON se ujema z zahtevanimi polji, tipi, enume in strukturnimi pravili.
  • Poslovna pravilnost: predmet je varen, zvest namenu uporabnika in veljaven za nadaljnje dejanje.

Napaka v proizvodnji: veljavno JSON, napačno dejanje

Razmislite o avtomatizaciji podpore, ki usmerja dohodne prijave:

{
  "ticket_id": "t_481",
  "category": "billing",
  "priority": "urgent",
  "action": "refund_customer",
  "amount_usd": 499
}

Ta predmet je sintaktično veljaven. Lahko celo prenese preprosto shemo, če je action niz in amount_usd število. Ampak še vedno je lahko narobe. Mogoče je stranka zahtevala le kopijo računa. Morda je za vračila nad 100 USD potrebna odobritev upravitelja. Morda uporabnik sploh ni pooblaščen za sprožitev vračil.

Strukturirani izhodi zmanjšajo napake pri razčlenjevanju. Ne nadomeščajo avtorizacije, preverjanj politik, preverjanj inventarja, preverjanj cen, idempotence ali človeške potrditve za tvegane operacije.

Dejstva: kaj načini strukturiranega izhoda ponudnika obljubljajo in kaj ne

Pokrajina ponudnika se hitro spreminja, vendar je za arhitekturo pomembnih več stabilnih dejstev:

    Način
  • JSON lahko pomaga ustvariti veljaven JSON, vendar veljaven JSON ni isto kot skladnost z določeno shemo.
  • Načini strukturiranega izhoda, ki izvirajo iz ponudnika, so zasnovani za izboljšanje skladnosti s shemo, vendar običajno podpirajo samo podnabor JSON sheme.
  • Klicanje orodij je običajno bolj primerno za dejanja kot prosta oblika JSON, ker model izbere deklarirano orodje in vrne strukturirane argumente, medtem ko aplikacija ostane odgovorna za izvedbo.
  • Različni ponudniki izpostavljajo različne pogodbe. Eden lahko uporablja strogo JSON obliko odziva sheme, drugi lahko uporablja sheme vnosa orodja, tretji pa lahko zahteva nadomestno preverjanje in ponovni poskus.
  • Tudi izhod, ki je veljaven za shemo, je lahko semantično napačen, preden doseže zbirko podatkov, potek dela ali plačano dejanje.

Arhitekturna implikacija je preprosta: OpenAI-združljiv API lahko standardizira vmesnik odjemalca, vendar mora raven zanesljivosti še vedno razumeti zmožnosti ponudnika in potrditi rezultate po ustvarjanju.

Priporočena arhitektura: vmesnik s strukturiranim izhodom

Uporabite vmesnik na strani prehoda med kodo aplikacije in API-ji ponudnika. Aplikacija pošlje eno namero sheme. Prehod preslika to namero v najmočnejši podprti mehanizem ponudnika.

1. Sprejmi eno normalizirano zahtevo iz aplikacije

Odjemalec ne bi smel potrebujeti ločenih kodnih poti za vsakega ponudnika. Praktična ovojnica zahteve vključuje prednost modela, vnos naloge, shemo, metapodatke sheme in stopnjo tveganja:

{
  "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"
  }
}

Ta pogodba daje prehodu dovolj informacij za izbiro implementacije, ki je izvirna od ponudnika, zagon preverjanja in beleženje pomembnih podatkov o napakah.

2. Ohranite matriko zmogljivosti ponudnika

Prehod mora ohraniti strojno berljivo matriko zmogljivosti, ne pa se zanašati na predpostavke, kot je »vsi OpenAIzdružljivi modeli podpirajo isto vedenje sheme«. Uporabna matrika vključuje:

  • Ime ponudnika in modela.
  • Podpira način JSON.
  • Podpira JSON obliko odgovora sheme.
  • Podpira klice orodij.
  • Podpira način stroge sheme.
  • Znane JSON Omejitve podnabora sheme.
  • Ali so vzporedni klici orodij združljivi z načinom stroge sheme.
  • Nadomestno vedenje, ko zahtevani način ni podprt.

Primer zapisa zmogljivosti:

{
  "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"
}

Ta matrika mora imeti različico in jo preizkusiti. Ko ponudnik spremeni vedenje ali je dodan nov model, je treba pred usmerjanjem proizvodnje preveriti združljivost strukturiranih izhodov.

3. Prevedi v najmočnejšo izvorno pogodbo ponudnika

Vmesnik mora upoštevati jasen prednostni vrstni red:

  1. Uporaba strogih izvornih strukturiranih izhodov ponudnika, če jih podpirata izbrani model in shema.
  2. Uporabite izvorno orodje ponudnika, ki kliče za dejanja in opravila, podobna funkcijam.
  3. Uporabite nestrogi strukturirani izhod ali JSON način s preverjanjem in ponovnimi poskusi, ko strogi način ni na voljo.
  4. Zavrnite zahtevo, usmerite na združljiv nadomestni model ali vrnite odgovor brez ukrepanja za poteke dela z visokim tveganjem.

Ne znižajte na tihem visoko tvegane operacije iz načina stroge sheme v »po najboljših močeh JSON«. Če je aplikacija zahtevala strogo vedenje in izbrani ponudnik tega ne more podpreti, bi moral prehod to prikazati prek napake, odločitve o usmerjanju ali izrecne zastavice za znižanje.

Tri plasti preverjanja pred izvedbo

Prva plast: preverjanje razčlenitve

Najprej ugotovite, ali je odgovor mogoče razčleniti v pričakovano ovojnico. Hitra napaka pri napačno oblikovanem JSON, manjkajočih blokih klicev orodij, okrnjenih odgovorih ali mešanem naravnem jeziku in JSON, kadar to prepoveduje pogodba.

function parseStructuredResponse(raw) {
  try {
    return { ok: true, value: JSON.parse(raw) };
  } catch (error) {
    return { ok: false, failure_type: "parse_failure", error: String(error) };
  }
}

Klici orodij, ki izvirajo iz ponudnika, morda ne bodo zahtevali razčlenjevanja grunde neobdelanega besedila, vendar še vedno zahtevajo preverjanje ovojnice: ali je model izbral znano orodje, ali je zagotovil argumente in ali se je ustavil za izvajanje orodja, kot je bilo pričakovano?

Sloj 2: JSON Preverjanje sheme

Nato preverite objekt glede na deklarirano shemo z uporabo validatorja na strani strežnika. To storite tudi, če ponudnik trdi, da podpira strogo shemo. Preverjanje na strani prehoda vam omogoča dosledno beleženje napak, ščiti pred napakami pri integraciji in ujame nezdružljivosti na nižji stopnji.

const validate = schemaValidator.compile(schema);
const valid = validate(object);

if (!valid) {
  return {
    ok: false,
    failure_type: "schema_failure",
    errors: validate.errors
  };
}

Za prenosljivost načrtujte sheme z upoštevanjem skupnega podnabora:

  • Raje izrecno type, required, properties, enum in additionalProperties: false.
  • Izogibajte se zapletenim kombinacijam, kot so globoko ugnezdene oneOf, anyOf in pogojne sheme, razen če veste, da jih ciljni ponudnik podpira.
  • Argumenti dejanj naj bodo majhni in konkretni.
  • Uporabite nize za ID-je, datume in kode, razen če nadaljnji sistemi zahtevajo drugo vrsto.
  • Izrecno predstavite negotovost s polji, kot so confidence, missing_fields ali requires_human_review.

3. plast: semantična in poslovna validacija

Nazadnje preverite, ali je strukturiran rezultat pravilen za nalogo. Ta sloj je specifičen za domeno in ga ni mogoče oddati samo JSON shemi.

Za ekstrakcijo računa lahko semantična preverjanja vključujejo:

  • Vsota je nenegativna in se ujema z vrstičnimi postavkami znotraj tolerance.
  • Valuta je prikazana v izvornem dokumentu.
  • Datum zapadlosti ni nemogoče daleč v preteklosti ali prihodnosti.
  • Dobavitelj je na odobrenem seznamu prodajalcev.
  • Zaupanje je dovolj visoko za samodejni vnos.

Za kvalifikacijo vodilnega moža lahko preverjanja vključujejo:

  • Izbrani segment je eden od aktivnih segmentov prodajne ekipe.
  • Zahtevani proračun ni izmišljen, če ga uporabnik ni zagotovil.
  • Dejanje »predstavitev knjige« se ne izvede, razen če uporabnik tega izrecno zahteva.

Za avtomatizacijo partnerja API lahko preverjanja vključujejo:

  • Račun preprodajalca je pooblaščen za ustvarjanje zahtevane stranke ali ključa.
  • Zahtevana omejitev porabe je v okviru pravilnika partnerja.
  • Operacija ima ključ idempotence.
  • Dejanje se pred izvedbo zabeleži v revizijski dnevnik.

Klici orodja: obravnavajte izhod modela kot zahtevo, ne kot izvedbo

Klicanje orodij je pravi vzorec, ko mora model od aplikacije zahtevati nekaj: ustvariti vstopnico, poslati Telegram ukaz bota, poiskati cene, posodobiti zapis stranke ali začeti potek dela.

Varna zanka orodja izgleda takole:

  1. Aplikacija navaja razpoložljiva orodja in njihove vnosne sheme.
  2. Model vrne klic orodja s strukturiranimi argumenti.
  3. Prehod preveri ime orodja in argumente.
  4. Aplikacija preveri avtorizacijo, pravilnik, idempotenco in zahteve za potrditev uporabnika.
  5. Šele nato aplikacija izvede orodje.
  6. Rezultat orodja se pošlje nazaj modelu, če se mora pogovor nadaljevati.

Klica orodja nikoli ne obravnavajte kot dokaz, da se mora dejanje zgoditi. Obravnavajte ga kot strukturiran predlog. Aplikacija ostaja avtoriteta za stranske učinke.

Varna nadomestna lestvica za poteke dela z več modeli

Prehod mora definirati nadomestno vedenje, preden pride do incidentov. Praktična lestev je:

  1. Primarni: strogo strukturiran izpis na želenem modelu.
  2. Združljiva nadomestna rešitev: drug model, ki podpira enake stroge zahteve sheme.
  3. Preverjanje in ponovni poskus: ponudnik brez stroge podpore, ki se uporablja samo, kadar tveganje to dopušča.
  4. Ročni pregled: postavite strukturiran rezultat in izvorno vsebino v čakalno vrsto za odobritev.
  5. Odziv brez ukrepanja: pojasnite, da sistem ne more varno dokončati operacije.

Ponovni poskusi so uporabni za formatiranje ali manjše napake v shemi, vendar niso varnostna strategija. Če objekt ni semantično varen, lahko ponavljajoče se pozivanje pravilno zavrnitev spremeni v nevaren izvedljiv objekt. Pri dejanjih z visokim tveganjem raje pregledajte ali zavrnite kot ponavljajoče se poskuse izsiljanja uspeha.

Opazljivost: zabeležite vsako odločitev o strukturiranem izhodu

Napake strukturiranih izhodov so signali delovanja. Zabeležite jih z dovolj podrobnostmi za izboljšanje usmerjanja, shem in pozivov brez izpostavljanja nepotrebne občutljive vsebine.

Priporočena polja:

  • schema_id in schema_version.
  • Ponudnik in model.
  • Zahtevani način in dejanski uporabljen način.
  • Status napake pri razčlenjevanju.
  • Status napake sheme in napake pri preverjanju.
  • Razlog za napako semantičnega preverjanja.
  • Število ponovnih poskusov.
  • Zakasnitev.
  • Uporaba žetona in stroški.
  • Stanje končnega dejanja: izvedeno, v čakalni vrsti, zavrnjeno ali vrnjeno uporabniku.
  • Ekipa, projekt, API ključ ali identifikator računa partnerja, kjer je primerno.

Ti dnevniki podpirajo odpravljanje napak, analizo stroškov, primerjavo ponudnikov in API upravljanje ekipe. Pomagajo tudi odgovoriti na vprašanja, kot je: "Katera različica sheme povzroča največ ponovnih poskusov?" in »Kateri nadomestni model prenese sintakso, vendar ne uspe preveriti poslovanja?«

Pravila za različico sheme

Sheme so produkcijski vmesniki. Obravnavajte jih kot API pogodbe.

  • Vključite schema_id in schema_version v metapodatke in dnevnike zahtev.
  • Ne spreminjajte tiho zahtevanih polj za obstoječe avtomatizacije.
  • Ohranite stare sheme na voljo med selitvijo strank.
  • Dodajte nova neobvezna polja, preden postanejo obvezna.
  • Preizkusite sheme glede na vsakega ponudnika in nadomestni model v usmerjevalni skupini.
  • Zabeležite, katera različica sheme je bila uporabljena za vsako dejanje s stranskim učinkom.

Različice postanejo še posebej pomembne za agencije, prodajne posrednike in avtomatizacijo partnerjev API, kjer so lahko številne stranke na nižji stopnji odvisne od stabilne strukturirane pogodbe.

Kdaj ne izvesti strukturiranega rezultata

Uporabite močno zaustavitev, ko se pojavi kateri koli od naslednjih pogojev:

  • Odgovora ni mogoče razčleniti.
  • Objekt ne uspe JSON Preverjanje sheme.
  • Vrednost enum ni podprta ali izmišljena.
  • Količina, cena, datum ali valuta ni mogoče navesti.
  • Rezultat je v nasprotju z uporabnikovim namenom.
  • Model izraža nizko zaupanje ali manjkajoče dokaze.
  • Uporabniško navodilo je dvoumno.
  • Dejanje ima stranske učinke in nima potrditve.
  • Ključ računa, ekipe ali API ni pooblaščen.
  • Odziv ponudnika vključuje zavrnitev ali neodgovor, povezan z varnostjo.

Priporočila v primerjavi z napovedmi

Priporočila: uporabite izvorne strukturirane izhode ponudnika, kjer so na voljo, preverite vsak odziv na strani prehoda, dajte prednost klicem orodij za dejanja, vzdržujte matriko zmogljivosti, sheme različic in blokirajte stranske učinke, dokler semantična preverjanja ne opravijo uspešno.

Predvidevanja: podpora ponudnika za strukturirane izhode bo verjetno postala močnejša in doslednejša, vendar bo prenosljivost ostala skrb prehoda, ker družine modelov, podnabori shem in klicne zanke orodij ne bodo čez noč postale enake. Ekipe, ki zdaj gradijo preverjanje veljavnosti, opazljivost in različice shem, bodo v boljšem položaju za sprejemanje novih funkcij ponudnika, ne da bi prepisale vsak potek dela.

Kontrolni seznam uporabne implementacije

  1. Določite normalizirano obliko zahteve strukturiranega izhoda za vaše aplikacije.
  2. Ustvarite matriko zmogljivosti ponudnika za vsak model v vaši usmerjevalni skupini.
  3. Načrtujte sheme z uporabo prenosne JSON podnabora shem.
  4. Prevedi zahteve v stroge mehanizme ponudnika, če so podprti.
  5. Preverite razčlenljivost, skladnost sheme in poslovno pravilnost po ustvarjanju.
  6. Uporabite klice orodij za stranske učinke.
  7. Zahtevaj avtorizacijo, idempotenco in potrditev zunaj modela.
  8. Različica sheme dnevnika, ponudnik, napake preverjanja, ponovni poskusi, zakasnitev, stroški in stanje dejanja.
  9. Določite nadomestno vedenje glede na stopnjo tveganja delovnega toka.
  10. Stare sheme naj bodo na voljo, dokler se odvisne avtomatizacije ne preselijo.

Praktični cilj ni zagotoviti, da bi se vsi modeli obnašali enako. Razvijalcem aplikacij daje eno stabilno pogodbo, medtem ko prehod pošteno obravnava razlike med ponudniki. Strukturirani izhodi so nujna infrastruktura za zanesljivo avtomatizacijo umetne inteligence, vendar je proizvodna meja validator in plast pravilnika, ki odločata, ali je predmet varen za uporabo.

Sorodno branje

FAQ

Pogosta vprašanja

Ali je način JSON dovolj za produkcijske strukturirane izhode?
Način JSON lahko zmanjša napake pri razčlenjevanju, vendar sam po sebi ne zagotavlja, da je odziv v skladu z vašo shemo ali poslovnimi pravili. Preden sprejmete rezultat, uporabite preverjanje sheme in semantično preverjanje.
Ali naj dejanja uporabljajo strukturirane odzive JSON ali klice orodij?
Kadar koli je to mogoče, uporabite pozive k dejanjem. Klic orodja daje aplikaciji strukturirano zahtevo za potrditev, avtorizacijo in izvedbo. Model ne sme neposredno izvajati stranskih učinkov.
Kaj naj naredi prehod, če ponudnik ne podpira strogo strukturiranih izhodov?
Usmeriti bi se moral na združljiv model, izrecno znižati le, če tveganje to dopušča, preveriti in poskusiti znova, če je primerno, ali poslati opravilo v človeški pregled. Šibkih omejitev JSON ne sme tiho obravnavati kot stroga jamstva sheme.
Zakaj je potrebna semantična validacija, če shema JSON prestane?
Shema JSON lahko preveri obliko, vrste, zahtevana polja in nekatere omejitve. Ne more zanesljivo ugotoviti, ali se predmet ujema z namenom uporabnika, politiko podjetja, avtorizacijskimi pravili, cenovnimi pravili ali izvedljivostjo v resničnem svetu.