启用json mode需设置response_format为json_object、使用支持模型、禁用解释性指令;系统提示词须强制字段名与类型;用户输入应提供精确json示例;服务端需校验修复;禁用流式响应并设temperature=0。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您调用DeepSeek API时希望模型严格返回标准JSON格式,但实际响应中常出现额外文本、注释或格式错乱,则可能是JSON Mode未正确启用或提示词设计存在偏差。以下是确保输出格式稳定的多种实践方法:
一、启用JSON Mode的请求头与参数配置
DeepSeek API通过特定请求参数强制模型以纯JSON结构输出,避免自然语言包裹。必须显式声明响应格式约束,并禁用自由生成行为。
1、在请求体(JSON payload)中设置 "response_format": {"type": "json_object"} 字段。
2、确保 model 参数值为支持JSON Mode的版本,例如 deepseek-chat 或官方文档明确标注支持JSON的模型标识符。
3、移除所有可能触发解释性回复的指令词,如“请说明”“原因如下”“注意”等引导语。
二、系统提示词(system prompt)中嵌入结构化约束
系统提示词是控制模型输出格式的第一道防线。需用明确、不可歧义的指令定义JSON字段名、类型及嵌套规则,抑制模型自行扩展结构。
1、在system消息中写入:“你必须严格输出一个合法JSON对象,不得包含任何JSON以外的字符(包括代码块标记、说明文字、换行符、注释)。键名必须为:result、code、message;其中code为整数,result为字符串,message为字符串。”
2、避免使用模糊描述,如“尽可能返回JSON”或“建议用JSON”,而应使用“必须”“仅允许”“禁止”等强制性措辞。
3、若需数组类型,明确指定:“items字段必须为字符串数组,长度不得大于5”。
三、用户输入(user prompt)中提供JSON Schema示例
向模型展示一个符合预期的完整JSON样本,能显著提升其对字段边界与嵌套层级的理解准确率,尤其适用于复杂结构。
1、在user消息末尾附加:“请严格遵循以下JSON格式输出,仅返回JSON,不加任何前缀或后缀:{"status": "success", "data": {"id": 123, "name": "test"}}
2、确保示例中所有键名、值类型、空值处理方式(如null或省略)与实际需求完全一致。
3、若存在可选字段,在示例中统一省略,同时在system prompt中声明:“未在示例中出现的字段一律不得输出”。
四、服务端接收后执行轻量级JSON校验与修复
即使API返回内容看似JSON,仍可能存在BOM头、多余空白、单引号替代双引号等问题。客户端需主动拦截并标准化,而非依赖模型100%准确。
1、接收到响应后,先用正则去除首尾空白及常见非法前缀:/^[\s\uFEFF\xA0]*[```]*\s*json\s*/i。
2、将单引号替换为双引号前,先确认是否为合法JSON字符串边界内操作,避免误改字符串值中的单引号。
3、使用严格JSON解析器(如Python的json.loads())捕获异常,若失败则返回预设错误JSON:{"error": "invalid_json_output", "raw_response": "..."}。
五、禁用流式响应(stream=false)并设置temperature=0
流式响应可能导致JSON被截断于中间状态,而非零temperature会引入随机性,破坏字段一致性与顺序稳定性。
1、在请求参数中显式设置:"stream": false,确保接收完整响应体后再解析。
2、将temperature设为0.0,消除采样随机性,使相同输入始终产生相同JSON结构。
3、同步关闭top_p(设为1.0)与presence_penalty(设为0.0),防止模型因多样性惩罚而擅自增删字段。











