使用 AI 从示例数据生成结构化 JSON 模式,并进行自动自我校正和智能后处理。
Schema 生成会将原始实体数据转换为带类型和注释的 JSON Schema,精确定义在数据丰富过程中要提取哪些信息。您无需手动编写 Schema,只需粘贴示例 JSON,让 AI 分析结构、推断类型、分配专业领域并提出改进建议。
生成过程并非一个大提示词,而是一连串职责单一的小调用,其中大多数并发运行 —— 正是这一点让小而廉价的模型也能产出可用的模式,因为每次调用只针对其能完整看到的材料回答一个狭窄的问题。
"8.275 h" 变为 half_life_seconds: 29790),原生类型无法承载的日期则变为整数年份。每个观察到的值都必须能够印证该结论,否则该属性保持为文本。保存的是改写后的样本。{"en": "...", "fr": "..."})会折叠为单个多语言值。每个步骤都会独立重试(最多 3 次),且各次尝试的结果会累积,因此分片作答的模型仍能收敛。之后该步骤会接受已获得的内容,缺口以确定性方式填补——弱模型只会让描述质量下降,而不会导致生成失败。只有身份识别和领域路由才允许让整次运行失败。每次调用都会作为独立的提示计费并记录,因此记录中能清楚看到每一笔花费的去向。
你可以传入同一实体类型的多个样本,而不只是一个——这样 schema 会涵盖它们字段的并集,某个样本中缺少的字段将变为可空,而在这些样本中出现的值会成为真实的示例。字段名称必须一致:描述不同实体类型的样本会被拒绝,数组内彼此没有任何共同字段的对象也会被拒绝,因为将无法识别它们的行。样本编辑器会在你花费一次生成之前标记出任何此类差异。
带有自身单位的值会在推导 schema 之前先转换为数字,因为由 "8.275 h" 和 "85 ms" 组成的列无法排序、无法按范围筛选,也无法聚合。单位会移入属性名(half_life_seconds),像 "stable" 这样的非数值替代内容会变为 null,而早于公元 1 年的日期会变为整数年份(公元前为负数)——任何日期类型都无法存储此类值,而文本排序又会出错。你的示例面板会相应更新,因此它始终显示 schema 所描述的示例。凡是转换无法确切识别的内容,都会原样保留为你所写的样子。
由于每一步只回答一个狭窄的问题,纠正也可以很局部:该步骤的校验器会保留返回结果中可用的部分,只针对缺失的内容再次询问。没有任何内容需要从头重新生成,因此部分正确的答案是进展,而不是一次浪费的尝试。
八条校验规则仍会在模式组装完成后作为最终检查运行——类型正确性、专业领域分配、引用完整性、完整度。到这一步,它们只是安全网,而非纠错机制。各条规则的详情见校验规则指南。
生成的 schema 不仅仅是简单的类型定义。每个属性都包含指导扩充过程的元数据:
JSON Schema 类型(string、number、integer、boolean、array、object)
告诉 AI 要查找哪些信息的上下文描述
由哪个专家领域(财务、监管等)提供该值
该字段是否属于标识该实例的组成部分。键同时承担两项职责:让增强提示词聚焦到正确的实体上,同时也是融合匹配数组元素的依据。键仍然可以为空——用于区分外观相似的同级项的限定词,即使某些整类数据确实没有它,也依然具有标识作用
当某个字符串的取值来自一个可完全枚举的小集合(状态、等级、分类代码)时,生成过程会提出这些成员——并采用你的样本中的拼写方式——这样增强就不会漂移到某个同义词上
字段是否可以为 null——不可为空的字段是进入数据库的必需项
该字段是否应跨多种语言进行富集
是否在富集过程中保持原始值不变
引导 AI 采用正确格式的真实示例值
字符串值的机器可校验形态:格式错误的回答会被拒绝并重试,存储的值保持规范形式。生成过程只会声明样本能够证实的具名格式(date、time、date-time、uuid、email、uri、ipv4、ipv6)——正则表达式是对尚未出现的值所作的预测,一旦写错,该字段的每次富集都会失败,因此正则需要你自己在编辑器中添加
AI 会根据语义含义将 schema 属性归类到不同的专业领域。例如,一个制药公司的 schema 可能包含“财务分析师”“监管专家”和“公司信息”等领域。多专业策略会利用这些领域并行运行专门的 LLM 调用,以获得更深入的结果。
专业领域的数量会根据你数据的属性数量自动限制,以防止过度碎片化:
片段组装完毕后,由确定性步骤来处理所有不应交给模型决定的内容——并以你的实际输入数据作为依据:
只要某个字段在任一样本中缺失或为 null,无论模型如何作答,该字段都会变为可空——这样未知值就是一个可接受的答案,而不是数据质量问题。样本只能放宽限制:少量样本只能证明这些实例中存在该字段,永远无法证明该类型的每个实例都存在——因此模型也有一票,两者按“或”合并。
无法共存的属性按规则调和,而不是再次询问:preserve 优先于 multilingual 和 nullable,保留下来的封闭词汇表会清除 multilingual,而键属性绝不保留枚举。
数组内的每个对象都保证至少有一个键属性——它是融合去重所依据的单位,因此没有键的数组项会导致无法合并两个模型的结果。
系统会从 schema 中收集所有唯一的专业领域,用于指标统计和策略配置。
架构会用某种语言描述自身——它的类型名称、属性说明、专业领域标签和建议。这与你要富集出的目标语言是两回事。生成时可以指定一种语言,也可以留空,由样本自身属性名的语言决定:法语样本不会再生成英语架构。该选择会被保存,因此后续的 AI 编辑会继续使用同一种语言,而不会又漂移回英语。
开始时无需示例数据。只需描述实体类型——可选择提供文档作为依据,或使用网页搜索对照现实进行核对——平台便会为你生成示例。要求生成多个,你会得到多个不同的实例,而不是同一实例的重复表述。
第一个示例还会在同一次调用中决定其余示例的对象。分 N 次独立索要“一个例子”,几乎必然会得到 N 次同一个知名实例;预先指定全部对象,才能让它们各不相同。
其余示例会依据示例 1 的结构(作为契约)并行生成,而不只是被要求与之匹配——因此变体无法重命名、新增或删除字段。仍然重复或格式错误的示例会在有限次数的重试中重新请求;若最终未达到目标数量,系统会明确告知,而不是悄悄给出更少的结果。
语言默认为 auto,先根据你请求中的用词推断,再参考所附的文档。你添加的额外指令具有约束力:要么被执行,要么响应会告诉你哪些无法执行以及原因 —— 绝不会被悄悄忽略。
在父级对象的上下文中解读属性名,数一数它可能指向多少种不同的含义。只有一种就是明确的。有两种或更多,各个模型就会各选其一,于是该列最终混杂着对不同问题的回答——公司上的 annual_revenue 可以指集团也可以指该实体,可以是毛收入也可以是净收入,还可能是若干币种之一。而一种含义都没有——名称指向的东西该父级根本不具备——则更糟:无从查找,模型就会凭空编造一个值。
生成阶段会两次对抗这一问题:提示词本身要求属性名只能有一种解读,随后还会对完成的架构做一轮后处理,为仍存在歧义的属性添加标注。在这一阶段,补救方式是重命名——描述是根据名称生成的,因此描述无法消除它所源自的名称的歧义,而且此时还没有任何东西依赖该架构。示例生成会对示例执行同样的检查,并在你看到之前就应用这些重命名。自由文本内容——描述、摘要、备注——永远不会被标记:措辞可以千差万别,但所问的问题是明确的。
被标记的属性会在工作流编辑器中显示“有歧义”徽章,并列出该名称可能的解读。架构一旦上线,补救方式便转为改写描述——既锁定唯一含义,又不破坏数据契约。完整的评判标准及补救方式请参阅歧义检查指南。
根据描述生成示例实体时,你可以启用“使用网页搜索”,让模型在网络上查找最新事实,而不仅仅依赖其训练数据。这会产生更新鲜、更准确的示例值——尤其是价格、员工人数或近期发布等变化迅速的事实。该选项仅对提供商支持内置网页搜索的模型显示,搜索调用会像任何其他模型用量一样由提供商计费。
生成后,你可以使用自然语言指令修改架构。输入命令,AI 会在保留现有架构结构的同时应用更改。每次编辑还会生成 5 条进一步改进的建议。
添加一个 employee_count 整数字段创建包含城市和国家/地区的嵌套地址对象为所有文本字段添加法语描述使用 $defs 定义母公司引用将 website 字段标记为可为空AI 编辑会使用生成规则的一个子集(类型检查、引用完整性、专业领域一致性)进行验证,但不会与输入数据进行比较,因为你可能有意添加或删除字段。
模式生成和 AI 编辑都会生成 5 条针对性建议,覆盖不同的改进类别:
建议会在工作流编辑器中以可点击的标签形式出现——点击其中一个即可自动填充 AI 编辑输入框并应用它。