deepseek 默认不支持强制 json 输出,需通过外部约束与提示工程结合实现;可用工具调用模拟或纯 prompt 控制加后处理,但需 schema 校验保障稳定性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

DeepSeek 默认不支持强制 JSON 输出格式
DeepSeek(尤其是 DeepSeek-V2、R1 等开源或 API 版本)本身没有原生的 response_format={"type": "json_object"} 类似 OpenAI 的能力。直接 prompt 里写“请输出 JSON”大概率会得到带中文说明的混合文本,而非纯可解析的 JSON 字符串。
这不是模型“不会”,而是它被训练为自由文本生成器,不是结构化协议引擎。想拿到稳定 JSON,得靠外部约束 + 提示工程双保险。
用 system prompt + function calling 模拟结构化输出(API 场景)
如果你调用的是支持 tools 或 function calling 的 DeepSeek API 接口(如某些厂商封装版),可以定义一个虚构函数来“诱导”结构化响应:
- 在
tools列表中声明一个名为return_json_data的函数,parameters字段严格按你想要的 JSON schema 描述(如{"type": "string", "description": "用户姓名"}) - system prompt 写清楚:“你必须调用
return_json_data工具返回结果,不得自行输出解释文字” - 模型会输出符合该 schema 的 tool call,你从
tool_calls[0].function.arguments中提取字符串,再json.loads()解析
注意:官方 DeepSeek API(如 deepseek.com 的 /v1/chat/completions)目前不开放 tools,此法依赖第三方平台(如 Together AI、Fireworks.ai 封装时加了兼容层)。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
纯 prompt 控制 + 后处理是更通用的做法
对大多数用户(尤其是用网页版、Ollama、或直连 HuggingFace model 的),推荐这个轻量可靠路径:
- prompt 开头就写死格式要求:
请严格按以下 JSON Schema 输出,不要任何额外说明、换行或 markdown:{"name": "string", "age": "integer", "tags": ["string"]} - 结尾加一句硬性指令:
只输出合法 JSON 对象,开头是 {,结尾是 },不包含 ```json 或其他包裹 - 生成后,用 Python 做容错解析:
json.loads(response.strip().split("{", 1)[-1].rsplit("}", 1)[0] + "}")—— 这能吃掉常见首尾杂音 - 如果字段值含换行/引号,模型容易崩;建议提前在 prompt 里加约束,比如:
"bio": "单行简介,不超过50字"
为什么不用 JSON 模式参数?哪些情况会失败
DeepSeek 模型权重本身没经过 JSON-only 微调,所以即使你传 response_format={"type": "json_object"}(某些网关允许伪造),底层仍可能忽略或报错。实测常见失败点:
- 字段嵌套过深(如三层以上 object/array 混合)→ 模型倾向省略中间层或补默认空值
- 要求字段为枚举值(如
"status": ["active", "pending"])→ 模型常输出"status": "activee"这类拼写错误 - 数值精度要求高(如保留 6 位小数)→ 可能输出
3.1415926而非3.141593,需后端 round - 空字段处理模糊:prompt 没明确说“null 可接受”还是“必须填默认值”,模型随机发挥
真正稳定的 JSON 输出,永远需要一层 schema 校验(如用 pydantic 或 jsonschema 验证 + 重试机制),不能全信模型一次生成。









