Ilustración editorial para Salidas estructuradas con IA: cómo validar datos antes de guardarlos o actuar
Imagen generada con gpt-image-2.5-sunburst para InferamaFonte ↗
01

Un formato elaborabile non garantisce dati corretti

Un output strutturato è una risposta del modello organizzata in modo che un’applicazione possa interpretarla in maniera prevedibile: per esempio, un oggetto JSON con campi e tipi definiti. Può servire a estrarre dati da documenti, classificare richieste o preparare informazioni per un altro componente. Il vantaggio principale è ridurre l’ambiguità del formato; questo, da solo, non trasforma il contenuto generato in un fatto verificato.

È utile distinguere quattro domande. La risposta si può analizzare come JSON? Contiene i campi e i tipi concordati? I valori sono coerenti tra loro e con le informazioni di origine? È consentito usarla per lo scopo previsto? Una risposta può superare i primi controlli e fallire uno qualunque dei successivi. Il fatto che un oggetto includa una data nel formato atteso non dimostra che quella data compaia nel documento; una categoria valida non dimostra che la classificazione sia corretta.

Questa distinzione aiuta anche a scegliere il meccanismo di output. Una modalità JSON o la generazione vincolata da uno schema mirano a produrre una risposta finale con una determinata forma. Una chiamata a uno strumento, invece, presenta argomenti che l’applicazione può valutare prima di eseguire un’operazione. Argomenti ben formati non autorizzano automaticamente quell’operazione: l’esecuzione resta sotto il controllo del sistema che integra il modello.

Questa guida si concentra sul contratto dati da verificare a ogni esecuzione. Non sostituisce la gestione delle modifiche a modelli, SDK o strumenti, che richiede di controllare la compatibilità tra versioni. Anche se l’API non cambia, un input ambiguo, un documento incompleto o un’interpretazione errata possono produrre un risultato che non dovrebbe essere salvato come confermato.

02

Definisci il contratto prima di scrivere il prompt

Parti dall’uso che verrà fatto della risposta, non da un elenco di campi che sembra comodo per il modello. Se un altro sistema deve salvare il risultato, specifica che cosa rappresenta ogni campo, quale tipo ha e che cosa farà l’applicazione con quel valore. Un contratto utile riduce le interpretazioni divergenti tra chi genera la risposta e chi la utilizza.

Per ogni campo, decidi se è obbligatorio, facoltativo o può essere nullo. Non usare una stringa vuota, un valore fittizio o lo zero come sostituto universale di «sconosciuto»: questi valori possono essere scambiati per informazioni reali. Definisci anche le unità — per esempio, se un importo è espresso in una valuta specifica —, i formati delle date, i limiti accettabili e le enumerazioni consentite. Se sono previste categorie, spiega che cosa significa ciascuna e che cosa fare quando nessuna è adatta.

Le regole di business spesso vanno oltre i tipi. Uno schema può consentire che due importi siano numeri, mentre l’applicazione può richiedere che il totale corrisponda alla somma delle voci entro una tolleranza definita. Può accettare che un livello di confidenza sia un numero, senza che ciò stabilisca una soglia adeguata per confermare un dato. Mantieni queste regole esplicite: non dare per scontato che il modello le applichi sempre.

Lo standard JSON Schema permette di descrivere strutture e vincoli, ma ogni canale di un fornitore può supportarne solo un sottoinsieme. Prima di basarti su una specifica parola chiave, verifica la documentazione aggiornata per il modello e la modalità di output scelti. Se un vincolo non è disponibile in quel canale, controllalo nell’applicazione: non eliminarlo senza dirlo e non presumere che il modello lo rispetti solo perché è stato indicato nel prompt.

Decisioni da definire nel contratto

DecisioneDomanda di progettazioneControllo dell’applicazione
PresenzaIl campo è obbligatorio, facoltativo o può essere nullo?Rifiutare le assenze non consentite e distinguere null da un valore vuoto.
Tipo e unitàÈ testo, un intero, un decimale, una data o una quantità con unità?Verificare il tipo e normalizzare solo secondo regole esplicite.
Valori consentitiSono previsti categorie, intervalli o formati ammessi?Verificare appartenenza, limiti e formato nel codice.
RelazioniQuali condizioni devono valere tra più campi?Applicare le regole di business dopo aver validato la struttura.
UsoL’output viene mostrato, salvato o propone un’operazione?Applicare autorizzazioni e approvazioni in base all’effetto previsto.
03

Scegli il canale in base al risultato che ti serve

L’output strutturato finale è adatto quando l’applicazione deve ricevere dati organizzati come risposta. La modalità JSON può indirizzare la forma generale; la generazione vincolata da uno schema può imporre ulteriori restrizioni, se il fornitore, il modello e il canale le supportano. Nessuno dei due meccanismi garantisce universalmente la veridicità e nessuno elimina la necessità di validare la risposta ricevuta.

