Juhend ja ülevaade

Struktureeritud väljundid mitme mudeli API-lüüsis: JSON-skeem, tööriistakutsed ja semantilised kaitsepiirded

Praktiline adaptermuster usaldusväärsete struktureeritud väljundite jaoks mitme LLM-i pakkuja vahel: normaliseerige skeeme, kinnitage vastuseid, käsitlege tööriistakutseid, logige tõrkeid ja blokeerige ebaturvalised toimingud enne, kui need jõuavad tootmistöövoogudesse.

Mudelil JSON-i tagastamise küsimine ei ole tootmisleping. See võib luua kehtiva JSON-i vale loendiga, jätta välja nõutud ärireeglid või nõuda enesekindlalt toimingut, mida kasutaja pole kunagi volitanud. Mitme teenusepakkujaga töövoo korral muutub probleem raskemaks: iga pakkuja paljastab erinevad struktureeritud väljundi ja tööriistade kasutamise mehhanismid ning igaüks toetab ainult osa JSON-i skeemi universumist.

Praktiline lahendus ei ole üks võluviip. See on kihiline lüüsi muster: normaliseerige arendaja soovitud skeem, tõlkige see võimaluse korral pakkuja struktureeritud väljundi või tööriistakõne vormingutesse, kinnitage tagastatud objekt ja rakendage enne kõrvalmõjusid semantilisi kaitsepiirdeid.

Selles juhendis eraldatakse kolm erinevat eesmärki, mida sageli segatakse:

  • Süntaksi kehtivus: vastus on sõelutav JSON.
  • Skeemi kehtivus: JSON vastab nõutavatele väljadele, tüüpidele, loenditele ja struktuurireeglitele.
  • Äritegevuse korrektsus: objekt on turvaline, kasutaja kavatsustele truu ja alljärgneva toimingu jaoks kehtiv.

Tootmistõrge: kehtiv JSON, vale toiming

Kaaluge tugiautomaatikat, mis suunab sissetulevad piletid:

kood>{ "pileti_id": "t_481", "kategooria": "arveldamine", "priority": "kiireloomuline", "action": "refund_customer", "summa_usd": 499 }

See objekt on süntaktiliselt kehtiv. See võib läbida isegi lihtsa skeemi, kui action on string ja amount_usd on arv. Kuid see võib ikkagi olla vale. Võib-olla küsis klient ainult arve koopiat. Võib-olla nõuavad üle 100 dollari suurused tagasimaksed halduri nõusolekut. Võib-olla pole kasutajal üldse volitust tagasimakseid käivitada.

Struktureeritud väljundid vähendavad parsimise tõrkeid. Need ei asenda volitusi, poliitikakontrolle, varude kontrolli, hinnakujunduse kontrolli, idempotentsust ega inimese kinnitust riskantsete toimingute puhul.

Faktid: mida pakkuja struktureeritud väljundrežiimid lubavad ja mida mitte

Pakkuja maastik muutub kiiresti, kuid arhitektuuri jaoks on olulised mitmed stabiilsed faktid:

  • JSON-režiim võib aidata toota kehtivat JSON-i, kuid kehtiv JSON ei ole sama, mis vastavus konkreetsele skeemile.
  • Pakkuja struktureeritud väljundrežiimid on loodud skeemi järgimise parandamiseks, kuid tavaliselt toetavad need ainult JSON-skeemi alamhulka.
  • Tööriistakutse sobib tavaliselt toimingute jaoks paremini kui vabas vormis JSON, kuna mudel valib deklareeritud tööriista ja tagastab struktureeritud argumendid, samas kui rakendus vastutab täitmise eest.
  • Erinevad pakkujad avaldavad erinevaid lepinguid. Üks võib kasutada ranget JSON-skeemi vastusevormingut, teine ​​võib kasutada tööriista sisestusskeeme ja teine ​​võib nõuda valideerimise ja uuesti proovimise tagavaravormingut.
  • Isegi skeemi kehtiv väljund võib olla semantiliselt vale, enne kui see jõuab andmebaasi, töövoogu või tasulise toiminguni.

Arhitektuurne tähendus on lihtne: OpenAI-ga ühilduv API võib kliendiliidese standardida, kuid usaldusväärsuse kiht peab siiski mõistma teenusepakkuja võimalusi ja kinnitama väljundid pärast genereerimist.

Soovitatav arhitektuur: struktureeritud väljundi adapter

