多语言富集 - Entity Enricher 文档

多语言富集

Entity Enricher 最多可同时生成 40 种语言的增强结果。多语言字段以语言为键的 JSON 对象形式存储——这种格式便于移植、可查询,并兼容所有主流数据库。

工作流编辑器:多语言开关

在 schema 编辑器中,在任何字符串或字符串数组属性上切换多语言标志。启用后,LLM 会返回以语言为键的对象包装的值,而不是普通值。

工作原理

1
将字段标记为多语言
在 schema 编辑器中,勾选字符串或数组属性上的多语言复选框。该标志在 JSON schema 中存储为 multilingual: true
2
选择目标语言
在侧边栏选项中,从 40 种支持的语言中选择一种或多种语言。增强提示词会指示 LLM 以每种所选语言生成值。首个选中的语言即主语言:它会以“主”徽章高亮显示,并用于所有非多语言字符串字段(未标记 multilingual: true 的描述、名称等)。点击其他任意语言块上的 按钮可将其设为主语言。后端还会过滤掉 LLM 可能输出的、不在你所选范围内的多余语言键。
3
LLM 返回以语言为键的输出
动态 Pydantic 模型将多语言字段封装为 dict[str, T],其中键为 ISO 639-1 语言代码,值与字段类型匹配。

数据格式

多语言值以 JSON 对象形式存储,语言代码作为键。选择此格式而非其他方案,是因为它具有可移植性、可查询性和存储效率。

多语言字符串
Schema 属性
"description": {
"type": "string",
"multilingual": true
}
丰富化输出
"description": {
"en": "A global pharma company",
"fr": "Une entreprise pharma mondiale",
"ar": "شركة أدوية عالمية"
}
多语言数组
Schema 属性
"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 使用 格式 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、电子邮件、电话号码
  • 布尔标志

多语言标志不能与 preserve 标志同时使用:受保留的值以单一语言原样传递,不做翻译。schema 编辑器会禁用相互冲突的开关,API 也会拒绝同时带有这两个标志的 schema。键字段(自然键或数据库键)可以是多语言的——此时 entity 标识将使用 schema 锁定的键语言。

有效的字段类型

多语言标志仅对某些属性类型有效。schema 编辑器会自动强制执行此规则。

属性类型多语言?输出格式
stringdict[str, str]
number / integerdict[str, float]
booleandict[str, bool]
基本类型数组dict[str, list[str]]
object请改为标记对象内部的各个字段——除非该对象是每种语言一行,见下文
对象数组改为标记项内部的各个字段
$ref改为标记被引用实体内部的字段

多语言不能与什么搭配使用

多语言值是一个语言映射,而不是单个值——因此约束单个值的属性无法应用于它。这类冲突会在生成架构时解决,手动保存架构时则会被拒绝,而不会等到富集时才失败。

封闭词汇表胜出

限定为固定成员集合的属性不能同时是多语言的:这些成员是规范化的标记,下游数据库会用它们约束某一列。翻译后的标签应放在你自己的查找表中,以该标记为键。

format 与 pattern 不适用

日期、UUID 或经正则校验的代码只有一种机器可读形式,而不是每种语言各有一种。同时兼具两者的属性无法保存。

保留优先于多语言

保留值是原样返回的你自己的数据,因此没有什么需要翻译。

键可以是多语言的

这一项是允许的。标识只在一种语言中解析——在架构首次发布到数据库时即固定下来——因此名称可以被翻译,而其标识不会随之改变。

当语言本身是数据而非译文时

有些数据源把语言建模为行:一个列表,其中每一项都带有一个语言代码及其自身的值,每种语言一项。这与多语言属性的结构不同,两者不可混用。生成过程会把这类属性识别为该对象的语言轴——前提是所观察到的每个值确实都是语言代码——随后为整个子树关闭内置的多语言机制。对对象通常建议的“逐个标记项内字段”做法在这里恰恰是错误的解法:它会为本已按语言分行的数据再生成一遍译文。

还有一个需要分清的区别:你增强到的语言是每次运行时的选择;架构自身文本(其描述和标签)所用的语言固定在架构上;而标识解析所用的语言按数据库固定。这是三项彼此独立的设置,但听起来都像是“语言”。

富集管道集成

多语言支持贯穿富集流程的每个阶段。

Schema
multilingual: true
作用于选定字段
提示词构建器
注入语言
指令 + 示例
动态模型
str → dict[str, str]
Pydantic 校验
JSONB 存储
输出中以语言为键的
对象
多专业领域: 使用多专业领域策略时,每个专业领域都会在各自的 prompt 中收到多语言指令。各字段按专业领域独立翻译,然后合并到最终输出中。

融合中的多语言字段

融合来自多个模型的结果时,多语言字段会按语言进行比较。

场景解析
模型在英语上一致,但在法语上存在分歧这不算分歧。标识以本次运行的主语言判定,因此这算作一致:英文直接通过,法文则由按语言的合并规则处理。翻译差异永远不会提交仲裁——花钱让模型在两个都正确的译文之间做选择毫无意义
一个模型支持阿拉伯语,另一个则不支持优先选择非空值(保留阿拉伯语)
多语言数组在各模型间长度不同每种语言中所有项的并集