Ocho reglas de validación garantizan la calidad del schema. Cuando alguna regla falla durante la generación de schemas con IA, el error se devuelve a la IA para su autocorrección automática.
Después de que la IA genera un esquema, este pasa por las 8 reglas de validación. Si alguna regla falla, los mensajes de error específicos se recopilan y se envían de vuelta a la IA como retroalimentación. La IA produce entonces un esquema corregido, que se valida de nuevo. Este bucle continúa durante un máximo de 6 intentos en total (1 inicial + 5 reintentos).
En la práctica, la mayoría de los esquemas pasan al primer intento. El bucle de autocorrección es una red de seguridad que gestiona los casos límite en los que la IA comete errores de tipo u olvida un campo.
No todas las reglas se aplican tanto a la generación de schemas como a la edición con IA. Las reglas que comparan con los datos de entrada se omiten durante la edición, ya que puede añadir o eliminar campos de forma intencionada:
| Alcance | Reglas aplicadas | Por qué |
|---|---|---|
| Generación | Las 8 reglas | Los datos de entrada están disponibles para comparar |
| Edición con IA | Solo las reglas 2, 3, 4 y 5 | No hay datos de entrada; el usuario puede modificar la estructura intencionalmente |
El número de dominios de experiencia no debe superar el máximo calculado en función de su número de propiedades. Esto evita que la IA cree demasiados dominios granulares para esquemas pequeños.
Too many expertise domains: 6 defined, maximum is 3El máximo se calcula como floor(property_count / 6), con un mínimo de 1. Un esquema con 12 propiedades permite hasta 2 dominios.
Cada esquema debe definir al menos una propiedad. Un esquema vacío no se puede usar para el enriquecimiento.
Schema must have at least one propertyEsto detecta los casos en los que la IA produce una estructura JSON válida pero olvida incluir campos reales.
Cada tipo de propiedad debe ser uno de los tipos estándar de JSON Schema: string, number, integer, boolean, array, object o null.
revenue: invalid type 'float'A veces la IA inventa tipos como "float", "decimal" o "date". Esta regla los detecta y solicita una corrección a un tipo válido.
Todas las referencias $ref deben apuntar a entidades definidas en la sección $defs del esquema. Las referencias sueltas rompen el flujo de enriquecimiento.
manufacturer: $ref '#/$defs/Company' references undefined definitionCuando la IA crea una referencia como #/$defs/Company, debe existir una definición Company correspondiente en el bloque $defs.
El valor de especialización de cada propiedad debe coincidir con uno de los dominios de especialización definidos. Esto evita errores tipográficos e inconsistencias.
revenue: expertise 'finance' not in defined domains: ['financial_analyst']La IA podría usar "finance" en lugar de la clave definida "financial_analyst". Esta regla detecta la discrepancia para que la IA pueda corregirla.
Las propiedades que no son objetos ni están preservadas deben tener una asignación de expertise domain. Esto garantiza que cada campo enriquecible sea gestionado por un expertise domain especializado.
revenue: expertise is required for non-object typesLos tipos de objeto están exentos porque sus propiedades secundarias llevan su propia especialización. Los campos preservados están exentos porque pasan sin cambios.
El tipo de esquema de cada propiedad debe coincidir con el tipo de Python real del valor correspondiente en sus datos de entrada.
revenue: type mismatch - input is number but schema says 'string'Si su entrada tiene "revenue": 42.5, el esquema debe usar el tipo "number" o "integer", no "string". El validador es flexible: acepta "number" para enteros y viceversa.
Cada clave de sus datos de entrada debe aparecer como una propiedad en el esquema generado. Esto evita que la IA descarte campos de forma silenciosa.
Missing property from input: 'headquarters'Si su JSON de entrada tiene una clave "headquarters", el esquema generado debe incluirla. Esto garantiza una cobertura completa de sus datos.
La regla 7 (coincidencia de tipos) utiliza inferencia de tipos automática para comparar sus valores de entrada con los tipos declarados del esquema. La inferencia es flexible para evitar falsos positivos:
| Valor de entrada | Tipo inferido | También acepta |
|---|---|---|
| true / false | boolean | (solo booleano) |
| 42 | integer | number |
| 3.14 | number | integer |
| "hello" | string | (solo cadena) |
| [1, 2, 3] | array | (solo array) |
| {"key": "val"} | object | (solo objeto) |
Nota: los valores booleanos se comprueban antes que los enteros porque en algunos lenguajes el booleano es un subtipo de entero. Este orden evita que true se infiera como un entero.