快速结论
离线框架通过 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 指南。
参考资料
本文依据以下资料整理,版本与接口信息请以来源页面的现行说明为准。