
Struktureeritud AI-väljund: JSON kehtib alles siis, kui skeem peab

Keelemudeli struktureeritud väljundi jaoks määra JSON Schema, palu mudelil selle järgi vastata ja valideeri valmis vastus serveris sama skeemi vastu. Enne andmete kasutamist kontrolli teenuse vastusest eraldi, kas mudel keeldus ja kas genereerimine jõudis lõpuni. Seejärel parsi JSON ning anna väljad rakenduse loogikale üle ainult siis, kui skeemikontroll õnnestub.
Süntaktiliselt korrektne JSON võib sisaldada valet tüüpi, puuduvat välja või väärtust, mida rakendus ei tunne. OpenAI struktureeritud väljundi juhend eristab JSON-režiimi rangest skeemijärgsest väljundist: esimene ei taga skeemile vastavust, teine järgib toetatud JSON Schema alamhulka. Juhend käsitleb keeldumist ja pooleli jäänud vastust eraldi olukordadena; ranges režiimis peavad kõik kirjeldatud väljad olema nõutud.
Kirjelda skeemis rakenduse tegelik andmeleping
Alusta väljadest, mida järgmine programmiosa päriselt kasutab. Tinglikus pöördumise liigitamise näites vajab rakendus teemat, prioriteeti ja kokkuvõtet. Prioriteedile tasub määrata lubatud väärtuste loend, sest muidu võib mudel tagastada näiteks „kiire”, „kõrge” või „tähtis” ning rakendus peab nende tähenduse ise ära arvama.
Selle tingliku näite skeem on {"type":"object","properties":{"teema":{"type":"string"},"prioriteet":{"type":"string","enum":["madal","kõrge"]},"kokkuvõte":{"type":"string"}},"required":["teema","prioriteet","kokkuvõte"],"additionalProperties":false}. JSON Schema objektireeglid selgitavad, et properties üksi ei muuda välju kohustuslikuks ega keela lisavälju: selleks on vastavalt required ja additionalProperties. Skeemi saadetud kirjeldus ning serveri validaatoris kasutatav versioon peavad kattuma.
Objekt {"teema":"Arve","prioriteet":"kõrge","kokkuvõte":"Vajab kontrolli"} vastab näidisskeemile. Objekt {"teema":"Arve","prioriteet":"kohe"} on korrektne JSON, kuid kokkuvõte puudub ja prioriteedi väärtus ei kuulu lubatud loendisse. Sellist objekti ei tohi vaikimisi täiendada ega järgmisele teenusele saata: puuduvat kokkuvõtet ja tundmatut prioriteeti ei saa parsimise põhjal õigeks pidada.
Skeem kontrollib kuju ja lubatud väärtusi, mitte kokkuvõtte tõepärasust. Kui mudeli vastusest sõltub makse, ligipääsu muutmine või kirje uuendamine, kontrolli pärast skeemi läbimist eraldi, kas viidatud kirje on olemas, kas kasutajal on õigus toimingut teha ja kas tegevus sobib avatud töövoogu. Need otsused kuuluvad rakenduse reeglitesse.
Erista ranget skeemirežiimi tavalisest JSON-režiimist
Kui kasutatav teenus ja mudel pakuvad ranget skeemijärgset väljundit, anna skeem kaasa selleks ette nähtud API väljas. Kontrolli enne juurutamist, millist JSON Schema alamhulka teenus toetab; üldise JSON Schema validaatoriga sobiv skeem ei pruugi sobida mudeli väljundipiiranguks. Näidisskeem kasutab lihtsaid objekti-, stringi- ja loendireegleid, kuid isegi siis peab server vastuse ise vastu võtma või tagasi lükkama.
Tavaline JSON-režiim seab vormingule kitsama sihi. JSON.parse võib selle vastuse edukalt lugeda, kuigi nõutud väli puudub või prioriteet on väljaspool lubatud loendit. Vaba tekstina küsitud JSON vajab sama vastuvõtukontrolli. Teenuseadapter võib neid kolme viisi erinevalt seadistada, kuid rakendusse jõudev objekt peab läbima ühe selgelt määratletud lepingu.
Näited täpsustavad tähendust, validaator otsustab kuju
Skeem ütleb, millised väärtused on lubatud, ent ei pruugi anda mudelile piisavalt konteksti nende valimiseks. Claude’i promptimisjuhised soovitavad väljundi vormi ja järjepidevuse suunamiseks asjakohaseid ning erinevaid näiteid. Pöördumise liigitamisel võiks näidata tavalist sisendit ja piiripealset juhtumit, kus sõna „kiire” algtekstis ei tähenda automaatselt kõrget prioriteeti.
Hoia näidetes sisend ja oodatud JSON üheselt eristatavad. Kui algtekst ei anna kokkuvõtteks piisavalt teavet, määra andmelepingus, kuidas seda olukorda väljendada; tühi string ei tähenda iseenesest „teadmata”. Näide aitab mudelil valikureeglist aru saada, kuid ei tõenda, et järgmine vastus seda järgib. Seetõttu kontrollib server ka näidete abil koostatud väljundit.
Võta vastu ainult lõpetatud ja valideeritud vastus
Kontrollijada algab teenuse vastuse olekust, mitte tekstivälja esimesest looksulust. Kui mudel keeldub, käsitle keeldumist eraldi ja ära saada seda JSON-validaatorisse. Kui päring katkeb, väljundipiir saab täis või voogedastus pole lõppenud, ei ole kogunenud tekst veel kasutatav vastus. Ka näiliselt terviklik JSON-objekt ei anna enne lõpetamise kinnitust alust andmebaasikirjet luua.
Teenuseagnostiline JavaScripti laadne pseudokood kirjeldab vastuvõttu nii: const vastus = await küsiMudelilt(sisend, skeem); if (vastus.keeldumine) return kuvaKeeldumine(); if (!vastus.valmis) return kuvaAjutineViga(); let andmed; try { andmed = JSON.parse(vastus.tekst); } catch { return käsitleSkeemiviga(); } if (!valideeri(skeem, andmed)) return käsitleSkeemiviga(); if (!kontrolliÄrireegleid(andmed)) return kuvaKontrolliviga(); return kasutaRakenduses(andmed). Nimed tähistavad sinu adapteri ja rakenduse funktsioone, mitte ühe pakkuja tegelikke API välju.
Voogedastuse korral kogu tekst eraldi puhvrisse ning märgi vastus valmis alles teenuse lõpetamissignaali järel. Osalisi välju võib vajaduse korral näidata ajutise eelvaatena, kuid neid ei tohi samastada kinnitatud rakendusandmetega. See piir on eriti tähtis siis, kui väljundi põhjal käivitatakse tööriist või saadetakse andmed edasi: varajane käivitus võib toimuda enne, kui keeldumine, katkestus või skeemiviga selgub.
Piira parandamiskatset ja logi vea liik
Kui tekst ei parsitu või objekt ei vasta skeemile, võib rakendus teha ühe parandamiskatse sama skeemi ja lühikese valideerimisveaga. Üks katse on siin teadlik ülempiir, mitte teenuse lubatud tulemus: kui ka uus vastus ei sobi, lõpeta kontrollitud veaga. Nii ei jää päring määramatult korduma ega peida püsivat viga promptis või skeemis. Keeldumine on eraldi vastuseolek, mitte vormistusviga, mida parandamispromptiga ümber mängida.
Logi katsete jaoks päringu tunnus, skeemi versioon, teenuse lõpetamisolek ja valideerimisvea liik. Kui tõrge kordub pärast skeemimuudatust, aitavad need andmed eristada lepingu muutust juhuslikust vigasest vastusest. Kasutaja sisendi või mudeli toorvastuse salvestamine sõltub sinu andmekäitlusreeglitest; vealiigi uurimiseks piisab sageli tehnilisest olekust ja vigaste väljade nimedest. Kasutajale anna selge, kuid sisemist teksti mitte paljastav teade, näiteks „Vastust ei saanud praegu töödelda. Proovi uuesti.”
Loe ka:
Seotud artiklid


n8n või Make: pika AI-töövoo hind sõltub loendurist, mitte paketist

Nägemisillusioon paljastas arvutinägemise puuduse, mida täpsus ei näita

EL valis kümme AI-idu finalistiks, kuid võitja selgub alles novembris

Lao AI-agent saab viis võimutaset: tegutsemisõigus ei tule vaikimisi

Reflectioni Beam lubab 501 miljardit parameetrit, kuid kaale veel ei avaldatud
Telli meie uudiskiri
Saa värskeimad Web3, AI ja krüptouudised otse oma postkasti.