Enrichissement multilingue - Documentation Entity Enricher

Enrichissement multilingue

Entity Enricher peut produire des résultats d'enrichissement dans jusqu'à 40 langues simultanément. Les champs multilingues sont stockés sous forme d'objets JSON indexés par langue — un format portable, interrogeable et compatible avec toutes les grandes bases de données.

Éditeur de workflow : bascule multilingue

Dans l'éditeur de schéma, activez l'indicateur multilingue sur toute propriété de type chaîne ou tableau de chaînes. Une fois activé, le LLM renvoie des valeurs encapsulées dans un objet indexé par langue au lieu d'une valeur simple.

Fonctionnement

1
Marquer les champs comme multilingues
Dans l'éditeur de schéma, cochez la case multilingue sur les propriétés de type chaîne ou tableau. L'indicateur est stocké sous la forme multilingual: true dans le schéma JSON.
2
Sélectionnez les langues cibles
Dans les options de la barre latérale, choisissez une ou plusieurs langues parmi les 40 langues prises en charge. Le prompt d'enrichissement demande au LLM de produire des valeurs dans chaque langue sélectionnée. La première langue sélectionnée est la langue principale : elle est mise en évidence par un badge « Principale » et est utilisée pour tous les champs de chaîne non multilingues (descriptions, noms, etc. non marqués multilingual: true). Utilisez le bouton sur toute autre puce pour la promouvoir comme langue principale. Le backend filtre également les clés de langue parasites que le LLM pourrait émettre en dehors de votre sélection.
3
Le LLM renvoie une sortie indexée par langue
Le modèle Pydantic dynamique encapsule les champs multilingues sous forme de dict[str, T], où les clés sont des codes de langue ISO 639-1 et les valeurs correspondent au type du champ.

Format des données

Les valeurs multilingues sont stockées sous forme d'objets JSON avec les codes de langue comme clés. Ce format a été retenu parmi d'autres pour sa portabilité, sa facilité d'interrogation et son efficacité de stockage.

Chaîne multilingue
Propriété du schéma
"description": {
"type": "string",
"multilingual": true
}
Sortie d'enrichissement
"description": {
"en": "A global pharma company",
"fr": "Une entreprise pharma mondiale",
"ar": "شركة أدوية عالمية"
}
Tableau multilingue
Propriété du schéma
"indications": {
"type": "array",
"items": { "type": "string" },
"multilingual": true
}
Sortie d'enrichissement
"indications": {
"en": ["pain relief", "fever"],
"fr": ["anti-douleur", "fièvre"],
"ar": ["تخفيف الألم", "حمى"]
}
Champs non multilingues

Les champs sans multilingual: true sont renvoyés comme valeurs simples. Les identifiants, codes, URL, dates et nombres restent généralement non multilingues.

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

Pourquoi ce format ?

Deux approches existent pour les tableaux multilingues. Entity Enricher utilise le Format A (objet indexé par langue), car c'est le seul format qui fonctionne tel quel dans toutes les principales bases de données sans transformation.

CritèresA Objet indexé par langueB Tableau d'éléments localisés
Structure{"en": [...], "fr": [...]}[{"en": "x", "fr": "y"}, ...]
Interroger une seule langueAccès direct
data -> 'field' -> 'en'
Nécessite une itération
jsonb_array_elements + extract
Ajouter une langueAjoutez une clé à l'objetMettre à jour chaque élément du tableau
Cohérent avec les scalairesOui — même motif {"en": "...", "fr": "..."}Non — structure différente pour les chaînes et les tableaux
Portabilité de la base de donnéesToutes les principales bases de donnéesToutes les principales bases de données

Exemples de requêtes de base de données

Le format indexé par langue est nativement interrogeable dans toutes les grandes bases de données prenant en charge les colonnes 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;

Langues prises en charge

40 langues sont disponibles. Sélectionnez n'importe quelle combinaison lors de l'exécution d'un enrichissement.

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

Quels champs doivent être multilingues ?

Marquer comme multilingue
  • Noms et libellés (ville, pays, nom de produit)
  • Descriptions et résumés
  • Termes médicaux/scientifiques
  • Libellés de statut (« Approuvé », « Actif »)
  • Libellés de catégorie et étiquettes
  • Instructions et recommandations
Conserver non multilingue
  • Champs préservés (marqués preserve)
  • Identifiants techniques (UUID, ID)
  • Codes normalisés (ATC, CAS, ISO)
  • Acronymes (FDA, EMA, WHO)
  • Nombres, dates, pourcentages
  • URL, e-mails, numéros de téléphone
  • Indicateurs booléens

