大模型网摘deepseek.wang
EN

提示词优化 · 2026-11-12

DeepSeek JSON 结构化输出:字段说明、示例与兜底规则

让大模型稳定吐 JSON,是很多人接 DeepSeek API 后遇到的第一个坎:模型明明懂了需求,返回的却是不带代码块的散文、字段名随机变、偶尔还夹一句「好的,以下是结果」。解决办法其实不玄学,核心就三件事:字段说明写清楚、给一个具体示例、再补上兜底规则。DeepSeek 的 V 系列通用对话模型对这类结构化约束响应很好;即便是 R 系列深度思考模型,也更吃清晰的约束而非花哨的角色扮演。下面按实操顺序拆开讲。

一、为什么「字段说明 + 示例 + 兜底」缺一不可

只写「输出 JSON」是远远不够的。模型对字段的想象和你不一样:你要 price 它给 金额,你要数组它给字符串。字段说明负责消除歧义——每个字段写明类型、含义、是否必填;示例负责对齐格式——模型模仿具体输出的能力远强于理解抽象描述;兜底规则负责处理异常——信息缺失、字段超长、值不在枚举范围内时怎么办。三者配合,解析成功率会有肉眼可见的提升。

二、通用模板:直接可粘贴

text
任务:从下面的用户评论中抽取信息,以 JSON 输出。

【输出格式要求】
1. 只输出一个合法 JSON 对象,不要输出任何解释文字、markdown 代码块标记或前后缀语句。
2. 字段定义:
- sentiment: string,必填,情感倾向,只能是 "positive" / "negative" / "neutral" 之一
- keywords: array of string,必填,评论中的关键词,最多 5 个,按出现顺序排列
- rating: number,选填,评论中提到的评分(1-5),未提及则省略该字段
- product: string,必填,涉及的产品名,无法判断时填 "unknown"
3. 兜底规则:
- 某必填字段信息缺失时,keywords 填 [],product 填 "unknown",不要编造
- 所有字符串字段不得包含换行符

【输出示例】
{"sentiment": "positive", "keywords": ["续航", "屏幕"], "rating": 5, "product": "X1手机"}

【待处理评论】
{{user_comment}}

这个模板的三段式结构可以套到绝大多数抽取、分类、打标场景,把字段定义和示例换成你自己的即可。

三、要不要开深度思考模式

DeepSeek R 系列的深度思考适合复杂推理,但简单结构化任务(抽取、分类、格式转换)用 V 系列通用模型更快也更稳。经验判断标准:任务需要多步推理或多条件判断才值得开思考;纯格式转换开思考模式反而增加耗时和成本,还可能因为「想太多」在 JSON 外多输出内容。另外,R 系列的输出可能包含思考过程,接代码解析时记得先按 API 返回结构分离出最终回答,具体字段以官方文档为准。

四、复杂场景模板:带兜底与批量处理

text
任务:批量解析订单文本,输出 JSON。

【格式约束】
- 顶层输出一个 JSON 数组,每个元素对应一条订单,数组外不得有任何文字。
- 元素字段:
  - order_id: string,必填,形如 "ORD-2024-001",文本中没有则填 null
  - items: array of object,必填,每个元素含 name(string) 和 quantity(number)
  - total: number,选填,金额仅保留数字,单位为元,无法确定填 null
  - note: string,选填,备注,无则省略
- 兜底规则:
  - 单条订单解析失败时,该元素输出 {"order_id": null, "items": [], "total": null, "note": "parse_failed"},不要中断整个数组
  - 输入为空时输出 []
  - 数量字段必须是数字,不能是 "三件" 这类文本,请先转换

【输出示例】
[{"order_id": "ORD-2024-001", "items": [{"name": "键盘", "quantity": 2}], "total": 598, "note": "加急"}]

【待解析文本】
{{order_text}}

注意兜底里「单条失败不中断整体」这条规则,批量场景特别容易踩坑:没有它,模型可能因为一条数据异常而放弃整段输出或自行改格式。

五、几个实战小技巧

1. 温度调低。结构化输出不是创意写作,低温度能让输出更收敛,具体参数范围以官方文档为准。 2. 解析前先做一层防御:剥掉可能的 ```json 标记,用宽松模式截取第一个 { 或 [ 到最后一个配对符。 3. 代码场景直接用 DeepSeek 的代码能力优势:让它生成的 JSON 字段名保持 snake_case 并在提示词里写死,方便下游消费。 4. 兜底值要显式写出(null、空数组、"unknown"),不要写「视情况而定」这种模型没法执行的指令。 5. 模板里的示例要和你真实要的数据形状完全一致,包括字段顺序——模型会照抄示例的结构习惯。

把这三个要素写进系统提示词,多数 JSON 输出问题就能在提示词层面解决,比事后写一堆正则修复要省心得多。先从上面的模板改起,跑几十条真实数据看输出,再针对失败案例回补字段说明和兜底规则,两三轮就能收敛到可用状态。