Kasutage rakenduse koodi ja pakkuja API-de vahel lüüsipoolset adapterit. Rakendus saadab ühe skeemi kavatsuse. Lüüs kaardistab, mis kavatseb kasutada tugevaimat toetatud pakkuja mehhanismi.

1. Nõustuge ühe normaliseeritud taotlusega rakendusest

Klient ei peaks vajama iga teenusepakkuja jaoks eraldi kooditeid. Praktiline päringu ümbrik sisaldab mudeli eelistust, ülesande sisendit, skeemi, skeemi metaandmeid ja riskitaset.

kood>{ "mudel": "automaatne: täpne", "sõnumid": [ {"role": "system", "content": "Arve väljade ekstraktimine. Ärge järeldage puuduvaid väärtusi."}, {"role": "user", "content": "Arve tekst..."} ], "struktureeritud_väljund": { "schema_id": "arve_väljavõte", "schema_version": "2026-08-01", "mode": "json_schema", "range": tõsi, "skeem": { "tüüp": "objekt", "additionalProperties": vale, "required": ["arve_number", "hankija_nimi", "kokku", "valuuta", "tähtaeg"], "omadused": { "invoice_number": {"type": "string"}, "vendor_name": {"type": "string"}, "kokku": {"tüüp": "arv", "minimaalne": 0}, "currency": {"type": "string", "enum": ["USD", "EUR", "GBP"]}, "due_date": {"type": "string", "format": "date"}, "kindlus": {"tüüp": "arv", "minimaalne": 0, "maksimaalne": 1} } } }, "metaandmed": { "töövoog": "accounts_payable", "riskitase": "keskmine" } }

See leping annab lüüsile piisavalt teavet, et valida pakkuja omarakendus, käitada valideerimist ja logida olulisi tõrkeandmeid.

2. Säilitage pakkuja võimete maatriks

Lüüs peaks säilitama masinloetava maatriksi, mitte tuginema sellistele eeldustele nagu "kõik OpenAI-ga ühilduvad mudelid toetavad sama skeemi käitumist". Kasulik maatriks sisaldab:

  • Pakkuja ja mudeli nimi.
  • Toetab JSON-režiimi.
  • Toetab JSON-skeemi vastuse vormingut.
  • Toetab tööriistakutseid.
  • Toetab ranget skeemirežiimi.
  • Teadaolevad JSON-skeemi alamhulga piirangud.
  • Kas paralleelsed tööriistakutsed ühilduvad range skeemirežiimiga.
  • Tagavarakäitumine, kui taotletud režiimi ei toetata.

Võitekirje näide:

kood>{ "provider": "provider_a", "mudel": "mudel_x", "json_mode": tõsi, "json_schema_response": tõsi, "tool_calls": tõsi, "strict_schema": tõsi, "schema_limitations": ["no oneOf", "limited format validation"], "varu": "reject_or_route_to_compliant_model" }

Seda maatriksit tuleks versioonida ja testida. Kui pakkuja muudab käitumist või lisatakse uus mudel, tuleks enne tootmise marsruutimist kontrollida struktureeritud väljundi ühilduvust.

3. Tõlgi tugevaimale pakkuja-omaleping

Adapter peaks järgima selget eelistuste järjekorda:

  1. Kui valitud mudel ja skeem seda toetavad, kasutage rangeid pakkuja struktureeritud väljundeid.
  2. Kasutage teenusepakkuja natiivset tööriista, mis kutsub toiminguid ja funktsioonitaolisi ülesandeid.
  3. Kasutage mitteranget struktureeritud väljundit või JSON-režiimi koos valideerimisega ja proovige uuesti, kui range režiim pole saadaval.
  4. Kõrge riskiga töövoogude puhul lükake taotlus tagasi, suunake ühilduva varumudeli juurde või tagastage mittetoimiv vastus.

Ärge viige kõrge riskiga toimingut vaikselt alla rangelt skeemirežiimilt „parima jõupingutusega JSON-ile”. Kui rakendus taotles ranget käitumist ja valitud teenusepakkuja ei saa seda toetada, peaks lüüs selle vea, marsruudiotsuse või selgesõnalise madalama versiooni lipu kaudu nähtavaks tegema.

Kolm valideerimiskihti enne käivitamist

1. kiht: sõelumise valideerimine

