大模型网摘deepseek.wang
EN

教程 · 2026-11-10

用 response_format 让 deepseek-flash 输出稳定 JSON

场景与坑

把大模型输出喂给下游程序,格式稳定性比文笔重要。想让 deepseek-flash 直接吐出可解析的 JSON,靠提示词硬约束并不保险,成功率时高时低。官方其实为这个场景准备了 response_format 参数。这篇就把完整用法过一遍,顺带聊几个容易踩的坑。

基础用法

在请求体里加上 response_format,类型填 json_object。提示词也别闲着,要明确要求 JSON 并给出字段示例。官方文档特别提醒了两点,若提示词里不含 json 字样,接口会直接报错,并提示可能输出无限空格——两个条件缺一不可。示例代码如下。

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_KEY",
    base_url="https://api.deepseek.com")

resp = client.chat.completions.create(
    model="deepseek-flash",
    messages=[{"role": "user", "content": (
        "从下面这段文本抽取公司名与融资金额,"
        "以 JSON 输出,字段用 company 与 amount:"
        "智谱完成新一轮融资")}],
    response_format={"type": "json_object"})

解析与容错

拿到返回先别急着信。json.loads 之前要做一层防御,截掉可能混入的代码围栏与前后缀文本。解析一旦失败,把原始输出和报错一起记进日志,再带着错误信息让模型重出一次。实践中两轮重试内基本都能拿到合法 JSON。

温度也值得调低。做结构化抽取时,temperature 放在 0.1 到 0.3 之间,字段乱填的概率会明显下降。字段约束一复杂,光写一段说明不够稳,把字段定义配上一个正例、一个反例都塞进提示词,效果更好。

和 function calling 的分工

两者的边界其实很清楚。需要模型执行动作,用 function calling;只需要数据,用 JSON 输出。它们还能组合起来,把工具返回的结果再整理成结构化数据。本站的 Function Calling 实战与API Python 快速入门适合作为前置阅读。模型名与定价速查见接入速查。

收尾提醒

一是 json_object 模式下输出可能被截断,超长结构建议拆成多次调用,每轮只出一部分。二是该模式不校验 schema,字段类型与枚举值得靠提示词约束,再加程序侧校验兜底。本文内容选自网上公开资料。