Quando executa o mesmo enrichment em vários modelos de IA, o Entity Enricher pode fundir os resultados num único resultado de elevada confiança. A fusion deteta conflitos entre os resultados dos modelos e resolve-os através de regras determinísticas ou de arbitration com recurso a LLM.
O detetor de conflitos compara todos os campos em todos os resultados dos modelos. Os campos em que todos os modelos concordam passam inalterados. Os campos em que os modelos discordam são assinalados como conflitos que precisam de resolução.
| Tipo | Como Comparado | Concordância significa |
|---|---|---|
| Escalar | Correspondência exata normalizada (sem espaços, em minúsculas, arredondada) | Todos os valores iguais após normalização |
| Multilingue | O idioma principal da execução decide; as diferenças de tradução apenas desencadeiam uma fusão por idioma | O mesmo texto no idioma principal — as variantes de formulação de uma tradução não são discordâncias |
| Array | Comparação de conjuntos (independente da ordem) na vista dos itens no idioma principal | Os mesmos itens independentemente da ordem ou da formulação da tradução |
| Objeto | Por propriedade enquanto os campos de identidade provarem que ambos os modelos descrevem a mesma coisa — caso contrário, todo o objeto constitui um único conflito | Todas as propriedades aninhadas correspondem |
| Nulo / vazio | Um valor nulo, uma string vazia ou um array vazio constituem uma abstenção, não uma afirmação | O valor preenchido prevalece sem contabilizar um conflito |
Os conflitos são resolvidos através de um de dois métodos, consoante tenha selecionado um modelo de arbitragem na barra lateral.
São aplicadas regras determinísticas com base no tipo de dados de cada campo. Quase sempre isto dispensa por completo qualquer chamada ao LLM — a resolução é instantânea e gratuita. A única exceção são os números em que os modelos divergem drasticamente, que nenhuma regra consegue resolver honestamente; veja abaixo.
| Tipo de campo | Regra | Justificação |
|---|---|---|
| String | Voto maioritário; em caso de empate, prevalece o valor mais longo | Normalmente, quanto mais detalhe, melhor |
| Número | Valor do modelo mais próximo da mediana | Robusto a valores atípicos, nunca uma média fabricada |
| Booleano | Maioria; em caso de empate, vence true | Predefinição conservadora |
| Multilingue | Voto maioritário por idioma, união dos idiomas | Cada idioma resolvido de forma independente |
| Array | União ciente da chave: os itens agrupam-se pelos respetivos campos-chave, as variantes de grafia fundem-se e os itens correspondentes são combinados campo a campo | Uma linha por entidade lógica, sem perder nada |
| Objeto | Por campo quando a identidade coincide; caso contrário, o objeto de um dos modelos é usado por inteiro | Misturar dois objetos que descrevem entidades diferentes criaria um terceiro que nenhum dos modelos devolveu |
| Null vs Valor | Preferir o valor preenchido | Dados em falta são piores do que qualquer valor |
Critério de desempate: Em caso de empate nos votos, vence o valor do modelo mais caro (como aproximação da capacidade), seguindo-se a ordenação alfabética do nome do modelo. Para um objeto inteiro tratado de forma atómica, a completude — o número de folhas preenchidas — fica entre os dois: sem nada que prove qual a entidade real, prefere-se o modelo mais forte e, depois, a resposta que transporta mais informação.
Fundir um objeto aninhado campo a campo só é seguro enquanto ambos os modelos descreverem a mesma coisa. Quando os campos de identidade não o provam — chaves diferentes, ou nenhuma chave e uma verdadeira divergência por baixo —, o objeto passa a ser um único conflito e a versão de um dos modelos é assumida tal como está. Caso contrário, a fusão montaria uma quimera: a morada deste modelo na empresa daquele. Uma consequência é deliberada, mas convém conhecê-la: o vencedor é assumido com os seus vazios incluídos, pelo que um campo que o vencedor deixou vazio permanece vazio — o que pode travar a entidade à entrada da base de dados. O motivo segue nos avisos de validação da execução.
“O mais próximo da mediana” é adequado para modelos que arredondam de forma diferente e inadequado para modelos que se contradizem — 0 versus 1854 não é uma diferença de arredondamento. Quando a dispersão relativa dos valores atinge 20%, esse campo é escalado para um árbitro LLM escolhido automaticamente através da seleção de modelos habitual da sua organização, e a chamada é faturada como qualquer outra. Esses campos são assinalados como escalados automaticamente no registo de auditoria da fusão, para que uma fusão que consumiu tokens indique sempre quais os campos que a provocaram.
Quando seleciona um modelo de arbitration na barra lateral, os conflitos são enviados para um LLM para resolução inteligente. O árbitro recebe o contexto da entity, as descrições dos campos do schema e todos os valores em conflito e, em seguida, toma decisões fundamentadas.
Alternativa: Se o modelo de arbitragem falhar (tempo limite, erro), o sistema recorre automaticamente à fusão baseada em regras para que obtenha sempre um resultado.
Após a resolução de conflitos, o sistema constrói um único resultado combinado e armazena-o como um registo de “arbitragem” na base de dados. Cada resultado combinado inclui um registo de auditoria para que possa rastrear como cada conflito foi resolvido.
Cada resultado combinado inclui metadados que documentam o processo de fusão:
O mesmo registo de auditoria é apresentado para qualquer registo combinado na página Histórico, no respetivo separador Visão geral. Um registo combinado lista os modelos que combinou em vez de ter um modelo próprio — e quando a combinação se baseou em regras, não fez qualquer chamada de LLM, pelo que não tem prompt, nem tokens nem custo.
Após a conclusão da fusão, o separador “Combinado” no painel de resultados mostra:
No enriquecimento em lote, a fusão acontece automaticamente quando seleciona dois ou mais modelos. Não precisa de clicar em “Combinar Resultados” manualmente — assim que todos os modelos tiverem tido êxito para uma entidade, a fusão é executada e o resultado combinado aparece junto aos resultados individuais de cada modelo. Uma execução em que um modelo falhou não é fundida de propósito: combinar o que resta publicaria silenciosamente uma resposta parcial como se fosse a resposta acordada. Recupere primeiro o modelo em falta — repetir os domínios de especialidade que falharam funde a execução automaticamente assim que esta estiver de novo completa.
fusion_started, conflicts_detected e fusion_completed em tempo real.