Ce înseamnă Ieșire structurată (JSON mode și Structured Outputs)
Când răspunsul modelului este citit de cod, textul liber e greu de folosit. Există trei niveluri: instrucțiuni în prompt („răspunde doar cu JSON”), JSON mode (răspunsul este JSON valid, dar fără garanția unei scheme) și Structured Outputs (răspunsul respectă o schemă JSON dată).
OpenAI: JSON mode se activează cu text.format de tip json_object, iar Structured Outputs cu tipul json_schema și strict: true; OpenAI recomandă Structured Outputs în locul JSON mode când e posibil. Anthropic: output_config.format cu tipul json_schema pentru răspuns și strict: true pentru parametrii uneltelor; SDK-urile acceptă direct modele Pydantic sau Zod. Gemini: parametrul response_format cu o schemă JSON. Toate acceptă doar un subset din JSON Schema.
Cum funcționează
Structured Outputs folosesc decodare constrânsă (constrained decoding): la fiecare pas, motorul de inferență permite doar tokenii care păstrează răspunsul conform schemei.
Garanția are excepții documentate. La Anthropic, dacă modelul refuză cererea (stop_reason: "refusal") sau atinge max_tokens, răspunsul poate să nu respecte schema. La OpenAI, JSON mode are cazuri-limită în care ieșirea nu este un obiect JSON complet. Google recomandă să validezi oricum valorile în aplicație: un JSON valid poate avea conținut greșit.
Pe înțelesul tuturor
Un formular tipizat la ghișeu: fiecare informație are căsuța ei, iar funcționarul nu poate scrie în afara căsuțelor. Formularul garantează forma, nu și că datele trecute în căsuțe sunt adevărate.
Exemplu
Fragment de cerere OpenAI (Responses API) cu schemă strictă:"text": {"format": {"type": "json_schema", "name": "recenzie", "strict": true, "schema": {"type": "object", "properties": {"autor": {"type": "string"}, "nota": {"type": "integer"}, "reclamatii": {"type": "array", "items": {"type": "string"}}}, "required": ["autor", "nota", "reclamatii"], "additionalProperties": false}}}
De reținut
- JSON mode garantează JSON valid; Structured Outputs garantează și schema.
- OpenAI, Anthropic și Gemini au structured outputs; schemele acceptate sunt un subset din JSON Schema.
- Tratează refuzurile și răspunsurile tăiate de
max_tokensși validează valorile în cod. - La Claude 4.6 și modelele mai noi, prefill-ul (începerea răspunsului asistentului, de exemplu cu
{) nu mai este acceptat; Anthropic recomandă structured outputs. - La Claude, un câmp din schemă care cere raționamentul pas cu pas al modelului poate duce la refuz; cere în schimb o explicație scurtă.
Nu confunda
- JSON mode vs. Structured Outputs: primul nu verifică schema, al doilea da.
- Format corect vs. conținut corect: schema nu împiedică valorile inventate sau greșite.
Termeni înrudiți
- Few-Shot Prompting: Includerea în prompt a câtorva exemple rezolvate, ca modelul să preia formatul, tonul și tiparul dorit, fără reantrenare.
- Delimitatori și structură (XML, Markdown, ghilimele triple): Folosirea de etichete XML, titluri Markdown sau alte marcaje clare pentru a separa în prompt instrucțiunile de context, exemple și datele de procesat.
- Prompt Chaining (înlănțuirea prompturilor): Împărțirea unei sarcini mari în mai multe apeluri la model, legate între ele, ca fiecare pas să poată fi verificat și ajustat separat.
- Constrângeri negative („Ce să NU faci”): Reguli care spun modelului ce să evite; ghidurile oficiale recomandă, unde se poate, să le formulezi ca instrucțiuni despre ce să facă și să explici motivul.