L'indicateur multilingue ne peut pas être combiné avec l'indicateur preserve : une valeur préservée est transmise sans traduction, dans une seule langue. L'éditeur de schéma désactive la bascule en conflit, et l'API rejette les schémas portant les deux indicateurs. Les champs clés (clés naturelles ou de base de données) peuvent être multilingues — l'identité de l'entité utilise alors la langue de clé verrouillée du schéma.

Types de champs valides

L'indicateur multilingue n'est valide que sur certains types de propriétés. L'éditeur de schéma applique cette règle automatiquement.

Type de propriétéMultilingue ?Format de sortie
stringOuidict[str, str]
number / integerOuidict[str, float]
booleanOuidict[str, bool]
tableau de primitivesOuidict[str, list[str]]
objectNonMarquez plutôt les champs individuels à l'intérieur de l'objet — sauf si l'objet contient une ligne par langue, voir ci-dessous
tableau d'objetsNonMarquer plutôt les champs individuels à l'intérieur des éléments
$refNonMarquer plutôt les champs à l'intérieur de l'entité référencée

Ce avec quoi le multilingue est incompatible

Une valeur multilingue est une table de langues, pas une valeur unique — les attributs qui contraignent une valeur unique ne peuvent donc pas s'y appliquer. Ces conflits sont résolus à la génération du schéma et refusés lorsque vous en enregistrez un à la main, plutôt que d'échouer plus tard, à l'enrichissement.

Les vocabulaires fermés l'emportent

Une propriété restreinte à un ensemble fixe de membres ne peut pas être multilingue en plus : les membres sont des jetons canoniques, et une base consommatrice contraint une colonne à partir d'eux. Les libellés traduits ont leur place dans votre propre table de correspondance, indexée sur le jeton.

Format et pattern ne s'appliquent pas

Une date, un UUID ou un code validé par expression régulière n'a qu'une seule forme lisible par machine, pas une par langue. L'enregistrement d'une propriété qui cumule les deux est refusé.

« Préserver » l'emporte sur « multilingue »

Une valeur préservée est votre donnée renvoyée telle quelle : il n'y a donc rien à traduire.

Les clés peuvent être multilingues

Celle-ci est autorisée. L'identité est résolue dans une seule langue — fixée pour le schéma lors de sa première publication vers une base de données — de sorte qu'un nom peut être traduit sans que son identité ne change.

Quand la langue est une donnée, pas une traduction

Certaines sources modélisent la langue sous forme de lignes : une liste dont chaque élément porte un code de langue et ses propres valeurs, une par langue. Cette forme diffère d'une propriété multilingue, et les deux ne doivent pas être mélangées. La génération reconnaît une telle propriété comme l'axe linguistique de l'objet — uniquement si chaque valeur observée est bien un code de langue — puis désactive le mécanisme intégré pour tout ce sous-arbre. Marquer les champs individuels à l'intérieur de l'élément, le conseil habituel pour les objets, est ici exactement le mauvais remède : vous obtiendriez des traductions de lignes qui sont déjà à raison d'une par langue.

Une distinction de plus à garder en tête : les langues dans lesquelles vous enrichissez se choisissent à chaque exécution ; la langue dans laquelle est rédigé le texte propre à un schéma (ses descriptions et libellés) est fixée sur le schéma ; et la langue dans laquelle l'identité est résolue est fixée par base de données. Trois réglages distincts qui ressemblent tous à « la langue ».

Intégration au pipeline d'enrichissement

La prise en charge multilingue est intégrée à chaque étape du pipeline d'enrichissement.

Schéma
multilingual: true
sur les champs sélectionnés
Générateur de prompts
Injecte les instructions de
langue + des exemples
Modèle dynamique
str → dict[str, str]
Validation Pydantic
Stockage JSONB
Objets indexés
par langue en sortie
Multi-expertise : avec la stratégie multi-expertise, chaque domaine d'expertise reçoit les instructions multilingues dans son propre prompt. Les champs sont traduits indépendamment par expertise, puis fusionnés dans le résultat final.

Champs multilingues dans la fusion

Lors de la fusion des résultats de plusieurs modèles, les champs multilingues sont comparés par langue.

ScénarioRésolution
Les modèles s'accordent sur l'anglais mais divergent sur le françaisPas un désaccord. L'identité est jugée dans la langue principale de l'exécution : cela compte donc comme un accord : l'anglais passe tel quel, et le français est tranché par la règle de fusion par langue. Les écarts de traduction ne sont jamais envoyés à un arbitre — payer un modèle pour choisir entre deux traductions correctes, ce serait dépenser pour rien
Un modèle prend en charge l'arabe, un autre nonPréférer la valeur non nulle (l'arabe est conservé)
Les tableaux multilingues diffèrent en longueur selon le modèleUnion de tous les éléments par langue