如何利用 JSON Schema 强制 AI 输出稳定且可解析的结构化数据
json.loads() 抛出异常。想要 100% 稳定解析,最硬核的方案是把 JSON Schema 直接喂给模型,或者利用 OpenAI/Claude 的 Structured Outputs 模式。
我最近在做一个自动化抓取分析工具,需要 AI 把非结构化文本转成严格的 JSON。如果只写描述,AI 经常把 price 字段一会儿给成 "100"(字符串),一会儿给成 100(数字)。
实操配置技巧:
不要在 Prompt 里用文字描述字段,直接定义一个标准的 JSON Schema 传给 API。如果你用的是 Cursor 的 .cursorrules 或者 Claude 的 System Prompt,可以这样定义:
{
"type": "object",
"properties": {
"product_name": { "type": "string" },
"price": { "type": "number" },
"tags": {
"type": "array",
"items": { "type": "string" },
"maxItems": 5
}
},
"required": ["product_name", "price"],
"additionalProperties": false
}几个能显著提升效率的坑位避雷:
1. 禁用 additionalProperties
一定要加上 "additionalProperties": false。如果不加,AI 偶尔会自作聪明地增加一些它认为有用的字段(比如 confidence_score),这会直接弄乱你的后端类型定义。
2. 枚举值(Enum)是强约束的神器
如果你需要 AI 在几个固定选项中选择,别写“请从 A, B, C 中选一个”,直接用 enum:
"status": {
"type": "string",
"enum": ["success", "pending", "failed"]
}3. 强制要求不带 Markdown 标记
如果你是通过 API 调用而非专用 SDK,在 Prompt 结尾加上:Return ONLY the raw JSON string. No markdown code blocks, no preamble. 这样可以省去正则过滤 `json 标签的步骤。
实际效果对比:
之前用自然语言描述,解析失败率大概在 15% 左右(主要是多了废话或字段类型漂移);换成 JSON Schema 约束后,配合 response_format: { "type": "json_schema", ... } 参数,解析成功率基本达到了 100%。
现在的开发流是:先在 JSON Schema 校验器里定义好结构 → 将 Schema 粘贴进 System Prompt → 编写 Pydantic 模型(Python)进行反序列化。这样整个链路从 AI 输出到代码运行是类型安全的。
全部回复 (0)
还没有回复,来发第一条吧!
