Enriquecimiento multilingüe - Documentación de Entity Enricher

Enriquecimiento multilingüe

Entity Enricher puede producir resultados de enriquecimiento en hasta 40 idiomas simultáneamente. Los campos multilingües se almacenan como objetos JSON indexados por idioma, un formato portátil, consultable y compatible con todas las bases de datos principales.

Editor de flujos de trabajo: conmutador multilingüe

En el editor de esquemas, active la marca multilingüe en cualquier propiedad de tipo cadena o array de cadenas. Cuando está habilitada, el LLM devuelve los valores envueltos en un objeto con clave de idioma en lugar de un valor simple.

Cómo funciona

1
Marcar campos como multilingües
En el editor de esquemas, marque la casilla multilingüe en las propiedades de tipo cadena o array. La marca se almacena como multilingual: true en el esquema JSON.
2
Seleccione los idiomas de destino
En las opciones de la barra lateral, elija uno o varios idiomas de los 40 idiomas admitidos. El prompt de enriquecimiento indica al LLM que produzca valores en cada idioma seleccionado. El primer idioma seleccionado es el idioma principal: se resalta con una insignia «Principal» y se utiliza para todos los campos de texto no multilingües (descripciones, nombres, etc. que no estén marcados como multilingual: true). Use el botón en cualquier otra ficha para promoverlo como principal. El backend también filtra cualquier clave de idioma no deseada que el LLM pueda emitir y que no esté en su selección.
3
El LLM devuelve una salida indexada por idioma
El modelo dinámico de Pydantic envuelve los campos multilingües como dict[str, T], donde las claves son códigos de idioma ISO 639-1 y los valores coinciden con el tipo del campo.

Formato de datos

Los valores multilingües se almacenan como objetos JSON con códigos de idioma como claves. Este formato se eligió frente a otras alternativas por su portabilidad, facilidad de consulta y eficiencia de almacenamiento.

Cadena multilingüe
Propiedad del esquema
"description": {
"type": "string",
"multilingual": true
}
Salida del enriquecimiento
"description": {
"en": "A global pharma company",
"fr": "Une entreprise pharma mondiale",
"ar": "شركة أدوية عالمية"
}
Array multilingüe
Propiedad del esquema
"indications": {
"type": "array",
"items": { "type": "string" },
"multilingual": true
}
Salida del enriquecimiento
"indications": {
"en": ["pain relief", "fever"],
"fr": ["anti-douleur", "fièvre"],
"ar": ["تخفيف الألم", "حمى"]
}
Campos no multilingües

Los campos sin multilingual: true se devuelven como valores simples. Los identificadores, códigos, URL, fechas y números suelen permanecer no multilingües.

"atc_code": "N02BE01",
"founded_year": 1973,
"website": "https://example.com"

¿Por qué este formato?

Existen dos enfoques para las matrices multilingües. Entity Enricher utiliza el Formato A (objeto indexado por idioma) porque es el único formato que funciona tal cual en todas las bases de datos principales sin necesidad de transformación.

CriteriosA Objeto indexado por idiomaB Array de elementos localizados
Estructura{"en": [...], "fr": [...]}[{"en": "x", "fr": "y"}, ...]
Consultar un idiomaAcceso directo
data -> 'field' -> 'en'
Requiere iteración
jsonb_array_elements + extract
Agregar un idiomaAñada una clave al objetoActualizar todos los elementos del array
Coherente con los escalares — mismo patrón {"en": "...", "fr": "..."}No — forma diferente para cadenas frente a arrays
Portabilidad de la base de datosTodas las bases de datos principalesTodas las bases de datos principales

Ejemplos de consultas a bases de datos

El formato con clave de idioma se puede consultar de forma nativa en todas las principales bases de datos que admiten columnas JSON.

PostgreSQL
-- Get English description
SELECT structured_output -> 'description' -> 'en' FROM enrichment_records;
-- Search within a multilingual array
SELECT * FROM enrichment_records
WHERE structured_output -> 'indications' -> 'en' ? 'pain relief';
MySQL 8+
-- Get French description
SELECT JSON_EXTRACT(structured_output, '$.description.fr') FROM enrichment_records;
MongoDB
// Project only Arabic values
db.records.find({}, { "description.ar": 1, "indications.ar": 1 })
SQL Server
-- Get German description
SELECT JSON_VALUE(structured_output, '$.description.de') FROM enrichment_records;

Idiomas admitidos

Hay 40 idiomas disponibles. Seleccione cualquier combinación al ejecutar un enriquecimiento.

Idiomas globales
enEnglish
zhChinese
hiHindi
esSpanish
arArabic
frFrench
bnBengali
ptPortuguese
ruRussian
jaJapanese
deGerman
urUrdu
viVietnamese
trTurkish
koKorean
taTamil
mrMarathi
teTelugu
paPunjabi
yueCantonese
itItalian
Idiomas europeos
plPolish
ukUkrainian
roRomanian
nlDutch
elGreek
csCzech
huHungarian
svSwedish
srSerbian
bgBulgarian
hrCroatian
skSlovak
daDanish
fiFinnish
noNorwegian
ltLithuanian
slSlovenian
lvLatvian
etEstonian

