HiDeepSeekDev
空闲特惠
教程指南DeepSeekDeepInferJSON Schema结构化输出

DeepInfer 结构化输出怎么用:JSON Schema、正则与 EBNF 的入口和验收

按官方示例说明 SamplingParams.so_args 的三类约束,以及生成结束、解析与业务校验的不同职责。

快速结论

离线框架通过 so_args 配置 regex、json 或 ebnf;JSON Schema 在官方示例中序列化为字符串。它不是可直接复制到云端 HTTP 请求的参数。

  • 当前示例的 schema_type 为 regex、json、ebnf。
  • 格式符合约束不代表内容事实正确。
  • 必须检查结束状态,不能把截断输出当作合格结构。

本次更新:10 月 22 日核对来源后新增;原始消息日期、发布状态与适用范围在正文说明。

本教程依据 DeepInfer 官方结构化输出示例。下方是应用改写示例,未运行模型;使用前需完成对应平台与模型的初始化。

1. 分清约束入口

框架将约束放入 SamplingParams 的 so_args。官方示例覆盖正则、JSON Schema 和 EBNF,当前类型名称分别为 regex、json、ebnf。它属于离线框架接口,不能据此认定托管 API 接受同名参数。

下面示例要求输出一个带状态的对象,用于说明 schema 的传递方式:

import json
from deepinfer.sampling_params import SamplingParams

schema = {
    "type": "object",
    "properties": {
        "status": {"type": "string", "enum": ["ready", "review"]}
    },
    "required": ["status"],
    "additionalProperties": False,
}
params = SamplingParams(
    temperature=0,
    max_tokens=128,
    so_args={"schema_type": "json", "schema": json.dumps(schema)},
)

这里只创建参数对象。模型实例、提示、输出提取和异常处理需按所用提交的完整示例接入,不是一段可独立完成推理的程序。

2. 不同格式用于不同结构

JSON Schema 适合对象与字段约束;正则适合固定字符串模式;EBNF 适合自定义语法。先从最小需求开始,再检查后端支持情况,不用复杂约束替代业务规则。

3. 结束、格式、内容分别验收

官方示例检查输出存在、正常结束、最终 EOS,再对字符串做格式与字段检查。达到长度上限或其他异常终止时,不能只因前半段看起来像 JSON 就继续使用。

应用层仍应解析结构、验证必填项与枚举,并核对时间、金额和引用是否有依据。状态字段合法不代表任务已经完成;格式约束也不能证明新闻事实正确。

4. 批处理保留错误类型

将初始化失败、生成异常、格式不合格和业务内容不合格分开记录。后续修正提示或字段规则时,才知道失败来自哪个环节。云端模式另见JSON Output 指南。

参考资料

本文依据以下资料整理,版本与接口信息请以来源页面的现行说明为准。

  1. 01官方结构化输出实现示例github.com
  2. 02官方示例运行及结束检查说明github.com
  3. 03官方结构化输出设计问答github.com
阅读至此返回学习中心