Regras de validação - Documentação do Entity Enricher

Regras de validação

Oito regras de validação garantem a qualidade do esquema. São executadas em código assim que a geração de esquemas por IA tiver montado a sua resposta — uma rede de segurança final sobre um pipeline que já se corrige a si próprio passo a passo.

Como funciona a autocorreção

A correção acontece onde o erro é cometido, não no fim. A geração é uma sequência de pequenas chamadas com uma única responsabilidade, e cada uma traz o seu próprio validador: verifica a resposta dessa chamada, mantém o que era válido e volta a pedir apenas o que ainda falta. Um modelo que responde em fragmentos converge, portanto, em vez de recomeçar do zero.

Fluxo de Correção

Respostas do passoUma pergunta específica — as flags de um lote de propriedades, por exemplo, ou as descrições de um domínio
Fusões do validadorAs entradas válidas são acumuladas; as inutilizáveis são descartadas individualmente, sem nunca fazer o lote perder as suas boas respostas
Se estiver incompletoA repetição pede apenas os caminhos ainda em falta — até 3 tentativas para esse passo
Depois degradarAs lacunas restantes são preenchidas de forma determinística e assinaladas no registo, pelo que um modelo fraco custa-lhe qualidade de descrição, não o schema
MontagemAs 8 regras abaixo são aplicadas ao esquema concluído como verificação final

Apenas dois passos podem fazer falhar uma geração por completo: dar nome à entidade e encaminhar as propriedades para os domínios de especialidade. Tudo o resto tem um mecanismo de recurso determinístico, e é isso que torna os modelos pequenos utilizáveis aqui.

Regras de geração vs. edição

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:

ÂmbitoRegras aplicadasPorquê
GeraçãoTodas as 8 regrasOs dados de entrada estão disponíveis para comparação
Edição por IAApenas as regras 2, 3, 4 e 5Sem dados de entrada; o utilizador pode modificar intencionalmente a estrutura

As 8 Regras

Regra 1

Contagem de domínios de especialização

Âmbito: Apenas geração

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.

Exemplo de erro: Too many expertise domains: 6 defined, maximum is 3

O máximo é calculado como floor(property_count / 6), com um mínimo de 1. Um esquema com 12 propriedades permite até 2 domínios.

Regra 2

Pelo Menos Uma Propriedade

Âmbito: Ambos

Cada schema tem de definir pelo menos uma propriedade. Um schema vazio não pode ser usado para enriquecimento.

Exemplo de erro: Schema must have at least one property

Isto deteta casos em que a IA produz uma estrutura JSON válida mas se esquece de incluir quaisquer campos reais.

Regra 3

Tipos de JSON Schema válidos

Âmbito: Ambos

Cada tipo de propriedade tem de ser um dos tipos padrão do JSON Schema: string, number, integer, boolean, array, object ou null.

Exemplo de erro: 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.

Regra 4

Os alvos de $ref existem

Âmbito: Ambos

Cada $ref tem de apontar para algo que existe: #/$defs/... para uma definição de entidade, #/$enums/... para um conjunto de valores. Referências pendentes quebram o pipeline de enriquecimento.

Exemplo de erro: manufacturer: $ref '#/$defs/Company' references undefined definition

Os dois espaços de nomes são separados: uma referência #/$defs/ é uma relação com uma entidade aninhada, enquanto uma referência #/$enums/ restringe uma propriedade de texto a uma lista fechada de valores permitidos. Cada uma tem de ter uma entrada correspondente no seu próprio bloco.

Regra 5

A chave de especialização existe

Âmbito: Ambos

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.

Exemplo de erro: 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.

Regra 6

Especialização obrigatória

Âmbito: Apenas geração

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.

Exemplo de erro: revenue: expertise is required for non-object types

Os 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.

Regra 7

O tipo corresponde aos dados de entrada

Âmbito: Apenas geração

O tipo de esquema de cada propriedade tem de corresponder ao tipo Python real do valor correspondente nos seus dados de entrada.

Exemplo de erro: 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.

Regra 8

Todas as propriedades de entrada presentes

Âmbito: Apenas geração

Cada chave nos seus dados de entrada tem de aparecer como uma propriedade no schema gerado. Isto impede que a IA elimine campos silenciosamente.

Exemplo de erro: 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.

Inferência de tipos

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 entradaTipo inferidoTambém aceita
true / falseboolean(apenas booleano)
42integernumber
3.14numberinteger
"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.

Esta tabela descreve o que o validador aceita, não o que a geração produz. Um valor de amostra de 3 não torna a propriedade um inteiro: os campos numéricos são entregues como number, a não ser que um passo dedicado confirme que a quantidade é genuinamente discreta e que nenhum valor observado o contradiz. Um número inteiro numa amostra não é prova de que as metades sejam impossíveis — e declarar integer indevidamente truncaria 6.2 para 6 numa base de dados consumidora.

Próximos Passos