JSON Output 能保证模型返回合法 JSON 字符串,但“能解析”不等于“符合业务规则”。字段缺失、枚举越界和语义错误仍需由应用校验。
一、正确开启 JSON Output
请求中设置 response_format: { type: 'json_object' },同时在系统或用户提示中明确写出“json”,并提供目标结构示例。还要为完整输出保留足够的 Token,避免 JSON 被截断。
const response = await client.chat.completions.create({
model: 'deepseek-flash',
messages: [{
role: 'system',
content: '请输出 json,格式示例:{"title":"...","tags":["..."]}',
}, {
role: 'user',
content: '从这段内容中提取标题和标签:...',
}],
response_format: { type: 'json_object' },
max_tokens: 1000,
});
二、解析之后继续校验
const raw = response.choices[0].message.content;
const data = JSON.parse(raw);
if (typeof data.title !== 'string' || !Array.isArray(data.tags)) {
throw new Error('模型输出未通过业务结构校验');
}
三、准备失败兜底
- 检查
finish_reason,识别长度截断。 - 为偶发空内容、解析失败设置有限重试或人工复核。
- 限制字符串长度、数组数量和枚举取值,避免异常数据进入数据库。
- 不要直接执行模型返回的 SQL、Shell 命令或 URL。
如果你的任务需要工具参数严格符合 JSON Schema,可进一步评估工具调用的 strict 模式;该能力属于独立机制,使用前应阅读当前 Beta 限制。
参考资料
本文依据以下资料整理,版本与接口信息请以来源页面的现行说明为准。
阅读至此返回学习中心