Otto regole di validazione garantiscono la qualità dello schema. Quando una regola non viene soddisfatta durante la generazione dello schema con AI, l'errore viene inviato nuovamente all'AI per l'autocorrezione automatica.
Dopo che l'AI ha generato uno schema, questo attraversa tutte le 8 regole di validazione. Se una regola non viene superata, i messaggi di errore specifici vengono raccolti e inviati all'AI come feedback. L'AI produce quindi uno schema corretto, che viene nuovamente validato. Questo ciclo prosegue per un massimo di 6 tentativi complessivi (1 iniziale + 5 nuovi tentativi).
In pratica, la maggior parte degli schemi supera la convalida al primo tentativo. Il ciclo di autocorrezione è una rete di sicurezza che gestisce i casi limite in cui l'IA commette errori di tipo o dimentica un campo.
Non tutte le regole si applicano sia alla generazione dello schema sia alla modifica AI. Le regole che confrontano con i dati di input vengono ignorate durante la modifica, poiché potresti aggiungere o rimuovere campi intenzionalmente:
| Ambito | Regole applicate | Perché |
|---|---|---|
| Generazione | Tutte le 8 regole | I dati di input sono disponibili per il confronto |
| Modifica con l'AI | Solo le regole 2, 3, 4, 5 | Nessun dato di input; l'utente potrebbe modificare intenzionalmente la struttura |
Il numero di domini di competenza non deve superare il massimo calcolato in base al numero di proprietà. Ciò impedisce all'IA di creare troppi domini granulari per schemi di piccole dimensioni.
Too many expertise domains: 6 defined, maximum is 3Il massimo è calcolato come floor(numero_proprietà / 6), con un minimo di 1. Uno schema con 12 proprietà consente fino a 2 domini.
Ogni schema deve definire almeno una proprietà. Uno schema vuoto non può essere usato per l'enrichment.
Schema must have at least one propertyQuesto intercetta i casi in cui l'IA produce una struttura JSON valida ma dimentica di includere campi effettivi.
Il tipo di ogni proprietà deve essere uno dei tipi standard di JSON Schema: string, number, integer, boolean, array, object o null.
revenue: invalid type 'float'A volte l'IA inventa tipi come "float", "decimal" o "date". Questa regola li rileva e richiede una correzione verso un tipo valido.
Tutti i riferimenti $ref devono puntare a entità definite nella sezione $defs dello schema. I riferimenti pendenti interrompono la pipeline di arricchimento.
manufacturer: $ref '#/$defs/Company' references undefined definitionQuando l'IA crea un riferimento come #/$defs/Company, deve esistere una definizione Company corrispondente nel blocco $defs.
Il valore di competenza di ogni proprietà deve corrispondere a uno dei domini di competenza definiti. Questo previene errori di battitura e incoerenze.
revenue: expertise 'finance' not in defined domains: ['financial_analyst']L'IA potrebbe usare "finance" invece della chiave definita "financial_analyst". Questa regola rileva la discrepanza affinché l'IA possa correggerla.
Le proprietà non-oggetto e non conservate devono avere un'assegnazione di expertise domain. Ciò garantisce che ogni campo arricchibile sia gestito da un dominio specialistico.
revenue: expertise is required for non-object typesI tipi object sono esentati perché le loro proprietà figlie contengono la propria competenza. I campi preservati sono esentati perché vengono trasmessi invariati.
Il tipo di schema per ogni proprietà deve corrispondere al tipo Python effettivo del valore corrispondente nei dati di input.
revenue: type mismatch - input is number but schema says 'string'Se l'input contiene "revenue": 42.5, lo schema deve usare il tipo "number" o "integer", non "string". Il validatore è flessibile: accetta "number" per gli interi e viceversa.
Ogni chiave dei dati di input deve comparire come proprietà nello schema generato. Questo impedisce all'AI di scartare silenziosamente dei campi.
Missing property from input: 'headquarters'Se il JSON di input contiene una chiave "headquarters", lo schema generato deve includerla. Ciò garantisce una copertura completa dei suoi dati.
La regola 7 (corrispondenza dei tipi) utilizza l'inferenza automatica dei tipi per confrontare i valori inseriti con i tipi dichiarati dallo schema. L'inferenza è flessibile per evitare falsi positivi:
| Valore di input | Tipo dedotto | Accetta anche |
|---|---|---|
| true / false | boolean | (solo booleano) |
| 42 | integer | number |
| 3.14 | number | integer |
| "hello" | string | (solo stringa) |
| [1, 2, 3] | array | (solo array) |
| {"key": "val"} | object | (solo oggetto) |
Nota: i valori booleani vengono verificati prima degli interi perché in alcuni linguaggi il booleano è un sottotipo dell'intero. Questo ordinamento impedisce che true venga interpretato come un intero.