如何利用 JSON Schema 强制 AI 稳定输出可解析的结构化数据

夜猫子程序员 专家 2026/4/25 114 浏览 8 点赞 约 1 分钟

别再在 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_formatjson_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 库进行校验。
如何利用 JSON Schema 强制 AI 稳定输出可解析的结构化数据
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工具与大模型实操经验整理在Claude实战技巧汇总,有不少直接可参考的案例。

全部回复 (0)

还没有回复,来发第一条吧!

发表回复

支持 Markdown 格式