为AI工具定义JSON Schema时,properties描述已有字段怎样校验,并不自动要求字段出现。需要必填就写required,需要拒绝未知字段则配置additionalProperties;三者承担不同职责。

先用一个没有副作用的查询参数做练习
自拟工具只有query字段,要求它是非空字符串,不接受其他字段。Schema采用2020-12草案。下面代码需在隔离Python环境安装jsonschema包;本站已用该包运行这些断言,没有调用真实工具。
from jsonschema import Draft202012Validator
schema = {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {"query": {"type": "string", "minLength": 1}},
"required": ["query"],
"additionalProperties": False,
}
Draft202012Validator.check_schema(schema)
v = Draft202012Validator(schema)
assert v.is_valid({"query": "CSV"})
assert not v.is_valid({})
assert not v.is_valid({"query": ""})
assert not v.is_valid({"query": None})
assert not v.is_valid({"query": "CSV", "debug": True})
print("five cases passed")
| 输入 | 拒绝原因 |
|---|---|
| {} | 缺少required中的query |
| {"query":""} | 字符串长度不足 |
| {"query":null} | 类型不符合string |
| 额外带debug字段 | 不允许未声明字段 |
每去掉一项,允许范围都会变化
删去required后,空对象可以通过其余约束;删去additionalProperties限制后,额外的debug不会仅因未声明而失败;删去minLength则空字符串仍是合法字符串。检查模型输出时,应针对这些分支分别准备反例。
Schema通过之后还有业务检查
非空字符串也可能只是空格,或者包含超出业务允许范围的查询。身份、数据访问范围、速率限制和工具的真实执行条件不能交给Schema包办。AI提供的字段要当作输入数据处理,验证通过也不自动获得敏感操作权限。
复杂Schema使用allOf等组合时,额外字段的判定还涉及声明范围,不能把这个最小对象模板机械套用。接入不同模型平台前,也应核对其支持的Schema子集。
资料来源与继续学习
资料查阅日期:2026年10月15日。示例、阅读练习与操作建议由本站整理。
资料查阅与编辑日期:2026年10月15日。作者:玖柒。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