La chiamata a uno strumento serve a proporre argomenti per una funzione nota all’applicazione. Il ciclo non termina quando arrivano gli argomenti: il sistema li esamina, decide se può eseguirli e, se del caso, effettua l’operazione. È opportuno rendere evidente questa separazione nella progettazione. Un campo come «inviare_pagamento» non dovrebbe costituire un’istruzione eseguita soltanto perché l’ha prodotto il modello.

Prima di portare un’integrazione in produzione, verifica come il canale rappresenta i risultati normali, le risposte incomplete e i rifiuti. Questi stati non vanno trattati come oggetti validi solo perché compaiono durante una trasmissione o possono essere convertiti parzialmente in testo. Nelle risposte trasmesse a blocchi, attendi un risultato finale identificabile prima di prendere una decisione di business.

Se un vincolo dello schema non è supportato, scegli un’alternativa esplicita: verificarlo localmente, semplificare il contratto senza perdere i controlli essenziali oppure passare a un canale compatibile. Registra la differenza. Un contratto che sembra rigoroso nel prompt, ma che il canale non applica, può dare un falso senso di sicurezza.

Percorso decisionale per scegliere il meccanismo

  1. 01Stabilisci se ti serve una risposta finale da mostrare o salvare, oppure degli argomenti per una funzione.
  2. 02Verifica nella documentazione del canale scelto quali modalità di output e quali vincoli sono supportati.
  3. 03Controlla come il canale identifica i risultati completi, incompleti e rifiutati.
  4. 04Implementa le validazioni non coperte dal fornitore e lascia all’applicazione il controllo sull’esecuzione delle azioni.
  5. 05Prova il flusso con errori intenzionali prima di consentirgli di modificare dati o sistemi esterni.
04

Valida a più livelli, non con un solo controllo

Il primo livello riguarda lo stato della risposta: determina se hai ricevuto una risposta finale elaborabile oppure se il fornitore ha segnalato un rifiuto, un’interruzione o un risultato incompleto. Se il risultato è troncato o non è terminato, non considerarlo accettabile in modo parziale, a meno che il prodotto non abbia definito e testato espressamente questo comportamento.

Il secondo livello riguarda il parsing e la struttura. Verifica che il testo possa essere interpretato nel formato previsto, che la radice abbia il tipo concordato e che campi, tipi, valori consentiti e vincoli applicabili siano validi. Gestisci gli errori di parsing; non convertire automaticamente valori ambigui, come il testo in un numero, senza una regola documentata.

Il terzo livello esamina il significato e le relazioni tra i campi. Verifica intervalli, coerenza, combinazioni incompatibili e condizioni di business. Il quarto confronta la proposta con l’input originale: una fattura, un ticket o una richiesta. Quando possibile, conferma i dati rilevanti nel documento o in un archivio autorizzato. Il quinto stabilisce se l’uso è consentito: mostrare un suggerimento non ha lo stesso effetto di modificare un account o eseguire un’operazione esterna.

Mantieni separato il valore proposto da quello confermato. Se un campo richiede una revisione, l’interfaccia e l’archiviazione devono poterlo rappresentare come in sospeso o non verificato. Sovrascrivere la prova originale con un’estrazione dubbia rende più difficile correggere l’errore e ricostruire la decisione.

Livelli di validazione e decisione

LivelloChe cosa si verificaSe non supera il controllo
StatoRisposta completa ed elaborabile; non è un rifiuto né un risultato incompleto.Non interpretarla come output accettabile; applicare la procedura di errore.
Sintassi e schemaParsing, tipi, campi e vincoli supportati.Rifiutare o richiedere una nuova generazione circoscritta.
SemanticaRelazioni tra campi e regole di business.Mettere in quarantena o inviare a revisione.
EvidenzaCorrispondenza con il documento, il ticket o la richiesta.Non confermare il dato; richiedere prove o una revisione.
AutorizzazionePermessi, limiti e approvazioni necessari per la destinazione.Bloccare l’azione anche se gli argomenti sono validi.
05

Tre percorsi pratici

Gli esempi seguenti mostrano come lo stesso approccio distingua la forma della risposta dalla sua accettazione. I campi sono illustrativi: un’implementazione reale deve adattarli ai propri documenti, alle regole contabili, alla tassonomia e ai controlli di accesso.

blocks

06

Gestisci gli errori in modo controllato

Non tutti gli errori richiedono la stessa risposta. Un problema di formato può giustificare una nuova generazione con istruzioni più circoscritte. Una risposta incompleta può richiedere un nuovo tentativo o l’interruzione del processo. Una contraddizione con la fonte può richiedere una revisione umana. La mancanza di autorizzazione deve bloccare l’azione, non avviare un nuovo tentativo finalizzato a ottenere una risposta più conveniente.

Definisci in anticipo quando accettare, riprovare, mettere in quarantena o rifiutare. Limita i tentativi e conserva il risultato non riuscito per poter capire che cosa è accaduto. Se il sistema riprova, non accumulare risposte incompatibili né scegliere semplicemente quella che sembra più completa. Il nuovo tentativo deve avere uno scopo preciso — per esempio, correggere un campo mancante — e superare di nuovo gli stessi controlli.

