AI 模式生成 - Entity Enricher 文档

AI 模式生成

使用 AI 从示例数据生成结构化 JSON 模式,并进行自动自我校正和智能后处理。

工作原理

Schema 生成会将原始实体数据转换为带类型和注释的 JSON Schema,精确定义在数据丰富过程中要提取哪些信息。您无需手动编写 Schema,只需粘贴示例 JSON,让 AI 分析结构、推断类型、分配专业领域并提出改进建议。

生成流水线

生成过程并非一个大提示词,而是一连串职责单一的小调用,其中大多数并发运行 —— 正是这一点让小而廉价的模型也能产出可用的模式,因为每次调用只针对其能完整看到的材料回答一个狭窄的问题。

  1. 规范化样本(不调用 LLM)—— 自带单位的值会变成把单位写进名称的数字("8.275 h" 变为 half_life_seconds: 29790),原生类型无法承载的日期则变为整数年份。每个观察到的值都必须能够印证该结论,否则该属性保持为文本。保存的是改写后的样本。
  2. 身份界定 —— 一次调用,先于其他所有调用运行,因为它是最后一个被允许改动样本的调用。若关联数组中的某一项既包含该实体自身的事实,又包含它与父级配对关系的事实,该项会被重构:配对相关的事实原地保留,实体自身的事实嵌套到一个命名子对象下。若不这样做,两类事实就会共用同一个身份。
  3. 推导骨架(不调用 LLM)—— 属性树、JSON 类型和可空性直接来自样本;重复出现的结构以及类似实体的数组项会成为可复用的定义。本地化对象(如 {"en": "...", "fr": "..."})会折叠为单个多语言值。
  4. 并行提问 —— 多个并发调用分别确定实体的身份与命名、行为标志(键、保留、多语言、可空,以及格式建议)、整数字段是否真正表示离散值、哪些字符串来自封闭词表,以及属性如何路由到各专业领域。
  5. 撰写文档 —— 每个专业领域一次调用,以该领域的角色口吻生成每个属性的描述和示例,并就该值是否真的可以缺失给出自己的第二意见。
  6. 组装、校验、保存(不调用 LLM)—— 合并各个片段,运行8 条校验规则作为安全网,由确定性的后处理解决标志冲突,随后保存架构——并按内容哈希去重,因此相同的架构不会重复保存。

每个步骤都会独立重试(最多 3 次),且各次尝试的结果会累积,因此分片作答的模型仍能收敛。之后该步骤会接受已获得的内容,缺口以确定性方式填补——弱模型只会让描述质量下降,而不会导致生成失败。只有身份识别和领域路由才允许让整次运行失败。每次调用都会作为独立的提示计费并记录,因此记录中能清楚看到每一笔花费的去向。

你可以传入同一实体类型的多个样本,而不只是一个——这样 schema 会涵盖它们字段的并集,某个样本中缺少的字段将变为可空,而在这些样本中出现的值会成为真实的示例。字段名称必须一致:描述不同实体类型的样本会被拒绝,数组内彼此没有任何共同字段的对象也会被拒绝,因为将无法识别它们的行。样本编辑器会在你花费一次生成之前标记出任何此类差异。

带有自身单位的值会在推导 schema 之前先转换为数字,因为由 "8.275 h""85 ms" 组成的列无法排序、无法按范围筛选,也无法聚合。单位会移入属性名(half_life_seconds),像 "stable" 这样的非数值替代内容会变为 null,而早于公元 1 年的日期会变为整数年份(公元前为负数)——任何日期类型都无法存储此类值,而文本排序又会出错。你的示例面板会相应更新,因此它始终显示 schema 所描述的示例。凡是转换无法确切识别的内容,都会原样保留为你所写的样子。

逐步自我纠正

由于每一步只回答一个狭窄的问题,纠正也可以很局部:该步骤的校验器会保留返回结果中可用的部分,只针对缺失的内容再次询问。没有任何内容需要从头重新生成,因此部分正确的答案是进展,而不是一次浪费的尝试。

