JSON 输出
JSON 输出模式强制模型返回有效 JSON,而不是纯文本。适用于结构化数据提取、API 响应和与其他系统集成。
如何启用
在请求中将 response_format 设为 { "type": "json_object" }:
{
"model": "deepseek-v3",
"messages": [
{
"role": "system",
"content": "你是一个数据提取助手。只返回有效 JSON。"
},
{
"role": "user",
"content": "从这段文本中提取姓名、年龄和城市:John 30 岁,住在纽约。"
}
],
"response_format": { "type": "json_object" }
}
响应
{
"choices": [
{
"message": {
"role": "assistant",
"content": "{\"name\": \"John\", \"age\": 30, \"city\": \"New York\"}"
}
}
]
}
要求
- 在 prompt 中包含 "json":系统或用户消息必须指示模型输出 JSON(如「返回 JSON」、「仅输出 JSON」)。
- 设置
response_format:必须设置response_format: { "type": "json_object" }。 - 设置合适的
max_tokens:JSON 输出可能需要更多 token。设够max_tokens避免截断。
支持的模型
TB 目录中所有模型均支持 JSON 输出,除非模型目录中另有说明。
已知问题
| 问题 | 解决方案 |
|---|---|
| 模型偶尔返回空内容 | 在 prompt 中加明确指令如「JSON 中包含所有字段」。 |
max_tokens 太低时 JSON 被截断 | 增加 max_tokens 确保完整输出。 |
| 复杂 schema 时可能返回无效 JSON | 简化 schema 或用两步法(提取然后验证)。 |
| 推理模型可能不严格遵守 JSON 格式 | 添加系统消息:「最终答案必须是有效 JSON」。 |
最佳实践
- 使用系统消息:告诉模型只输出 JSON。
- 提供 schema 示例:在 prompt 中展示期望的 JSON 结构。
- 验证响应:始终在代码中解析并验证 JSON。
- 优雅处理错误:解析失败时,用更清晰的指令重试。