Evita correzioni silenziose che trasformino un errore visibile in un dato apparentemente affidabile. Normalizzare spazi o una rappresentazione non ambigua può essere sicuro se il comportamento è documentato; inventare un campo mancante, scegliere tra due importi contraddittori o modificare una categoria per superare una regola non lo è. Conserva informazioni sufficienti a distinguere il valore originale da quello normalizzato.

Procedura in caso di risultati non accettabili

SituazioneRisposta controllataDa evitare
JSON non valido o campo mancanteNuovo tentativo limitato o rifiuto, in base all’impatto.Completare automaticamente con un valore inventato.
Risposta incompleta o rifiutataInterrompere il percorso di accettazione e seguire la procedura prevista dal canale.Trattare un frammento come risposta finale.
Incoerenza con la fonteQuarantena o revisione con accesso alle prove.Scegliere il valore più plausibile senza registrare la decisione.
Azione non autorizzataBloccare e richiedere l’approvazione necessaria.Riprovare finché il modello non propone un’azione diversa.
07

Testa e registra l’intero flusso

Un test utile comprende sia casi ordinari sia casi limite: campi mancanti, valori nulli, valori fuori intervallo, documenti sfocati o contraddittori, categorie non adatte, risposte incomplete e richieste che superano i permessi disponibili. Metti alla prova anche ogni fase separatamente. Così puoi distinguere un problema del canale di generazione da un errore del validatore o da una regola di business troppo restrittiva.

Misura la percentuale di risposte utilizzabili senza intervento, gli errori per campo, le contraddizioni rilevate, i rifiuti, i nuovi tentativi e i casi inviati a revisione. Un’elevata conformità allo schema non equivale a un’elevata correttezza semantica. Mantieni separate queste metriche ed esamina un campione dei risultati accettati confrontandoli con la fonte originale.

Per eseguire il debug senza conservare dati non necessari, registra la versione dello schema, l’identificazione del canale e del modello quando pertinente, lo stato finale della risposta, l’esito di ogni livello di validazione e la decisione successiva. Registra l’input o un riferimento sicuro solo se le norme sui dati lo consentono. Evita di salvare per impostazione predefinita informazioni sensibili quando sono sufficienti un riferimento, un riepilogo tecnico o un indicatore di errore.

Versiona il contratto e classifica le modifiche. Aggiungere un campo facoltativo può essere compatibile con consumatori pronti a ignorarlo; cambiare il tipo di un campo, alterare il significato di una categoria o rendere obbligatorio un campo prima facoltativo può causare problemi. Testa i consumatori e le migrazioni prima di distribuire modifiche e conserva tracce sufficienti per sapere quale versione ha prodotto ciascun dato.

Controlli prima di salvare, mostrare come confermato o agire

  1. 01La risposta è completa e non è indicata come rifiutata o incompleta?
  2. 02Può essere analizzata e rispetta il contratto corrente, incluse le regole validate dall’applicazione?
  3. 03I valori sono coerenti tra loro e supportati dall’input o da una fonte autorizzata?
  4. 04La destinazione può usare quei valori senza confondere proposte e dati confermati?
  5. 05L’operazione successiva è consentita e dispone delle approvazioni necessarie?
  6. 06Se una risposta è negativa o sconosciuta, il sistema si ferma, invia il caso a revisione o applica un nuovo tentativo limitato e registrato?
08

Criterio finale: accetta solo ciò che è stato verificato per l’uso previsto

La decisione di accettare un output dipende dalla sua destinazione. Una bozza visibile a una persona può tollerare un certo grado di incertezza, se è chiaramente contrassegnata; un dato contabile confermato o un’operazione esterna richiede controlli più rigorosi. Non esiste uno schema unico che risolva queste differenze: il contratto descrive la forma, le regole di business verificano il significato e le autorizzazioni governano l’azione.

Prima di avviare il flusso, assicurati di poter rispondere a queste domande: che cosa viene validato, dove avviene la validazione, quali prove supportano ogni valore, che cosa succede quando un controllo fallisce e chi può autorizzare il passaggio successivo. Se l’applicazione non distingue tra proposta, dato verificato e azione approvata, non è ancora pronta a fidarsi dell’output.

Questioni aperte

  • Il sottoinsieme di JSON Schema e gli stati di risposta disponibili dipendono dal fornitore, dal modello, dalla versione e dal canale di accesso; prima di implementare vincoli specifici occorre verificare la documentazione aggiornata.
  • I campi, le tolleranze contabili, le categorie, le soglie di revisione e i requisiti di approvazione degli esempi sono illustrativi e vanno definiti in base al dominio e alle policy del team.
  • La conservazione di input, risposte e tracce deve essere conforme agli obblighi di privacy, sicurezza e retention applicabili al sistema.
09

Continua a esplorare

09

Fonti consultate

03

Correzioni e trasparenza

Se trovi un dato errato o non aggiornato, inviaci la pagina e la fonte da verificare.

Proponi una correzione