八条验证规则确保 schema 质量。当 AI schema 生成过程中任何规则未通过时,错误会被发回给 AI 进行自动自我纠正。
AI 生成架构后,架构会经过全部 8 条验证规则。如果任何规则未通过,具体的错误消息会被汇总并作为反馈发送回 AI。随后 AI 会生成修正后的架构,并再次进行验证。此循环最多进行 6 次尝试(1 次初始 + 5 次重试)。
实际上,大多数 schema 在第一次尝试时就能通过。自我纠正循环是一个安全网,用于处理 AI 出现类型错误或遗漏字段的边缘情况。
并非所有规则都同时适用于 schema 生成和 AI 编辑。与输入数据进行比较的规则在编辑期间会被跳过,因为您可能有意添加或删除字段:
| 范围 | 已应用的规则 | 原因 |
|---|---|---|
| 生成 | 全部 8 条规则 | 输入数据可用于比较 |
| AI 编辑 | 仅规则 2、3、4、5 | 无输入数据;用户可能有意修改结构 |
专业领域的数量不得超过根据你的属性数量计算出的最大值。这可以防止 AI 为小型 schema 创建过多细粒度的领域。
Too many expertise domains: 6 defined, maximum is 3最大值按 floor(property_count / 6) 计算,最小为 1。具有 12 个属性的 schema 最多允许 2 个领域。
每个 schema 都必须至少定义一个属性。空的 schema 无法用于扩充。
Schema must have at least one property这可以捕获 AI 生成了有效 JSON 结构但忘记包含任何实际字段的情况。
每种属性类型都必须是标准 JSON Schema 类型之一:string、number、integer、boolean、array、object 或 null。
revenue: invalid type 'float'AI 有时会臆造出“float”“decimal”或“date”等类型。此规则会捕捉这些情况,并要求更正为有效类型。
所有 $ref 引用都必须指向模式的 $defs 部分中定义的实体。悬空引用会破坏增强流程。
manufacturer: $ref '#/$defs/Company' references undefined definition当 AI 创建诸如 #/$defs/Company 的引用时,$defs 块中必须有匹配的 Company 定义。
每个属性的专业领域值都必须与已定义的专业领域之一匹配。这可以防止拼写错误和不一致。
revenue: expertise 'finance' not in defined domains: ['financial_analyst']AI 可能会使用“finance”而非已定义的“financial_analyst”键。此规则会捕捉这种不匹配,以便 AI 进行更正。
非对象、非保留的属性必须分配 expertise domain。这可确保每个可 enrich 的字段都由专门的领域来处理。
revenue: expertise is required for non-object types对象类型无需检测,因为其子属性各自携带自身的 expertise domain。已保留的字段无需检测,因为它们会原样传递。
每个属性的 schema 类型必须与你输入数据中对应值的实际 Python 类型相匹配。
revenue: type mismatch - input is number but schema says 'string'如果您的输入包含 "revenue": 42.5,则 schema 必须使用类型 "number" 或 "integer",而不是 "string"。验证器很灵活:它接受用 "number" 表示整数,反之亦然。
输入数据中的每个键都必须作为一个属性出现在生成的 schema 中。这可以防止 AI 悄悄丢弃字段。
Missing property from input: 'headquarters'如果您的输入 JSON 包含 "headquarters" 键,则生成的 schema 必须包含它。这可确保完整覆盖您的数据。
规则 7(类型匹配)使用自动类型推断,将您的输入值与 schema 声明的类型进行比较。该推断较为灵活,以避免误报:
| 输入值 | 推断的类型 | 同时接受 |
|---|---|---|
| true / false | boolean | (仅布尔值) |
| 42 | integer | number |
| 3.14 | number | integer |
| "hello" | string | (仅限字符串) |
| [1, 2, 3] | array | (仅数组) |
| {"key": "val"} | object | (仅对象) |
注意:布尔值在整数之前进行检查,因为在某些语言中布尔值是整数的子类型。此顺序可防止 true 被推断为整数。