Oito regras de validação garantem a qualidade do schema. Quando qualquer regra falha durante a geração de schema por IA, o erro é reenviado à IA para autocorreção automática.
Depois de a IA gerar um esquema, este passa por todas as 8 regras de validação. Se alguma regra falhar, as mensagens de erro específicas são compiladas e reenviadas à IA como feedback. A IA produz então um esquema corrigido, que é validado novamente. Este ciclo continua até um máximo de 6 tentativas no total (1 inicial + 5 repetições).
Na prática, a maioria dos schemas é aprovada à primeira tentativa. O ciclo de autocorreção é uma rede de segurança que trata dos casos-limite em que a IA comete erros de tipo ou se esquece de um campo.
Nem todas as regras se aplicam tanto à geração de esquema como à edição por IA. As regras que comparam com os dados de entrada são ignoradas durante a edição porque pode adicionar ou remover campos intencionalmente:
| Âmbito | Regras aplicadas | Porquê |
|---|---|---|
| Geração | Todas as 8 regras | Os dados de entrada estão disponíveis para comparação |
| Edição por IA | Apenas as regras 2, 3, 4 e 5 | Sem dados de entrada; o utilizador pode modificar intencionalmente a estrutura |
O número de domínios de especialização não deve exceder o máximo calculado com base no seu número de propriedades. Isto impede que a IA crie demasiados domínios detalhados para esquemas pequenos.
Too many expertise domains: 6 defined, maximum is 3O máximo é calculado como floor(property_count / 6), com um mínimo de 1. Um esquema com 12 propriedades permite até 2 domínios.
Cada schema tem de definir pelo menos uma propriedade. Um schema vazio não pode ser usado para enriquecimento.
Schema must have at least one propertyIsto deteta casos em que a IA produz uma estrutura JSON válida mas se esquece de incluir quaisquer campos reais.
Cada tipo de propriedade tem de ser um dos tipos padrão do JSON Schema: string, number, integer, boolean, array, object ou null.
revenue: invalid type 'float'A IA por vezes inventa tipos como "float", "decimal" ou "date". Esta regra deteta-os e pede uma correção para um tipo válido.
Todas as referências $ref têm de apontar para entidades definidas na secção $defs do esquema. Referências pendentes quebram o pipeline de enriquecimento.
manufacturer: $ref '#/$defs/Company' references undefined definitionQuando a IA cria uma referência como #/$defs/Company, tem de existir uma definição Company correspondente no bloco $defs.
O valor de especialização de cada propriedade tem de corresponder a um dos domínios de especialização definidos. Isto evita erros de digitação e inconsistências.
revenue: expertise 'finance' not in defined domains: ['financial_analyst']A IA pode usar "finance" em vez da chave definida "financial_analyst". Esta regra deteta a incompatibilidade para que a IA a possa corrigir.
As propriedades que não são objetos nem preservadas têm de ter uma atribuição de especialização. Isto garante que cada campo enriquecível é tratado por um domínio especialista.
revenue: expertise is required for non-object typesOs tipos de objeto estão isentos porque as suas propriedades filhas transportam a sua própria expertise. Os campos preservados estão isentos porque passam sem alterações.
O tipo de esquema de cada propriedade tem de corresponder ao tipo Python real do valor correspondente nos seus dados de entrada.
revenue: type mismatch - input is number but schema says 'string'Se o seu input tiver "revenue": 42.5, o schema deve usar o tipo "number" ou "integer", não "string". O validador é flexível: aceita "number" para inteiros e vice-versa.
Cada chave nos seus dados de entrada tem de aparecer como uma propriedade no schema gerado. Isto impede que a IA elimine campos silenciosamente.
Missing property from input: 'headquarters'Se o seu JSON de input tiver uma chave "headquarters", o schema gerado deve incluí-la. Isto garante uma cobertura completa dos seus dados.
A regra 7 (correspondência de tipos) utiliza inferência automática de tipos para comparar os seus valores de entrada com os tipos declarados no schema. A inferência é flexível para evitar falsos positivos:
| Valor de entrada | Tipo inferido | Também aceita |
|---|---|---|
| true / false | boolean | (apenas booleano) |
| 42 | integer | number |
| 3.14 | number | integer |
| "hello" | string | (apenas string) |
| [1, 2, 3] | array | (apenas array) |
| {"key": "val"} | object | (apenas objeto) |
Nota: os booleanos são verificados antes dos inteiros porque, em algumas linguagens, o booleano é um subtipo de inteiro. Esta ordenação impede que true seja inferido como um inteiro.