Многоязычное обогащение — документация Entity Enricher

Многоязычное обогащение

Entity Enricher может выдавать результаты обогащения одновременно на 40 языках. Многоязычные поля хранятся как объекты JSON с ключами по языкам — этот формат переносим, доступен для запросов и совместим со всеми основными базами данных.

Редактор рабочих процессов: переключатель многоязычности

В редакторе схем включите флаг «многоязычный» для любого свойства типа строка или массив строк. Когда он включён, LLM возвращает значения, обёрнутые в объект с ключами по языкам, вместо простого значения.

Как это работает

1
Отметьте поля как многоязычные
В редакторе схем установите флажок «многоязычный» для свойств типа строка или массив. Флаг сохраняется как multilingual: true в схеме JSON.
2
Выберите целевые языки
В параметрах боковой панели выберите один или несколько языков из 40 поддерживаемых. Промпт обогащения указывает LLM генерировать значения на каждом выбранном языке. Первый выбранный язык является основным: он отмечен значком «Основной» и используется для всех немногоязычных строковых полей (описания, названия и т. д., не помеченные как multilingual: true). Нажмите кнопку на любом другом чипе, чтобы сделать его основным. Бэкенд также отфильтровывает любые лишние языковые ключи, которые LLM может выдать и которых нет в вашем выборе.
3
LLM возвращает результат с ключами по языкам
Динамическая модель Pydantic оборачивает многоязычные поля как dict[str, T], где ключи — это коды языков ISO 639-1, а значения соответствуют типу поля.

Формат данных

Многоязычные значения хранятся как JSON-объекты с кодами языков в качестве ключей. Этот формат выбран среди альтернатив за переносимость, удобство запросов и эффективность хранения.

Многоязычная строка
Свойство схемы
"description": {
"type": "string",
"multilingual": true
}
Результат обогащения
"description": {
"en": "A global pharma company",
"fr": "Une entreprise pharma mondiale",
"ar": "شركة أدوية عالمية"
}
Многоязычный массив
Свойство схемы
"indications": {
"type": "array",
"items": { "type": "string" },
"multilingual": true
}
Результат обогащения
"indications": {
"en": ["pain relief", "fever"],
"fr": ["anti-douleur", "fièvre"],
"ar": ["تخفيف الألم", "حمى"]
}
Немногоязычные поля

Поля без multilingual: true возвращаются как обычные значения. Идентификаторы, коды, URL, даты и числа обычно остаются немногоязычными.

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

Почему именно этот формат?

Для многоязычных массивов существует два подхода. Entity Enricher использует Format A (объект с ключами по языкам), поскольку это единственный формат, который работает как есть во всех основных базах данных без преобразования.

КритерииA Объект с ключами по языкамB Массив локализованных элементов
Структура{"en": [...], "fr": [...]}[{"en": "x", "fr": "y"}, ...]
Запрос одного языкаПрямой доступ
data -> 'field' -> 'en'
Требует итерации
jsonb_array_elements + extract
Добавить языкДобавьте один ключ к объектуОбновить каждый элемент в массиве
Согласуется со скалярамиДа — тот же шаблон {"en": "...", "fr": "..."}Нет — разная структура для строк и массивов
Переносимость базы данныхВсе основные базы данныхВсе основные базы данных

Примеры запросов к базе данных

Формат с ключами по языкам изначально поддерживает запросы во всех основных базах данных с колонками 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;

Поддерживаемые языки

Доступно 40 языков. Выберите любое сочетание при запуске обогащения.

Глобальные языки
enEnglish
zhChinese
hiHindi
esSpanish
arArabic
frFrench
bnBengali
ptPortuguese
ruRussian
jaJapanese
deGerman
urUrdu
viVietnamese
trTurkish
koKorean
taTamil
mrMarathi
teTelugu
paPunjabi
yueCantonese
itItalian
Европейские языки
plPolish
ukUkrainian
roRomanian
nlDutch
elGreek
csCzech
huHungarian
svSwedish
srSerbian
bgBulgarian
hrCroatian
skSlovak
daDanish
fiFinnish
noNorwegian
ltLithuanian
slSlovenian
lvLatvian
etEstonian

Какие поля должны быть многоязычными?

Отметить как многоязычное
  • Названия и метки (город, страна, название продукта)
  • Описания и сводки
  • Медицинские/научные термины
  • Метки статуса («Одобрено», «Активно»)
  • Метки категорий и теги
  • Инструкции и рекомендации
