Structured Outputs vai JSON mode: derīgs JSON vēl negarantē pareizu shēmu

|Autors: QUASA redakcija|5 min lasīšanai| 2
Structured Outputs vai JSON mode: derīgs JSON vēl negarantē pareizu shēmu

Ja nākamais API integrācijas solis prasa noteiktus laukus un tipus, izvēlies Structured Outputs ar stingru shēmu. Ja vajadzīgs tikai parsējams JSON un lietotne pati pārbauda struktūru, var pietikt ar JSON mode. Saskaņā ar OpenAI skaidrojumu, JSON mode nodrošina derīgu JSON, bet negarantē atbilstību konkrētai shēmai.

Pat stingrai shēmai atbilstoša atbilde vēl nepasaka, vai dati ir pareizi. Teksta laukā var būt nepareizs pasūtījuma identifikators, bet skaitļa laukā — ievadei neatbilstoša summa. Tāpēc integrācijā jānodala trīs jautājumi: vai atbildi var parsēt, vai tās forma atbilst prasībām un vai vērtības ļauj droši izpildīt paredzēto darbību.

Derīgs JSON, pareiza shēma un pareizi dati

JSON sintakses pārbaude nosaka, vai tekstu var parsēt. Shēmas pārbaude salīdzina saņemto objektu ar prasītajiem lauku nosaukumiem, tipiem un citiem norādītajiem ierobežojumiem. Vērtību pārbaude salīdzina saturu ar uzticamu pasūtījuma ierakstu, sākotnējo ievadi vai uzņēmuma noteikumiem. Neviena no pirmajām divām pārbaudēm automātiski neveic trešo.

Nosacītā pasūtījumu sistēmā lauks id ir teksts, bet summa ir skaitlis. Atbilde {"id":17,"summa":"49"} ir derīgs JSON, taču abi tipi šai shēmai ir nepareizi. Atbilde {"id":"A17","summa":49} tipiem atbilst, tomēr tā jāsalīdzina ar pasūtījuma ierakstu: tur summa var būt cita. Šie objekti ir nosacīti piemēri, nevis izmērīti modeļa rezultāti.

Atbilstoši JSON Schema objektu noteikumiem, properties apraksta laukus, required nosaka obligātos laukus, bet additionalProperties var liegt neparedzētus laukus. Parasts JSON parsētājs šos nosacījumus nepārbauda; JSON mode atbildes saņēmējam tādēļ vajadzīga arī shēmas validācija. Validācijas kļūda ir atsevišķs apstrādājams iznākums, nevis iemesls pieņemt daļēji aizpildītu objektu.

Kas jānorāda pieprasījumā

JSON mode Chat Completions pieprasījumā izmanto response_format ar tipu json_object, bet Responses API — text.format ar to pašu tipu. Instrukcijā modelim arī skaidri jāpasaka veidot JSON. Pretējā gadījumā modelis var turpināt ģenerēt tukšumzīmes līdz tokenu limitam; API pārbauda, vai kontekstā vispār ir vārds JSON. Šī konfigurācija nosaka izvades sintaksi, nevis lauku struktūru.

Structured Outputs tiešai modeļa atbildei izmanto json_schema un strict: true: Chat Completions tas atrodas response_format, Responses API — text.format. Tiešai strukturētai atbildei OpenAI dokumentācija min gpt-4o-mini, gpt-4o-2024-08-06 un vēlākus saderīgus modeļus. Vecāks modelis, kam pieejams JSON mode, tāpēc nav automātiski saderīgs ar šo strukturētas atbildes iestatījumu.

Stingrais režīms pieņem tikai atbalstītu JSON Schema apakškopu. Objektiem vajadzīgs additionalProperties: false, visi definētie lauki jāiekļauj required, bet izvēles vērtību var izteikt, atļaujot null. Ja integrācijai nepieciešamu prasību šajā apakškopā nevar aprakstīt, tā jāpārbauda lietotnes kodā. Shēmas saderība jāvērtē kopā ar modeļa saderību: piemērots modelis nevar izpildīt shēmu, kuru API nepieņem.

Funkcijas izsaukums un atbildes izņēmumi

