当您需要模型像程序一样输出标准格式(这里主要指 JSON 格式)而不是自然语言,方便工具进行标准化处理或展示时,可以使用格式化输出能力。
要启用该能力,需在请求时配置 response_format 对象,来指定模型输出 JSON 格式,甚至通过定义 JSON 结构,进一步定义模型输出哪些字段信息。
区别于在提示词中让模型输出 JSON 格式(不推荐),使用结构化输出能力有以下好处:
支持该能力的模型如下:
250428
版本。250415
版本。250328
版本。
json_object
模式。结构化输出 API 字段说明见对话(Chat) API。
支持 **
json_schema
**的方舟 SDK 开发中。
from openai import OpenAI import os from pydantic import BaseModel client = OpenAI( # 从环境变量中获取方舟 API Key api_key=os.environ.get("ARK_API_KEY"), base_url = "https://ark.cn-beijing.volces.com/api/v3", ) class Step(BaseModel): explanation: str output: str class MathResponse(BaseModel): steps: list[Step] final_answer: str completion = client.beta.chat.completions.parse( model = "doubao-1.5-thinking-vision-pro-250428", # 替换为您需要使用的模型 messages = [ {"role": "system", "content": "你是一位数学辅导老师。"}, {"role": "user", "content": "使用中文解题: 8x + 9 = 32 and x + y = 1"}, ], response_format=MathResponse, extra_body={ "thinking": { "type": "disabled" # 不使用深度思考能力 # "type": "enabled" # 使用深度思考能力 } } ) resp = completion.choices[0].message.parsed # 打印 JSON 格式结果 print(resp.model_dump_json(indent=2))
返回预览
{ "steps": [ { "explanation": "解第一个方程8x + 9 = 32,先将等式两边同时减去9,得到8x = 32 - 9", "output": "8x = 23" }, { "explanation": "然后等式两边同时除以8,求出x的值", "output": "x = 23/8" }, { "explanation": "将x = 23/8代入第二个方程x + y = 1,求解y,即y = 1 - x", "output": "y = 1 - 23/8" }, { "explanation": "计算1 - 23/8,通分后得到(8 - 23)/8", "output": "y = -15/8" } ], "final_answer": "x = 23/8,y = -15/8" }
json_schema
与 json_mode
格式化输出可以选择不同类型(type),包括 json_schema
、json_mode
、text
。除 text
是让模型使用自然语言进行回复,json_schema
和 json_mode
均是控制生成 JSON 格式回答,同时 json_schema
是 json_mode
的演进版本,以下是他们的异同点。
当前
json_schema
功能还在beta 测试中,请谨慎评估后再在生产环境使用。
结构化输出 |
|
|
---|---|---|
生成 JSON 回复 | 是 | 是 |
可定义 JSON 结构 | 是 | 否 |
是否推荐 | 是 | 否 |
支持的模型 |
|
|
严格模式
| 支持
| 不涉及 |
配置方式 | ..., | ..., |
您需要在 schema 字段中定义好模型生成的回复的 JSON 结构,可以参考快速开始的示例。
true
。方舟支持的关键字可见附1. JSON Schema 语法支持说明,如果有明显不支持的定义,方舟会显示报错。false
或者未配置 strict 字段,方舟会生成合法 JSON 结构的内容,同时尽可能参考您的定义的结构,不会对语法校验及报错。说明
为了帮助您获得更好的生成质量,下面是定义结构时的一些建议:
在 API 中指定结构化输出的模式
..., "response_format": { "type": "json_schema", "json_schema"{ "name":"my_schema", "strict": true, "schema": {...} } }, ...
完整示例代码见 快速开始。
模型输出结构仍然可能包含错误,可能因为输出长度限制、任务复杂度、格式不清晰等。可以尝试调整指令,或将任务进行拆分为更简单子任务。您可以使用方舟的提示词优化工具来帮您优化模型提示词,详细见 Prompt 优解概述。
说明
JSON Schema 有效关键字全集 https://json-schema.org/understanding-json-schema/keywords
#
开头的本地相对引用以上无法 100% 保证区间语义。