验证规则 - Entity Enricher 文档

验证规则

八条验证规则确保 schema 质量。当 AI schema 生成过程中任何规则未通过时,错误会被发回给 AI 进行自动自我纠正。

自我纠正的工作原理

AI 生成架构后,架构会经过全部 8 条验证规则。如果任何规则未通过,具体的错误消息会被汇总并作为反馈发送回 AI。随后 AI 会生成修正后的架构,并再次进行验证。此循环最多进行 6 次尝试(1 次初始 + 5 次重试)。

纠正流程

AI 生成包含属性、类型、专业领域和描述的 schema
验证器检查依次应用 8 条规则,收集所有错误
如果出错返回的错误消息:“修复这些问题:[revenue: 类型不匹配...]”
AI 修正生成已更新的 schema 以解决报告的错误
重复直到所有规则通过或达到最大尝试次数

实际上,大多数 schema 在第一次尝试时就能通过。自我纠正循环是一个安全网,用于处理 AI 出现类型错误或遗漏字段的边缘情况。

生成与编辑规则

并非所有规则都同时适用于 schema 生成和 AI 编辑。与输入数据进行比较的规则在编辑期间会被跳过,因为您可能有意添加或删除字段:

范围已应用的规则原因
生成全部 8 条规则输入数据可用于比较
AI 编辑仅规则 2、3、4、5无输入数据;用户可能有意修改结构

8 条规则

规则 1

专业领域数量

范围:仅生成

专业领域的数量不得超过根据你的属性数量计算出的最大值。这可以防止 AI 为小型 schema 创建过多细粒度的领域。

错误示例: Too many expertise domains: 6 defined, maximum is 3

最大值按 floor(property_count / 6) 计算,最小为 1。具有 12 个属性的 schema 最多允许 2 个领域。

规则 2

至少一个属性

范围:两者

每个 schema 都必须至少定义一个属性。空的 schema 无法用于扩充。

错误示例: Schema must have at least one property

这可以捕获 AI 生成了有效 JSON 结构但忘记包含任何实际字段的情况。

规则 3

有效的 JSON Schema 类型

范围:两者

每种属性类型都必须是标准 JSON Schema 类型之一:string、number、integer、boolean、array、object 或 null。

错误示例: revenue: invalid type 'float'

AI 有时会臆造出“float”“decimal”或“date”等类型。此规则会捕捉这些情况,并要求更正为有效类型。

规则 4

$ref 目标存在

范围:两者

所有 $ref 引用都必须指向模式的 $defs 部分中定义的实体。悬空引用会破坏增强流程。

错误示例: manufacturer: $ref '#/$defs/Company' references undefined definition

当 AI 创建诸如 #/$defs/Company 的引用时,$defs 块中必须有匹配的 Company 定义。

规则 5

专业领域键已存在

范围:两者

每个属性的专业领域值都必须与已定义的专业领域之一匹配。这可以防止拼写错误和不一致。

错误示例: revenue: expertise 'finance' not in defined domains: ['financial_analyst']

AI 可能会使用“finance”而非已定义的“financial_analyst”键。此规则会捕捉这种不匹配,以便 AI 进行更正。

规则 6

需要专业领域

范围:仅生成

非对象、非保留的属性必须分配 expertise domain。这可确保每个可 enrich 的字段都由专门的领域来处理。

错误示例: revenue: expertise is required for non-object types

对象类型无需检测,因为其子属性各自携带自身的 expertise domain。已保留的字段无需检测,因为它们会原样传递。

规则 7

类型与输入数据匹配

范围:仅生成

每个属性的 schema 类型必须与你输入数据中对应值的实际 Python 类型相匹配。

错误示例: revenue: type mismatch - input is number but schema says 'string'

如果您的输入包含 "revenue": 42.5,则 schema 必须使用类型 "number" 或 "integer",而不是 "string"。验证器很灵活:它接受用 "number" 表示整数,反之亦然。

规则 8

所有输入属性均已提供

范围:仅生成

输入数据中的每个键都必须作为一个属性出现在生成的 schema 中。这可以防止 AI 悄悄丢弃字段。

错误示例: Missing property from input: 'headquarters'

如果您的输入 JSON 包含 "headquarters" 键,则生成的 schema 必须包含它。这可确保完整覆盖您的数据。

类型推断

规则 7(类型匹配)使用自动类型推断,将您的输入值与 schema 声明的类型进行比较。该推断较为灵活,以避免误报:

输入值推断的类型同时接受
true / falseboolean(仅布尔值)
42integernumber
3.14numberinteger
"hello"string(仅限字符串)
[1, 2, 3]array(仅数组)
{"key": "val"}object(仅对象)

注意:布尔值在整数之前进行检查,因为在某些语言中布尔值是整数的子类型。此顺序可防止 true 被推断为整数。

后续步骤