如何利用 JSON Schema 强制 AI 稳定输出可解析的结构化数据
别再在 Prompt 里写「请务必返回 JSON 格式,不要包含任何解释」这种废话了,因为 LLM 只要在输出量大的时候,就极容易在 JSON 前后加上
... 或者随口来一句「这是你要的结果:」,直接导致 json.loads() 崩溃。最稳的方案是直接给 AI 喂 JSON Schema,并配合模型的 response_format 强制约束。以 OpenAI 或 Claude 的 API 为例,如果你想让 AI 提取用户评论的情绪和关键点,不要写自然语言描述,直接定义 Schema。
这里分享一套我在做自动化数据清洗时用的配置逻辑:
1. 定义严谨的 Schema
不要只定义类型,要用 enum 限制选项,用 required 强制必填。
{
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral"]
},
"key_points": {
"type": "array",
"items": { "type": "string" },
"maxItems": 3
},
"confidence_score": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": ["sentiment", "key_points", "confidence_score"],
"additionalProperties": false
}2. 实战调用技巧
在 Cursor 的 .cursorrules 或者 API 调用中,将上述 Schema 放入 response_format 的 json_schema 字段。如果你用的是 Claude Code,可以在 System Prompt 中直接贴入这个 Schema,并加上一句:「Strictly adhere to the following JSON Schema. No markdown wrapping.」
3. 踩坑经验与效率提升
- 避免使用
additionalProperties: true:如果不设为false,AI 经常会自作聪明地增加一些它认为有用的字段,导致你的后端解析代码因为出现了预期外的 Key 而报错。 - 处理-1 现象:当 Schema 过于复杂(比如多层嵌套)时,AI 可能会在某个深层节点丢失格式。建议将深层结构扁平化,或者拆分成多个简单的 Prompt 串联。
- 验证环节:拿到输出后,不要直接用,先过一遍
jsonschema库进行校验。
from jsonschema import validate
import json
# 假设 ai_response 是 AI 返回的字符串
try:
data = json.loads(ai_response)
validate(instance=data, schema=my_schema)
except Exception as e:
# 触发重试机制或记录错误
print(f"Schema validation failed: {e}")这种做法把「概率性」的文本生成变成了「确定性」的数据接口。比起在 Prompt 里求 AI 听话,给它一套数学意义上的约束标准要高效得多。
免费 AI 工具箱 · 全部完全免费
AI工具与大模型实操经验整理在Claude实战技巧汇总,有不少直接可参考的案例。
全部回复 (0)
还没有回复,来发第一条吧!