Esmalt tehke kindlaks, kas vastust saab sõeluda oodatud ümbrikusse. Kui leping seda keelab, ebaõnnestub kiiresti vigase JSON-i, puuduvate tööriistakutseplokkide, kärbitud vastuste või loomuliku keele ja JSON-i segamise korral.

function parseStructuredResponse(raw) {
  proovi {
    return { ok: tõsi, väärtus: JSON.parse(raw)};
  } püüdmine (viga) {
    return { ok: false, error_type: "parse_failure", error: String(error)};
  }
}

Pakkuja natiivsed tööriistakutsed ei pruugi nõuda toortekstiploki sõelumist, kuid need nõuavad siiski ümbriku valideerimist: kas mudel valis teadaoleva tööriista, kas see pakkus argumente ja kas see peatus tööriista täitmiseks ootuspäraselt?

2. kiht: JSON-skeemi valideerimine

Järgmisena kinnitage objekt serveripoolse validaatori abil deklareeritud skeemi alusel. Tehke seda isegi siis, kui pakkuja nõuab ranget skeemi tuge. Lüüsipoolne valideerimine annab teile järjepideva tõrgete logimise, kaitseb integreerimisvigade eest ja tuvastab allavoolu kokkusobimatused.

const validate = schemaValidator.comile(schema);
const valid = valide(objekt);
if (!kehtiv) {
  return {
    ok: vale,
    error_type: "schema_failure",
    vead: valide.errors
  };
}

Kaasaskantavuse huvides kujundage skeemid ühist alamhulka silmas pidades:

  • Eelistage selgesõnalist tüüpi, nõutavat, atribuudid, enum ja additionalProperties: false.
  • Vältige keerulisi kombinatsioone, nagu sügavalt pesastatud oneOf, anyOf ja tingimuslikud skeemid, kui te ei tea, et sihtpakkuja neid toetab.
  • Hoidke tegevuse argumendid väikesed ja konkreetsed.
  • Kasutage ID-de, kuupäevade ja koodide jaoks stringe, välja arvatud juhul, kui allsüsteemid nõuavad teist tüüpi.
  • Esitage ebakindlus selgesõnaliselt selliste väljadega nagu usaldus, missing_fields või requires_human_review.

3. kiht: semantiline ja äriline valideerimine

Lõpuks kontrollige, kas struktureeritud tulemus on ülesande jaoks õige. See kiht on domeenispetsiifiline ja seda ei saa tellida ainult JSON-skeemile.

Arve väljavõtmiseks võivad semantilised kontrollid hõlmata järgmist.

  • Kokkusumma ei ole negatiivne ja vastab reaüksustele tolerantsi piires.
  • Valuuta kuvatakse lähtedokumendis.
  • Tähtaeg ei ole võimatult kauges minevikus ega tulevikus.
  • Teenusepakkuja on kinnitatud hankijate loendis.
  • Usaldus on automaatseks sisestamiseks piisavalt kõrge.

Müügivihje kvalifikatsiooni kontrollimine võib hõlmata järgmist.

  • Valitud segment on üks müügimeeskonna aktiivsetest segmentidest.
  • Taotletud eelarvet ei leiutatud, kui kasutaja seda ei esitanud.
  • Toimingut „raamatu demo” ei teostata, välja arvatud juhul, kui kasutaja seda selgesõnaliselt palub.

Partner API automatiseerimise puhul võivad kontrollid hõlmata järgmist.

  • Edasimüüja kontol on õigus luua soovitud klient või võti.
  • Taotletud kululimiit on partneri eeskirjadega kooskõlas.
  • Tehtesel on idempotentsuse võti.
  • Toiming salvestatakse enne täitmist auditilogi.

Tööriistakutsed: käsitlege mudeli väljundit päringu, mitte täitmisena

Tööriista kutsumine on õige muster, kui mudel peab paluma rakendusel midagi teha: luua pilet, saata Telegrami robotkäsk, otsida hinnakujundust, värskendada kliendikirjet või alustada töövoogu.

Turvaline tööriistasilmus näeb välja selline:

  1. Rakendus deklareerib saadaolevad tööriistad ja nende sisestusskeemid.
  2. Mudel tagastab struktureeritud argumentidega tööriistakutse.
  3. Lüüs kinnitab tööriista nime ja argumendid.
  4. Rakendus kontrollib autoriseerimist, eeskirju, idempotentsust ja kasutaja kinnitusnõudeid.
  5. Alles seejärel käivitab rakendus tööriista.
  6. Tööriista tulemus saadetakse mudelile tagasi, kui vestlust on vaja jätkata.