示例:30 个属性上的标记步骤

第 1 次尝试模型回答了其中 22 个,并把回复拆分到多次工具调用中——这是小模型上常见的失败模式。这 22 个全部保留。
重试追问只索要剩余的 8 个属性——问题更短,更有可能被完整回答。
第 2 次尝试又到达 6 个。最后 2 个回退为确定性默认值,缺口会记录在生成记录上,而不会使其失败。

八条校验规则仍会在模式组装完成后作为最终检查运行——类型正确性、专业领域分配、引用完整性、完整度。到这一步,它们只是安全网,而非纠错机制。各条规则的详情见校验规则指南。

schema 包含哪些内容

生成的 schema 不仅仅是简单的类型定义。每个属性都包含指导扩充过程的元数据:

类型

JSON Schema 类型(string、number、integer、boolean、array、object)

描述

告诉 AI 要查找哪些信息的上下文描述

专业领域

由哪个专家领域(财务、监管等)提供该值

该字段是否属于标识该实例的组成部分。键同时承担两项职责:让增强提示词聚焦到正确的实体上,同时也是融合匹配数组元素的依据。键仍然可以为空——用于区分外观相似的同级项的限定词,即使某些整类数据确实没有它,也依然具有标识作用

封闭词汇表

当某个字符串的取值来自一个可完全枚举的小集合(状态、等级、分类代码)时,生成过程会提出这些成员——并采用你的样本中的拼写方式——这样增强就不会漂移到某个同义词上

可为 Null

字段是否可以为 null——不可为空的字段是进入数据库的必需项

多语言

该字段是否应跨多种语言进行富集

保留

是否在富集过程中保持原始值不变

示例

引导 AI 采用正确格式的真实示例值

格式 / 模式

字符串值的机器可校验形态:格式错误的回答会被拒绝并重试,存储的值保持规范形式。生成过程只会声明样本能够证实的具名格式(date、time、date-time、uuid、email、uri、ipv4、ipv6)——正则表达式是对尚未出现的值所作的预测,一旦写错,该字段的每次富集都会失败,因此正则需要你自己在编辑器中添加

专业领域检测

AI 会根据语义含义将 schema 属性归类到不同的专业领域。例如,一个制药公司的 schema 可能包含“财务分析师”“监管专家”和“公司信息”等领域。多专业策略会利用这些领域并行运行专门的 LLM 调用,以获得更深入的结果。

领域数量限制

专业领域的数量会根据你数据的属性数量自动限制,以防止过度碎片化:

5 个属性
1 个领域
12 个属性
2 个领域
30 个属性
5 个领域
60 个属性
10 个领域

后处理

片段组装完毕后,由确定性步骤来处理所有不应交给模型决定的内容——并以你的实际输入数据作为依据:

可空类型放宽

只要某个字段在任一样本中缺失或为 null,无论模型如何作答,该字段都会变为可空——这样未知值就是一个可接受的答案,而不是数据质量问题。样本只能放宽限制:少量样本只能证明这些实例中存在该字段,永远无法证明该类型的每个实例都存在——因此模型也有一票,两者按“或”合并。

标记冲突解决

无法共存的属性按规则调和,而不是再次询问:preserve 优先于 multilingual 和 nullable,保留下来的封闭词汇表会清除 multilingual,而键属性绝不保留枚举。

数组条目键修复

数组内的每个对象都保证至少有一个键属性——它是融合去重所依据的单位,因此没有键的数组项会导致无法合并两个模型的结果。

专业领域集合

系统会从 schema 中收集所有唯一的专业领域,用于指标统计和策略配置。

模式所使用的语言

架构会用某种语言描述自身——它的类型名称、属性说明、专业领域标签和建议。这与你要富集出的目标语言是两回事。生成时可以指定一种语言,也可以留空,由样本自身属性名的语言决定:法语样本不会再生成英语架构。该选择会被保存,因此后续的 AI 编辑会继续使用同一种语言,而不会又漂移回英语。

