Entity Enricher может выдавать результаты обогащения одновременно на 40 языках. Многоязычные поля хранятся как объекты JSON с ключами по языкам — этот формат переносим, доступен для запросов и совместим со всеми основными базами данных.
В редакторе схем включите флаг «многоязычный» для любого свойства типа строка или массив строк. Когда он включён, LLM возвращает значения, обёрнутые в объект с ключами по языкам, вместо простого значения.
multilingual: true в схеме JSON.multilingual: true). Нажмите кнопку ↑ на любом другом чипе, чтобы сделать его основным. Бэкенд также отфильтровывает любые лишние языковые ключи, которые LLM может выдать и которых нет в вашем выборе.dict[str, T], где ключи — это коды языков ISO 639-1, а значения соответствуют типу поля.Многоязычные значения хранятся как JSON-объекты с кодами языков в качестве ключей. Этот формат выбран среди альтернатив за переносимость, удобство запросов и эффективность хранения.
Поля без multilingual: true возвращаются как обычные значения. Идентификаторы, коды, URL, даты и числа обычно остаются немногоязычными.
Для многоязычных массивов существует два подхода. Entity Enricher использует Format A (объект с ключами по языкам), поскольку это единственный формат, который работает как есть во всех основных базах данных без преобразования.
| Критерии | A Объект с ключами по языкам | B Массив локализованных элементов |
|---|---|---|
| Структура | {"en": [...], "fr": [...]} | [{"en": "x", "fr": "y"}, ...] |
| Запрос одного языка | Прямой доступdata -> 'field' -> 'en' | Требует итерацииjsonb_array_elements + extract |
| Добавить язык | Добавьте один ключ к объекту | Обновить каждый элемент в массиве |
| Согласуется со скалярами | Да — тот же шаблон {"en": "...", "fr": "..."} | Нет — разная структура для строк и массивов |
| Переносимость базы данных | Все основные базы данных | Все основные базы данных |
Формат с ключами по языкам изначально поддерживает запросы во всех основных базах данных с колонками JSON.
Доступно 40 языков. Выберите любое сочетание при запуске обогащения.
enEnglishzhChinesehiHindiesSpanisharArabicfrFrenchbnBengaliptPortugueseruRussianjaJapanesedeGermanurUrduviVietnamesetrTurkishkoKoreantaTamilmrMarathiteTelugupaPunjabiyueCantoneseitItalianplPolishukUkrainianroRomaniannlDutchelGreekcsCzechhuHungariansvSwedishsrSerbianbgBulgarianhrCroatianskSlovakdaDanishfiFinnishnoNorwegianltLithuanianslSlovenianlvLatvianetEstonianpreserve)Флаг 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 | Нет | Вместо этого отметьте поля внутри связанной сущности |
Многоязычное значение — это набор языков, а не одно значение, поэтому атрибуты, ограничивающие одиночное значение, к нему неприменимы. Такие конфликты разрешаются при генерации схемы и отклоняются при ручном сохранении, а не всплывают позже при обогащении.
Свойство, ограниченное фиксированным набором элементов, не может быть при этом многоязычным: элементы — это канонические токены, и база-потребитель ограничивает по ним столбец. Переведённым подписям место в вашей собственной справочной таблице с ключом по токену.
У даты, UUID или кода, проверяемого регулярным выражением, есть одна машиночитаемая форма, а не по одной на язык. Сохранение свойства, которое совмещает и то и другое, отклоняется.
Сохранённое значение — это ваши данные, возвращаемые без изменений, поэтому переводить нечего.
Это допустимо. Идентичность определяется на одном языке — зафиксированном для схемы при первой публикации в базу данных, — поэтому название можно перевести, не сместив его идентичность.
Некоторые источники представляют язык в виде строк: список, где каждый элемент содержит код языка и собственные значения — по одному на язык. Это иная структура, чем мультиязычное свойство, и смешивать их нельзя. При генерации такое свойство распознаётся как языковая ось объекта — но только если каждое встреченное значение действительно является кодом языка — и встроенный механизм отключается для всего этого поддерева. Помечать отдельные поля внутри элемента, как обычно советуют для объектов, здесь категорически неверно: вы получите переводы строк, которые и так уже идут по одной на язык.
Ещё одно различие, которое стоит держать в голове: языки, на которые вы обогащаете, выбираются для каждого прогона; язык, на котором написаны тексты самой схемы (её описания и подписи), закреплён за схемой; а язык, на котором разрешается идентичность, закреплён за каждой базой данных. Три разные настройки, и все звучат как «язык».
Поддержка нескольких языков встроена в каждый этап конвейера обогащения.
При слиянии результатов нескольких моделей многоязычные поля сравниваются по каждому языку.
| Сценарий | Разрешение |
|---|---|
| Модели согласны по английскому, но расходятся по французскому | Это не расхождение. Идентичность определяется на основном языке прогона, поэтому здесь засчитывается согласие: английский проходит как есть, а французский решается правилом объединения по языкам. Расхождения перевода никогда не передаются арбитру — платить модели за выбор между двумя верными переводами значило бы тратить впустую |
| Одна модель поддерживает арабский, другая — нет | Предпочитать не-null значение (сохраняется арабское) |
| Многоязычные массивы различаются по длине для разных моделей | Объединение всех элементов по языкам |