JSON Output
需要结构化输出、让后续代码直接解析时用它。要点只有一个:明确告诉模型你要 JSON,并且给它一个样子。
怎么开
在Chat Completions API 的请求体里加一个参数:
{
"model": "<模型名>",
"messages": [
{ "role": "system", "content": "按要求把结果以 json 输出,样例:{\"question\": \"...\", \"answer\": \"...\"}" },
{ "role": "user", "content": "把这段内容解析成 question 和 answer" }
],
"response_format": { "type": "json_object" }
}
三个必查点
| 检查 | 为什么 |
|---|---|
prompt 里要出现 json 字样 |
不出现时,模型可能不按 JSON 输出,甚至直接报错 |
| 给一个输出样例 | 把期望的结构写进 system 或 user 消息,模型照着填。只写“输出 JSON”是不够的 |
max_tokens 别设太小 |
JSON 被截断就不是合法 JSON,解析必然失败(此时 finish_reason 是 length) |
请求示例
curl https://open.feiyutoken.com/v1/chat/completions \
-H "Authorization: Bearer <你的飞鱼Token API Key>" \
-H "Content-Type: application/json" \
-d '{
"model": "<模型名>",
"messages": [
{
"role": "system",
"content": "把用户给的题目解析成 json,样例:{\"question\": \"...\", \"answer\": \"...\"}"
},
{ "role": "user", "content": "世界上最高的山是哪座?珠穆朗玛峰。" }
],
"response_format": { "type": "json_object" }
}'
响应
content 是一段字符串,内容是合法 JSON:
{
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\n \"question\": \"世界上最高的山是哪座?\",\n \"answer\": \"珠穆朗玛峰\"\n}"
},
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 48, "completion_tokens": 24, "total_tokens": 72 }
}
记得把 content 当字符串做一次 JSON 解析再用 —— 它不会自动变成对象。
哪些模型支持这个参数,以控制台模型列表里的说明为准。