Ärge käsitlege tööriistakutset kunagi tõendina, et toiming peaks toimuma. Käsitle seda struktureeritud ettepanekuna. Rakendus jääb kõrvalmõjude eest vastutavaks.

Ohutu tagavararedel mitme mudeliga töövoogude jaoks

Lüüs peaks enne vahejuhtumite tekkimist määratlema varukäitumise. Praktiline redel on:

  1. Esmane: eelistatud mudeli range struktureeritud väljund.
  2. Ühilduv varu: teine mudel, mis toetab samu rangeid skeeminõudeid.
  3. Kinnitamine ja uuesti proovimine: ilma range toeta pakkuja, mida kasutatakse ainult siis, kui risk seda võimaldab.
  4. Inimese läbivaatamine: seadke struktureeritud tulemus ja lähtesisu kinnitamiseks järjekorda.
  5. Mittetegevuse vastus: selgitage, et süsteem ei saa toimingut ohutult lõpule viia.

Korduskatsed on kasulikud vormindamise või väiksemate skeemitõrgete korral, kuid need ei ole ohutusstrateegia. Kui objekt on semantiliselt ohutu, võib korduv viip muuta õige tagasilükkamise ohtlikuks käivitatavaks objektiks. Kõrge riskiga toimingute puhul eelistage läbivaatamist või keeldumist korduvatele edu saavutamise katsetele.

Vaatlus: logige kõik struktureeritud väljundi otsused

Struktureeritud väljundi tõrked on töösignaalid. Logige need piisavalt üksikasjalikult, et parandada marsruutimist, skeeme ja viipasid ilma tarbetut tundlikku sisu paljastamata.

Soovitatud väljad:

  • schema_id ja schema_version.
  • Pakkuja ja mudel.
  • Kasutatud on taotletud režiim ja tegelik režiim.
  • Parsimise ebaõnnestumise olek.
  • Skeemi tõrke olek ja valideerimisvead.
  • Semantilise valideerimise ebaõnnestumise põhjus.
  • Proovi loendamist uuesti.
  • Laitentsus.
  • Tokenide kasutamine ja hind.
  • Lõpliku toimingu olek: teostatud, järjekorda pandud, tagasi lükatud või kasutajale tagastatud.
  • Meeskonna, projekti, API-võtme või partneri konto identifikaator, kui see on asjakohane.

Need logid toetavad silumist, kulude analüüsi, pakkujate võrdlust ja meeskonna API juhtimist. Samuti aitavad need vastata küsimustele, nagu: „Milline skeemi versioon põhjustab kõige rohkem kordusi?” ja „Milline varumudel läbib süntaksi, kuid ei suuda ettevõtte valideerimist?”

Skeemi versioonide loomise reeglid

Skeemid on tootmisliidesed. Kohtle neid nagu API lepinguid.

  • Kaasake päringu metaandmetesse ja logidesse schema_id ja schema_version.
  • Ärge muutke vaikselt olemasolevate automatiseeringute kohustuslikke välju.
  • Hoidke vanad skeemid klientide migratsiooni ajal kättesaadavana.
  • Enne kohustuslikuks muutmist lisage uued valikulised väljad.
  • Testige skeeme kõigi marsruutimiskogumi pakkujate ja varumudelitega.
  • Salvestage, millist skeemi versiooni iga kõrvalmõjuga toimingu jaoks kasutati.

Versioonide loomine muutub eriti oluliseks agentuuride, edasimüüjate ja Partner API automatiseerimise jaoks, kus paljud alljärgnevad kliendid võivad sõltuda stabiilsest struktureeritud lepingust.

Millal struktureeritud tulemust mitte käivitada

Kasutage pidurdamist, kui ilmneb mõni järgmistest tingimustest:

  • Vastus ei ole sõelutav.
  • Objekti JSON-skeemi valideerimine ebaõnnestub.
  • Enumi väärtust ei toetata või see on leiutatud.
  • Kogus, hind, kuupäev või valuuta on võimatu.
  • Tulemus on vastuolus kasutaja väljendatud kavatsusega.
  • Mudel väljendab madalat usaldust või puuduvad tõendid.
  • Kasutajajuhised on mitmetähenduslikud.
  • Toimingul on kõrvalmõjud ja sellel puudub kinnitus.
  • Konto, meeskonna või API võti pole volitatud.
  • Pakkuja vastus sisaldab keeldumist või ohutusega seotud mittevastust.