¿Qué campos deben ser multilingües?

Marcar como multilingüe
  • Nombres y etiquetas (ciudad, país, nombre de producto)
  • Descripciones y resúmenes
  • Términos médicos/científicos
  • Etiquetas de estado (“Aprobado”, “Activo”)
  • Etiquetas y marcas de categoría
  • Instrucciones y recomendaciones
Mantener no multilingüe
  • Campos preservados (marcados con preserve)
  • Identificadores técnicos (UUID, ID)
  • Códigos estandarizados (ATC, CAS, ISO)
  • Siglas (FDA, EMA, WHO)
  • Números, fechas, porcentajes
  • URL, correos electrónicos, números de teléfono
  • Indicadores booleanos

El indicador multilingüe no se puede combinar con el indicador de preservación: un valor preservado se transmite sin traducir, en un solo idioma. El editor de schemas deshabilita el conmutador en conflicto, y la API rechaza los schemas que llevan ambos indicadores. Los campos clave (claves naturales o de base de datos) pueden ser multilingües: la identidad de la entity utiliza entonces el idioma de clave bloqueado del schema.

Tipos de campo válidos

El indicador multilingüe solo es válido en ciertos tipos de propiedad. El editor de esquemas lo aplica automáticamente.

Tipo de propiedad¿Multilingüe?Formato de salida
stringdict[str, str]
number / integerdict[str, float]
booleandict[str, bool]
array de primitivosdict[str, list[str]]
objectNoMarque en su lugar los campos individuales dentro del objeto — salvo que el objeto sea una fila por idioma; véase más abajo
array de objetosNoMarcar campos individuales dentro de los elementos en su lugar
$refNoMarcar campos dentro de la entity referenciada en su lugar

Con qué no puede combinarse el modo multilingüe

Un valor multilingüe es un mapa de idiomas, no un valor único, así que los atributos que restringen un valor único no pueden aplicarse a él. Estos conflictos se resuelven al generar el esquema y se rechazan al guardarlo manualmente, en lugar de fallar más tarde durante el enriquecimiento.

Los vocabularios cerrados prevalecen

Una propiedad restringida a un conjunto fijo de miembros no puede ser además multilingüe: los miembros son tokens canónicos y una base de datos consumidora restringe una columna a partir de ellos. Las etiquetas traducidas corresponden a una tabla de consulta propia, indexada por el token.

El formato y el patrón no se aplican

Una fecha, un UUID o un código validado por expresión regular tienen una única forma legible por máquina, no una por idioma. Guardar una propiedad que sea ambas cosas se rechaza.

Preservar prevalece sobre multilingüe

Un valor preservado son sus propios datos devueltos sin modificar, así que no hay nada que traducir.

Las claves pueden ser multilingües

Este sí está permitido. La identidad se resuelve en un solo idioma —fijado para el esquema la primera vez que se publica en una base de datos—, de modo que un nombre puede traducirse sin que su identidad se mueva.

Cuando el idioma es un dato, no una traducción

Algunas fuentes modelan el idioma como filas: una lista en la que cada elemento lleva un código de idioma y sus propios valores, uno por idioma. Esa forma es distinta de una propiedad multilingüe, y ambas no deben mezclarse. La generación reconoce esa propiedad como el eje de idioma del objeto — solo si todos los valores observados son realmente códigos de idioma — y entonces desactiva el mecanismo integrado en todo ese subárbol. Marcar campos individuales dentro del elemento, el consejo habitual para los objetos, es justo el remedio equivocado aquí: obtendría traducciones de filas que ya son una por idioma.

Otra distinción que conviene tener clara: los idiomas a los que enriquece se eligen en cada ejecución; el idioma en que está redactado el texto del propio esquema (sus descripciones y etiquetas) se fija en el esquema; y el idioma en el que se resuelve la identidad se fija en cada base de datos. Tres ajustes distintos que suenan todos a “el idioma”.

Integración del pipeline de enriquecimiento

La compatibilidad multilingüe está integrada en cada etapa del pipeline de enriquecimiento.

Esquema
multilingual: true
en los campos seleccionados
Constructor de prompts
Inyecta instrucciones
de idioma + ejemplos
Modelo dinámico
str → dict[str, str]
Validación con Pydantic
Almacenamiento JSONB
Objetos indexados por idioma
en la salida
Multiespecialización: Al usar la estrategia de multiespecialización, cada dominio de especialización recibe las instrucciones multilingües en su propio prompt. Los campos se traducen de forma independiente por especialización y luego se fusionan en el resultado final.

Campos multilingües en la fusión

Al fusionar resultados de varios models, los campos multilingües se comparan por idioma.

EscenarioResolución
Los modelos coinciden en inglés pero difieren en francésNo es un desacuerdo. La identidad se juzga en el idioma principal de la ejecución, así que esto cuenta como acuerdo: el inglés pasa tal cual y el francés se resuelve con la regla de fusión por idioma. La variación de traducción nunca se envía a un árbitro — pagar a un modelo para que elija entre dos traducciones correctas sería gastar en nada
Un modelo tiene árabe, otro noPreferir el valor no nulo (se conserva el árabe)
Los arrays multilingües difieren en longitud según el modeloUnión de todos los elementos por idioma