Оставить одноязычным
  • Сохраняемые поля (отмеченные preserve)
  • Технические идентификаторы (UUID, ID)
  • Стандартизированные коды (ATC, CAS, ISO)
  • Аббревиатуры (FDA, EMA, WHO)
  • Числа, даты, проценты
  • URL-адреса, адреса эл. почты, номера телефонов
  • Логические флаги

Флаг multilingual нельзя сочетать с флагом preserve: сохраняемое значение передаётся без перевода, на одном языке. Редактор schema отключает конфликтующий переключатель, а API отклоняет schema с обоими флагами. Ключевые поля (естественные или ключи базы данных) могут быть многоязычными — тогда идентичность entity использует зафиксированный язык ключа schema.

Допустимые типы полей

Флаг мультиязычности допустим только для определённых типов свойств. Редактор схем применяет это автоматически.

Тип свойстваМногоязычный?Формат вывода
stringДаdict[str, str]
number / integerДаdict[str, float]
booleanДаdict[str, bool]
массив примитивовДаdict[str, list[str]]
objectНетВместо этого отмечайте отдельные поля внутри объекта — если только объект не содержит по одной строке на язык, см. ниже
массив объектовНетВместо этого отметьте отдельные поля внутри элементов
$refНетВместо этого отметьте поля внутри связанной сущности

С чем несовместим мультиязычный режим

Многоязычное значение — это набор языков, а не одно значение, поэтому атрибуты, ограничивающие одиночное значение, к нему неприменимы. Такие конфликты разрешаются при генерации схемы и отклоняются при ручном сохранении, а не всплывают позже при обогащении.

Закрытые словари побеждают

Свойство, ограниченное фиксированным набором элементов, не может быть при этом многоязычным: элементы — это канонические токены, и база-потребитель ограничивает по ним столбец. Переведённым подписям место в вашей собственной справочной таблице с ключом по токену.

format и pattern не применяются

У даты, UUID или кода, проверяемого регулярным выражением, есть одна машиночитаемая форма, а не по одной на язык. Сохранение свойства, которое совмещает и то и другое, отклоняется.

Сохранение приоритетнее мультиязычности

Сохранённое значение — это ваши данные, возвращаемые без изменений, поэтому переводить нечего.

Ключи могут быть многоязычными

Это допустимо. Идентичность определяется на одном языке — зафиксированном для схемы при первой публикации в базу данных, — поэтому название можно перевести, не сместив его идентичность.

Когда язык — это данные, а не перевод

Некоторые источники представляют язык в виде строк: список, где каждый элемент содержит код языка и собственные значения — по одному на язык. Это иная структура, чем мультиязычное свойство, и смешивать их нельзя. При генерации такое свойство распознаётся как языковая ось объекта — но только если каждое встреченное значение действительно является кодом языка — и встроенный механизм отключается для всего этого поддерева. Помечать отдельные поля внутри элемента, как обычно советуют для объектов, здесь категорически неверно: вы получите переводы строк, которые и так уже идут по одной на язык.

Ещё одно различие, которое стоит держать в голове: языки, на которые вы обогащаете, выбираются для каждого прогона; язык, на котором написаны тексты самой схемы (её описания и подписи), закреплён за схемой; а язык, на котором разрешается идентичность, закреплён за каждой базой данных. Три разные настройки, и все звучат как «язык».

Интеграция конвейера обогащения

Поддержка нескольких языков встроена в каждый этап конвейера обогащения.

Схема
multilingual: true
для выбранных полей
Конструктор промптов
Внедряет языковые
инструкции + примеры
Динамическая модель
str → dict[str, str]
Валидация Pydantic
Хранилище JSONB
Объекты с ключами
по языкам в выводе
Мультиэкспертиза: При использовании стратегии мультиэкспертизы каждый домен экспертизы получает многоязычные инструкции в собственном prompt. Поля переводятся независимо для каждой экспертизы, а затем объединяются в итоговый результат.

Многоязычные поля в слиянии

При слиянии результатов нескольких моделей многоязычные поля сравниваются по каждому языку.

СценарийРазрешение
Модели согласны по английскому, но расходятся по французскомуЭто не расхождение. Идентичность определяется на основном языке прогона, поэтому здесь засчитывается согласие: английский проходит как есть, а французский решается правилом объединения по языкам. Расхождения перевода никогда не передаются арбитру — платить модели за выбор между двумя верными переводами значило бы тратить впустую
Одна модель поддерживает арабский, другая — нетПредпочитать не-null значение (сохраняется арабское)
Многоязычные массивы различаются по длине для разных моделейОбъединение всех элементов по языкам