Ja modelis izsauc lietotnes funkciju, shēma apraksta funkcijas argumentus, nevis parastu atbildi lietotājam. Saskaņā ar OpenAI funkciju izsaukumu vadlīnijām, strict: true piespiež argumentu atbilstību shēmai, bet pieprasījumu ar stingrā režīma prasībām neatbilstošu shēmu API noraida. Ja strict netiek norādīts, noklusējuma darbība atšķiras starp API ceļiem, tāpēc to nevar uzskatīt par vienādu garantiju.

Atteikums drošības dēļ un pārtraukta ģenerēšana ir atsevišķi iznākumi, kas jāapstrādā pirms satura izmantošanas. Strukturētas izvades gadījumā atteikumu var noteikt pēc tam paredzētās atbildes pazīmes, savukārt nepabeigtu Responses atbildi norāda tās statuss un iemesls. Tikai pabeigtu satura atbildi apstrādā kā shēmas objektu; atteikumu vai pārtraukumu nedrīkst nodot nākamajai sistēmai kā trūkstošus laukus ar noklusējuma vērtībām. JSON mode atbildē pārtraukums turklāt var atstāt nepilnīgu, neparsējamu JSON.

Izvēles matrica integrācijai

Izšķirošais jautājums ir nākamā soļa prasības. Ja tas pats validē un apstrādā elastīgu objektu, sintakses garantija var būt pietiekama. Ja tas bez cilvēka iesaistes gaida noteiktus argumentus vai lauku tipus, stingra shēma pārceļ šo formāta prasību uz ģenerēšanas brīdi, tomēr atstāj lietotnei atbildes statusa un satura pārbaudi.

  • Shēmas stingrība. JSON mode izvēlies, ja struktūra var mainīties un lokālais validators spēj apstrādāt neatbilstību. Structured Outputs ar strict: true izvēlies, ja atbildes saņēmējs paļaujas uz noteiktajiem laukiem, tipiem un atļautajām vērtībām. Abos gadījumos jānosaka, ko darīt ar kļūdainu vērtību.
  • Modeļa un API saderība. Vispirms nosaki, vai vajadzīga tieša strukturēta atbilde vai funkcijas argumenti, un pārbaudi izvēlēto modeli attiecīgajam izsaukuma veidam. Ja stingrais režīms nav pieejams, JSON mode kopā ar lokālu shēmas validatoru ir izmantojama alternatīva. Atšķiras arī pieprasījuma parametri.
  • Atteikumi un pārtraukumi. Pirms parsēšanas nodali veiksmīgu, pabeigtu atbildi no atteikuma un nepabeigtas ģenerēšanas. JSON mode gadījumā pēc tam pārbaudi arī parsējamību un shēmu; Structured Outputs gadījumā pārliecinies, ka saņemts gaidītais strukturētais saturs.
  • Pēcapstrāde. JSON mode prasa parsēšanu, shēmas validāciju un nozīmīgo vērtību pārbaudi. Structured Outputs pabeigtai atbildei parasti neprasa labot formu, taču neatceļ salīdzinājumu ar datubāzi, biznesa noteikumus un lēmumu par kļūdas tālāku apstrādi.

Kur beidzas shēmas garantija

Shēmā var uzskaitīt atļautos statusus, taču tā pati nezina, kurš no tiem ir spēkā konkrētam pasūtījumam. Tā var prasīt skaitli, nezinot pareizo maksājuma summu. Ja ģenerētais objekts ierosina maksājumu vai maina ierakstu, izšķirošos laukus salīdzina ar sistēmas datiem pirms darbības. Šī ir lietotnes loģikas, nevis izvades formāta prasība.

JSONSchemaBench pētījums apkopo aptuveni 10 000 reālu JSON shēmu un ierobežotas ģenerēšanas sistēmas vērtē pēc efektivitātes, shēmu pārklājuma un izvades kvalitātes. Pētījumā salīdzinātās sistēmas un shēmas nav kontrolēts abu OpenAI režīmu salīdzinājums vienā integrācijā. Līdz ar to vispārīgs solījums par JSON Schema atbalstu vēl neatbild uz jautājumu, vai izvēlētais režīms pieņem tieši vajadzīgos ierobežojumus un dod lietojamas vērtības.

Lasiet arī:

Dalīties:

Abonējiet mūsu jaunumu vēstuli

Saņemiet jaunākās Web3, MI un kriptovalūtu ziņas tieši savā e-pastā.

0