Ngenalake Structured Outputs ing API
Kita ngenalake Structured Outputs ing API—keluaran model saiki bisa manut kanthi andal marang JSON Schema sing diwenehake pangembang.

Tahun kepungkur ing DevDay, kita ngenalake mode JSON—blok dhasar sing migunani kanggo para pangembang sing pengin mbangun aplikasi sing andal nganggo model kita. Sanajan mode JSON ningkatake reliabilitas model kanggo ngasilake output JSON sing valid, mode iki ora njamin manawa tanggapan model bakal manut marang skema tartamtu. Dina iki kita ngenalake Structured Outputs ing API, fitur anyar sing dirancang kanggo njamin output sing digawe model bakal pas cocog karo JSON Schema sing diwenehake para pangembang.
Ngasilake data terstruktur saka input sing ora terstruktur iku salah siji kasus panggunaan inti kanggo AI ing aplikasi jaman saiki. Para pangembang nggunakaké OpenAI API kanggo mbangun assistant sing kuwat sing nduwèni kemampuan njupuk data lan njawab pitakon liwat nelpon fungsi(mbukak ing jendhela anyar), ngekstrak data terstruktur kanggo entri data, lan mbangun alur kerja agen multilangkah sing ngidini LLM njupuk tumindak. Para pangembang wis suwe golek cara ngubengi watesan LLM ing area iki liwat piranti open source, prompting, lan mbaleni panyuwunan bola-bali kanggo mesthekake output model cocog karo format sing dibutuhake supaya bisa interoperasi karo sistemé. Structured Outputs ngrampungake masalah iki kanthi mbatesi model OpenAI supaya cocog karo skema sing diwenehake pangembang lan kanthi nglatih model kita supaya luwih ngerti skema sing rumit.
Ing eval kita babagan ngetutake skema JSON kompleks, model anyar kita gpt-4o-2024-08-06 kanthi Structured Outputs entuk skor sampurna 100%. Déné gpt-4-0613 entuk skor kurang saka 40%.
Kanthi Structured Outputs, gpt-4o-2024-08-06 nggayuh reliabilitas 100% ing eval kita, cocog sampurna karo skema output.
Kita ngenalake Structured Outputs ing API kanthi rong wujud:
1. Function calling: Structured Outputs liwat tools kasedhiya kanthi nyetel strict: true ing njero definisi fungsi panjenengan. Fitur iki bisa digunakake karo kabeh model sing ndhukung tools, kalebu kabeh model gpt-4-0613 lan gpt-3.5-turbo-0613 lan sakbanjuré. Nalika Structured Outputs diaktifake, output model bakal cocog karo definisi alat sing diwenehake.
2. Opsi anyar kanggo parameter response_format: para pangembang saiki bisa nyedhiyakake JSON Schema liwat json_schema, opsi anyar kanggo parameter response_format. Iki migunani nalika model ora lagi nelpon alat, nanging malah nanggapi pangguna kanthi cara terstruktur. Fitur iki bisa digunakake karo model GPT‑4o paling anyar kita: gpt-4o-2024-08-06, dirilis dina iki, lan gpt-4o-mini-2024-07-18. Nalika response_format diwenehake nganggo strict: true, keluaran model bakal cocog karo skema sing diwenehake.
Keamanan iku prioritas utama kanggo OpenAI—fungsionalitas Structured Outputs anyar bakal manut marang kabijakan keamanan sing wis ana lan isih bakal ngidini model nolak panyuwunan sing ora aman. Supaya pangembangan luwih gampang, ana nilai string refusal anyar ing tanggapan API sing ngidini para pangembang ndeteksi kanthi programatis apa model ngasilake penolakan tinimbang output sing cocog karo skema. Nalika tanggapan ora ngemot penolakan lan tanggapan model durung keganggu sadurunge waktune (kaya sing dituduhake dening finish_reason), mula tanggapan model bakal kanthi andal ngasilake JSON valid sing cocog karo skema sing diwenehake.
SDK Python lan Node kita wis dianyari nganggo dukungan native kanggo Structured Outputs. Nyedhiyakake skema kanggo tools utawa minangka format tanggapan semudah nyedhiyakake objek Pydantic utawa Zod, lan SDK kita bakal nangani ngowahi jinis data dadi JSON schema sing didhukung, nindakake deserialisasi tanggapan JSON dadi struktur data bertipe kanthi otomatis, lan ngurai penolakan yen ana.
Conto-conto ing ngisor iki nuduhake dukungan native kanggo Structured Outputs nganggo function calling.
Dukungan Native Structured Outputs uga kasedhiya kanggo response_format.
Para pangembang kerep nggunakake model OpenAI kanggo ngasilake data terstruktur kanggo manéka kasus panggunaan. Sawetara conto tambahan kalebu:
Contoné, para pangembang bisa nggunakaké Structured Outputs kanggo nggawe aplikasi sing ngasilake kode utawa UI. Kabeh conto ing ngisor iki nggunakaké response_format sing padha, lan bisa digunakaké kanggo ngasilake UI sing béda-béda adhedhasar input pangguna.
Njenengan iku asisten antarmuka pangguna. Tugasmu yaiku mbantu pangguna nggambarake ide-ide situs web lan aplikasi.Bisa migunani yen model diwenehi kolom kapisah kanggo chain of thought supaya kualitas akhir tanggapan luwih apik.
Contoné, menehi instruksi marang model kanggo ngekstrak perkara kaya to-do, tanggal tenggat, lan penugasan saka cathetan rapat.
Kita njupuk pendekatan rong bagéan kanggo ningkatake reliabilitas keluaran model sing cocog karo JSON Schema. Pisanan, kita nglatih model paling anyar kita gpt-4o-2024-08-06 supaya paham skema sing rumit lan cara paling apik kanggo ngasilake output sing cocog. Nanging, prilaku model sipaté pancen non-deterministik—senadyan ana peningkatan kinerja model iki (93% ing benchmark kita), isih durung nyukupi reliabilitas sing dibutuhake pangembang kanggo mbangun aplikasi sing kuwat. Mula kita uga njupuk pendekatan deterministik adhedhasar rekayasa kanggo mbatesi output model supaya nggayuh reliabilitas 100%.
Pendekatan kita adhedhasar tèknik sing dikenal minangka constrained sampling utawa constrained decoding. Kanthi gawan, nalika model disampling kanggo ngasilake output, model kuwi pancen ora diwatesi lan bisa milih token apa waé saka kosakata minangka output sabanjuré. Keluwesan iki sing ndadekake model bisa nggawe kesalahan; contoné, model umume bébas nyampling token kurung kurawal kapan waé, sanajan kuwi ora bakal ngasilake JSON sing valid. Kanggo meksa output sing valid, kita mbatesi model kita mung marang token sing bakal valid miturut skema sing diwenehake, dudu kabeh token sing kasedhiya.
Ngetrapake watesan iki ing praktik bisa dadi tantangan, amarga token sing valid béda-béda sajrone output model. Upamané kita nduwèni skema kaya ing ngisor iki:
Token sing valid ing wiwitan output kalebu perkara kaya {, {“, {, lan liya-liyané. Nanging, sawisé model wis nyampling {“val, mula { ora valid maneh minangka token. Mula kita kudu ngetrapake decoding diwatesi dinamis, lan nemtokake token endi sing valid sawisé saben token diasilake, dudu ditemtokake dhisik ing wiwitan tanggapan.
Kanggo nindakake iki, kita ngowahi JSON Schema sing diwenehake dadi context-free grammar (CFG). Grammar iku kumpulan aturan sing nemtokake sawijining basa, lan context-free grammar iku grammar sing manut marang aturan tartamtu. Sampeyan bisa nganggep JSON lan JSON Schema minangka basa tartamtu sing nduwèni aturan kanggo nemtokake apa sing valid ing njero basa kasebut. Kaya déné ora valid ing basa Inggris yen ana ukara tanpa kriya, ora valid uga ing JSON yen ana koma nggléndhangi ing pungkasan.
Mula, kanggo saben JSON Schema, kita ngitung grammar sing makili skema kasebut, lan nindakake pra-pangolahan komponèné supaya gampang diakses nalika sampling model. Iki sebabé panyuwunan kapisan nganggo skema anyar kena penalti latensi—amarga kita kudu nindakake pra-pangolahan skema kanggo ngasilake artefak iki sing bisa digunakake kanthi efisien nalika sampling.
Nalika sampling, sawisé saben token, mesin inferensi kita bakal nemtokake token endi sing valid kanggo diasilake sabanjuré adhedhasar token sing wis diasilake sadurungé lan aturan ing grammar sing nuduhake token endi sing valid sabanjuré. Banjur kita nggunakaké dhaptar token iki kanggo masking langkah sampling sabanjuré, sing kanthi efektif nurunaké probabilitas token sing ora valid dadi 0. Amarga skema wis dipraolah, kita bisa nggunakaké struktur data cache kanggo nindakake iki kanthi efisien, kanthi overhead latensi sing minimal.
Pendekatan alternatif kanggo masalah iki asring nggunakaké finite state machines (FSM) utawa regex (umumé diimplementasikaké nganggo FSM) kanggo decoding diwatesi. Cara iki padha fungsiné amarga nganyari kanthi dinamis token endi sing valid sawisé saben token diasilake, nanging nduwèni sawetara béda penting saka pendekatan CFG. Sing paling katon, CFG bisa nyatakaké kelas basa sing luwih amba tinimbang FSM. Ing praktik, iki ora pati penting kanggo skema sing prasaja banget kaya skema value sing dituduhake ing ndhuwur. Nanging, miturut panemuan kita, béda iki wigati kanggo skema sing luwih rumit sing nglibataké struktur data bertingkat utawa rekursif. Minangka conto, FSM umumé ora bisa nyatakaké jinis rekursif, tegese pendekatan adhedhasar FSM bisa kesulitan nyocogaké tandha kurung ing JSON sing nested banget. Ing ngisor iki ana conto skema rekursif sing didhukung ing OpenAI API kanthi Structured Outputs nanging ora bisa dinyatakake nganggo FSM.
Elinga manawa saben unsur UI bisa nduwèni turunan sakarepé dhewe sing ngrujuk menyang skema root kanthi rekursif. Keluwesan iki minangka salah siji perkara sing diwenehake pendekatan CFG.
Ana sawetara watesan sing perlu digatekake nalika nggunakake Structured Outputs:
- Structured Outputs mung ngidini sapérangan saka JSON Schema, kanthi rincian ing dokumen kita(mbukak ing jendhela anyar). Iki mbantu kita njamin kinerja sing paling apik.
- Tanggapan API kapisan nganggo skema anyar bakal nambah latensi, nanging tanggapan sabanjuré bakal cepet tanpa penalti latensi. Iki amarga sajrone panyuwunan kapisan, kita ngolah skema kaya sing diterangake ing ndhuwur lan banjur nyimpen artefak iki ing cache supaya bisa digunakake maneh kanthi cepet mengko. Skema sing umum biasane mbutuhake wektu kurang saka 10 detik kanggo diproses ing panyuwunan kapisan, nanging skema sing luwih rumit bisa nganti sak menit.
- Model bisa gagal ngetutake skema yen model milih nolak panyuwunan sing ora aman. Yen milih nolak, pesen bali bakal nduwèni nilai boolean
refusaldisetel dadi true kanggo nandhani iki. - Model bisa gagal ngetutake skema yen generasi tekan
max_tokensutawa kondisi mandheg liyane sadurunge rampung. - Structured Outputs ora nyegah kabèh jinis kesalahan model. Contoné, model isih bisa nggawe kesalahan ing nilai obyek JSON (umpamané, salah siji langkah ing persamaan matematika). Yen para pangembang nemokake kesalahan, kita nyaranake menehi conto ing instruksi sistem utawa mecah tugas dadi subtugas sing luwih prasaja.
- Structured Outputs ora kompatibel karo parallel function calls. Nalika parallel function call diasilake, asilé bisa uga ora cocog karo skema sing diwenehake. Setel
parallel_tool_calls: falsekanggo mateni function calling paralel. - JSON Schema sing diwenehake nganggo Structured Outputs ora layak kanggo retensi data nol(mbukak ing jendhela anyar) (ZDR).
Structured Outputs saiki wis kasedhiya umum ing API.
Structured Outputs nganggo nelpon fungsi kasedhiya ing kabeh model sing ndhukung function calling ing API. Iki kalebu model paling anyar kita (gpt-4o, gpt-4o-mini), kabeh model wiwit lan kalebu gpt-4-0613 lan gpt-3.5-turbo-0613, lan model fine-tuned apa wae sing ndhukung function calling. Fungsionalitas iki kasedhiya ing Chat Completions API, Assistants API, lan Batch API. Structured Outputs nganggo function calling uga kompatibel karo input visi.
Structured Outputs nganggo format tanggapan kasedhiya ing gpt-4o-mini lan gpt-4o-2024-08-06 lan fine-tune apa wae adhedhasar model iki. Fungsionalitas iki kasedhiya ing Chat Completions API, Assistants API, lan Batch API. Structured Outputs nganggo format tanggapan uga kompatibel karo input visi.
Kanthi ngalih menyang gpt-4o-2024-08-06 anyar, para pangembang bisa ngirit 50% kanggo input ($2.50/1M input token) lan 33% kanggo output ($10.00/1M output token) dibandhingake karo gpt-4o-2024-05-13.
Kanggo miwiti nggunakake Structured Outputs, delengen dokumen(mbukak ing jendhela anyar) kita.
Structured Outputs njupuk inspirasi saka karya apik saka komunitas open source: yaiku pustaka outlines(mbukak ing jendhela anyar), jsonformer(mbukak ing jendhela anyar), instructor(mbukak ing jendhela anyar), guidance(mbukak ing jendhela anyar), lan lark(mbukak ing jendhela anyar).
Panulis
Kontributor inti
Chris Colby, Melody Guan, Michelle Pokrass, Ted Sanders, Brian Zhang
Pangajèn
John Allard, Filipe de Avila Belbute Peres, Ilan Bigio, Owen Campbell-Moore, Chen Ding, Atty Eleti, Elie Georges, Katia Gil Guzman, Jeff Harris, Johannes Heidecke, Beth Hoover, Romain Huet, Tomer Kaftan, Jillian Khoo, Karolis Kosas, Ryan Liu, Kevin Lu, Lindsay McCallum, Rohan Nuttall, Joe Palermo, Leher Pathak, Ishaan Singal, Felipe Petroski Such, Freddie Sulit, David Weedon