跳转到主要内容
模型

结构化输出

保证返回合法 JSON

结构化输出能确保模型返回合法 JSON。将 response_format 设置为 {"type": "json_object"},并在 prompt 中包含 "JSON" 一词即可。
  • OpenAI 兼容
  • DashScope
from openai import OpenAI
import os

client = OpenAI(
  api_key=os.getenv("DASHSCOPE_API_KEY"),
  base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
  model="qwen3.7-plus",
  messages=[
    {"role": "system", "content": "Extract the name and age. Return JSON."},
    {"role": "user", "content": "My name is Alex Brown, I am 34 years old."},
  ],
  response_format={"type": "json_object"},  # <-- 强制输出合法 JSON
)
print(completion.choices[0].message.content)
输出示例
{"name": "Alex Brown", "age": 34}
在 prompt 中描述预期字段、类型、是否必填,并提供示例,可以获得更可靠的输出。

深度思考模式下的替代方案

深度思考模式不支持结构化输出。可以先解析深度思考模式的输出,解析失败时用轻量模型修复 JSON。
Python
import json
from openai import OpenAI
import os

client = OpenAI(
  api_key=os.getenv("DASHSCOPE_API_KEY"),
  base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

system_prompt = "Extract key information. Return JSON."  # 替换为您的 system prompt
user_input = "My name is Alex Brown, I am 34 years old."  # 替换为您的用户输入

# 第 1 步:从深度思考模式获取输出(需开启流式)
completion = client.chat.completions.create(
  model="qwen3.7-plus",
  messages=[
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": user_input},
  ],
  extra_body={"enable_thinking": True},            # <-- 此处不设置 response_format
  stream=True,
)
json_string = ""
for chunk in completion:
  if chunk.choices[0].delta.content:
    json_string += chunk.choices[0].delta.content

# 第 2 步:解析 JSON,失败则用轻量模型修复
try:
  result = json.loads(json_string)
except json.JSONDecodeError:
  repair = client.chat.completions.create(
    model="qwen3.5-flash",                       # <-- 用轻量模型修复 JSON
    messages=[
      {"role": "system", "content": "Fix this to valid JSON."},
      {"role": "user", "content": json_string},
    ],
    response_format={"type": "json_object"},
  )
  result = json.loads(repair.choices[0].message.content)

注意事项

  • 支持的模型:Qwen3.7、Qwen3.6、Qwen3.5、Qwen3、Qwen3-Coder、Qwen2.5 及旧版模型(Plus/Max/Flash/Turbo)——仅限非思考模式。Stepfun(混合思考模式):stepfun/step-3.7-flash。视觉模型(qwen3-vl-plus 等)在传入图片或视频时也支持结构化输出,详见视觉理解
  • 不要设置 max_tokens:截断会导致 JSON 不完整,破坏下游解析。使用默认值(模型最大输出限制)即可。
  • 校验输出:JSON Object 模式保证输出是合法 JSON,但不保证符合特定 schema。建议使用 jsonschema(Python)、Ajv(JavaScript)或 Everit(Java)进行校验后再传给下游系统。