HiDeepSeekDev
空闲特惠
教程指南JSON Output结构化输出Validation

DeepSeek JSON Output 指南:结构化输出、校验与失败兜底

让模型输出可解析 JSON,并在业务代码中完成 Schema 校验、截断检测和失败兜底。

本次更新:新增离线 so_args 与托管 JSON Output 的接口区别及结束状态验收。

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 限制。

10 月 22 日:DeepInfer 离线结构化输出入口

DeepInfer 官方示例使用 SamplingParams.so_args,类型为 regex、json 或 ebnf,JSON Schema 以序列化字符串传入。它属于离线引擎接口,不能直接作为托管 API 的 HTTP 参数照搬。

验收时分别检查正常结束、最终 EOS、格式解析与业务内容。格式符合 Schema 仍不代表事实有依据或任务已经完成。具体代码与边界见DeepInfer 结构化输出教程。

参考资料

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

  1. 01DeepSeek JSON Outputapi-docs.deepseek.com
  2. 02Chat Completions APIapi-docs.deepseek.com
  3. 03DeepInfer 官方结构化输出示例github.com
阅读至此返回学习中心