Soovitused vs ennustused

Soovitused: kasutage teenusepakkuja struktureeritud väljundeid, kui need on saadaval, kinnitage kõik vastuse lüüsi pooled, eelistage tööriistakutseid toiminguteks, säilitage võimete maatriks, versiooniskeemid ja blokeerige kõrvalmõjud, kuni semantilised kontrollid läbivad.

Prognoosid: pakkuja tugi struktureeritud väljunditele muutub tõenäoliselt tugevamaks ja järjepidevamaks, kuid teisaldatavus jääb lüüsiprobleemiks, sest mudelipered, skeemi alamhulgad ja tööriistakutsungid ei muutu üleöö identseks. Meeskonnad, kes loovad praegu valideerimise, vaadeldavuse ja skeemi versioonide loomise, saavad paremini kasutusele võtta uusi teenusepakkuja funktsioone ilma iga töövoogu ümber kirjutamata.

Teostatav rakendamise kontroll-loend

  1. Määratlege oma rakenduste jaoks normaliseeritud struktureeritud väljundi päringu vorming.
  2. Looge oma marsruutimiskogumi iga mudeli jaoks pakkuja võimete maatriks.
  3. Kujundage skeeme kaasaskantava JSON-skeemi alamhulga abil.
  4. Tõlgige taotlused rangetele pakkuja-põhimehhanismidele, kui seda toetatakse.
  5. Kinnitage sõelutavust, skeemi vastavust ja äritegevuse korrektsust pärast genereerimist.
  6. Kasutage kõrvalmõjuga toimingute jaoks tööriistakutseid.
  7. Nõuge volitust, idempotentsust ja kinnitust väljaspool mudelit.
  8. Logi skeemi versioon, pakkuja, valideerimise tõrked, korduskatsed, latentsusaeg, kulu ja toimingu olek.
  9. Määratlege varukäitumine töövoo riskitaseme järgi.
  10. Hoidke vanad skeemid kättesaadavana kuni sõltuvate automatiseeringute migreerumiseni.

Praktiline eesmärk ei ole panna iga mudelit identselt käituma. Selle eesmärk on anda rakenduste arendajatele üks stabiilne leping, samal ajal kui lüüs käsitleb pakkujate erinevusi ausalt. Struktureeritud väljundid on usaldusväärseks tehisintellekti automatiseerimiseks vajalik infrastruktuur, kuid tootmispiiriks on valideerija ja poliitikakiht, mis otsustab, kas objekti on ohutu kasutada.

Seotud lugemine

FAQ

Korduma kippuvad küsimused

Kas JSON-režiimist piisab tootmise struktureeritud väljundite jaoks?
JSON-režiim võib vähendada parsimise tõrkeid, kuid see ei garanteeri iseenesest, et vastus vastab teie skeemile või ärireeglitele. Enne tulemuse aktsepteerimist kasutage skeemi valideerimist ja semantilist valideerimist.
Kas toimingud peaksid kasutama struktureeritud JSON-i vastuseid või tööriistakutseid?
Kasutage võimaluse korral tööriistakutseid toiminguteks. Tööriistakutse annab rakendusele struktureeritud päringu valideerimiseks, autoriseerimiseks ja täitmiseks. Mudel ei tohiks otseselt tekitada kõrvalmõjusid.
Mida peaks lüüs tegema, kui pakkuja ei toeta rangelt struktureeritud väljundeid?
See peaks suunama ühilduva mudeli, alandama selgesõnaliselt ainult siis, kui risk seda lubab, kinnitama ja vajadusel uuesti proovima või saatma ülesande inimesele ülevaatamiseks. See ei tohiks vaikselt käsitleda nõrku JSON-i piiranguid rangete skeemitagatistena.
Miks on vaja semantilist valideerimist, kui JSON-skeem läbib?
JSON-skeem saab kontrollida kuju, tüüpe, kohustuslikke välju ja mõningaid piiranguid. See ei saa usaldusväärselt kindlaks teha, kas objekt vastab kasutaja kavatsusele, ettevõtte poliitikale, autoriseerimisreeglitele, hinnakujundusreeglitele või reaalsele teostatavusele.