生成样本本身

开始时无需示例数据。只需描述实体类型——可选择提供文档作为依据,或使用网页搜索对照现实进行核对——平台便会为你生成示例。要求生成多个,你会得到多个不同的实例,而不是同一实例的重复表述。

所有实例一次性选定

第一个示例还会在同一次调用中决定其余示例的对象。分 N 次独立索要“一个例子”,几乎必然会得到 N 次同一个知名实例;预先指定全部对象,才能让它们各不相同。

第一个示例确定结构

其余示例会依据示例 1 的结构(作为契约)并行生成,而不只是被要求与之匹配——因此变体无法重命名、新增或删除字段。仍然重复或格式错误的示例会在有限次数的重试中重新请求;若最终未达到目标数量,系统会明确告知,而不是悄悄给出更少的结果。

语言与你自己的指令

语言默认为 auto,先根据你请求中的用词推断,再参考所附的文档。你添加的额外指令具有约束力:要么被执行,要么响应会告诉你哪些无法执行以及原因 —— 绝不会被悄悄忽略。

歧义检查

在父级对象的上下文中解读属性名,数一数它可能指向多少种不同的含义。只有一种就是明确的。有两种或更多,各个模型就会各选其一,于是该列最终混杂着对不同问题的回答——公司上的 annual_revenue 可以指集团也可以指该实体,可以是毛收入也可以是净收入,还可能是若干币种之一。而一种含义都没有——名称指向的东西该父级根本不具备——则更糟:无从查找,模型就会凭空编造一个值。

生成阶段会两次对抗这一问题:提示词本身要求属性名只能有一种解读,随后还会对完成的架构做一轮后处理,为仍存在歧义的属性添加标注。在这一阶段,补救方式是重命名——描述是根据名称生成的,因此描述无法消除它所源自的名称的歧义,而且此时还没有任何东西依赖该架构。示例生成会对示例执行同样的检查,并在你看到之前就应用这些重命名。自由文本内容——描述、摘要、备注——永远不会被标记:措辞可以千差万别,但所问的问题是明确的。

被标记的属性会在工作流编辑器中显示“有歧义”徽章,并列出该名称可能的解读。架构一旦上线,补救方式便转为改写描述——既锁定唯一含义,又不破坏数据契约。完整的评判标准及补救方式请参阅歧义检查指南。

根据描述生成示例实体时,你可以启用“使用网页搜索”,让模型在网络上查找最新事实,而不仅仅依赖其训练数据。这会产生更新鲜、更准确的示例值——尤其是价格、员工人数或近期发布等变化迅速的事实。该选项仅对提供商支持内置网页搜索的模型显示,搜索调用会像任何其他模型用量一样由提供商计费。

AI 模式编辑

生成后,你可以使用自然语言指令修改架构。输入命令,AI 会在保留现有架构结构的同时应用更改。每次编辑还会生成 5 条进一步改进的建议。

编辑命令示例

添加一个 employee_count 整数字段
创建包含城市和国家/地区的嵌套地址对象
为所有文本字段添加法语描述
使用 $defs 定义母公司引用
将 website 字段标记为可为空

AI 编辑会使用生成规则的一个子集(类型检查、引用完整性、专业领域一致性)进行验证,但不会与输入数据进行比较,因为你可能有意添加或删除字段。

AI 建议

模式生成和 AI 编辑都会生成 5 条针对性建议,覆盖不同的改进类别:

数据完整性可用于丰富实体的缺失字段
数据质量封闭词表、可空性、类型修正
关系嵌套结构,通过 $defs 引用 entity
国际化多语言翻译、区域设置支持
业务上下文特定领域的字段与专长领域分组

建议会在工作流编辑器中以可点击的标签形式出现——点击其中一个即可自动填充 AI 编辑输入框并应用它。

后续步骤