花拾录
← 返回知识库

大模型结构化输出实战:用 JSON Schema 约束让模型稳定返回可解析结果

人工智能AI2026/09/300 阅读0 评论

为什么需要结构化输出

大模型默认输出自然语言,直接解析容易失败。例如让模型提取用户信息,它可能返回“姓名:张三,年龄:25”,也可能返回“张三今年25岁”。这种不确定性让下游程序难以处理。结构化输出(如 JSON)配合 JSON Schema 约束,能强制模型按固定格式返回,大幅提升稳定性。

核心方法:JSON Schema 约束

JSON Schema 是一套描述 JSON 数据结构的规范。你可以定义字段名、类型、是否必需、取值范围等。将 Schema 提供给模型,并明确要求“只返回符合此 Schema 的 JSON”,模型便会遵循。

步骤一:定义 Schema

假设要从一段文本中提取人物信息,Schema 可以这样写:

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer", "minimum": 0 },
    "city": { "type": "string" }
  },
  "required": ["name", "age"],
  "additionalProperties": false
}

关键点:

  • required 确保必需字段一定出现。
  • additionalProperties: false 防止模型添加无关字段。
  • 用 enum 限定取值范围,例如 "gender": { "type": "string", "enum": ["男", "女"] }。

步骤二:构造提示词

将 Schema 嵌入提示词,并强调输出格式。示例:

请从以下文本中提取人物信息,并以 JSON 格式返回。
必须严格遵循以下 JSON Schema:
{上述 Schema}
只输出 JSON,不要包含任何其他文字。

文本:张三今年25岁,住在北京。

注意:不同模型对提示词的敏感度不同,建议把 Schema 放在显眼位置,并重复强调“只输出 JSON”。

步骤三:解析与校验

拿到输出后,先尝试 JSON.parse。如果失败,可能模型在 JSON 外包裹了说明文字。此时可以用正则提取第一个 { 到最后一个 } 之间的内容,再解析。解析成功后,用 JSON Schema 校验库(如 Python 的 jsonschema)验证数据是否符合定义。不符合则触发重试或降级处理。

提升稳定性的实用技巧

  1. 提供示例:在提示词中给一个输入输出示例(few-shot),模型模仿效果更好。
  2. 限制生成长度:设置 max_tokens 避免模型“画蛇添足”。
  3. 温度调低:temperature=0 或接近 0,减少随机性。
  4. 使用模型原生支持:部分模型提供“JSON 模式”或“结构化输出”参数,开启后模型内部会约束输出格式,比纯提示词更可靠。具体参数名请查阅所用模型的官方文档。
  5. 重试机制:解析失败时,将错误信息反馈给模型,让它重新生成。例如:“你上次返回的不是合法 JSON,请重新输出,只包含 JSON。”

常见坑与规避

  • 字段缺失:Schema 中标记 required,并在提示词中强调“必须包含所有必需字段”。
  • 类型错误:如年龄返回字符串 "25",可在 Schema 中指定 integer,模型通常能遵守;若仍出错,可在校验后做类型转换。
  • 嵌套结构:复杂对象建议拆分为多个简单 Schema,或使用 $ref 引用定义。
  • 中文乱码:确保请求和响应使用 UTF-8 编码。

总结

用 JSON Schema 约束大模型输出,是让 AI 应用从“玩具”走向“生产”的关键一步。核心流程:定义 Schema → 构造提示词 → 解析校验 → 失败重试。结合低温度、示例和模型原生 JSON 模式,可以显著提升稳定性。动手试试,你会发现模型返回可解析结果的比例大幅上升。

评论(0)

  • 还没有评论,来抢沙发~

相关文章