火山引擎API结构化输出需用特定模型并遵循Draft 07规范:仅ark-code-latest、doubao-seed-1-8-251228、skylark2-pro-4k支持;须移除$schema、$ref、allOf等高级字段,键名禁用数字开头,且required中不可含description。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你在火山引擎API中启用结构化输出(如通过response_format传入json_schema)时,发现请求直接返回400错误且提示“Schema not supported”或“invalid json_schema”,说明当前调用的模型或服务端未启用Schema校验能力——这不是你写的JSON Schema有语法错误,而是后端根本不识别该字段。
确认当前模型是否支持结构化输出
火山引擎并非所有模型都支持OpenAI-style response_format.json_schema。截至2026年10月,仅以下三类模型明确开启该能力:【ark-code-latest】、【doubao-seed-1-8-251228】、【skylark2-pro-4k】。其他如glm-4.7、deepseek-v3.2等通用模型虽支持function calling,但不解析json_schema字段。
执行GET请求到https://ark.cn-beijing.volces.com/api/v1/models,检查返回列表中目标模型的capabilities字段是否包含"structured_output"。若无此字段,换模型是唯一解法。
替换为火山引擎原生兼容的Schema声明方式
方法一:改用tools + strict: true(兼容性最强)
将原本写在response_format里的JSON Schema,改放到tools数组中,定义为一个无参数函数,并设置strict: true:
{"type": "function","function": {"name": "output_result","parameters": {"type": "object","properties": {"user_id": {"type": "string"},"score": {"type": "number","minimum": 0,"maximum": 100}},"required": ["user_id", "score"]}},"strict": true}
注意:必须同时在tool_choice中指定{"type": "function", "function": {"name": "output_result"}},否则模型可能忽略该约束。
验证Schema语法是否触发火山引擎校验规则
第一步:确保$schema字段未出现在你的JSON Schema中。火山引擎服务端会拒绝任何含$schema、$ref、allOf、anyOf、oneOf的Schema——这些属于OpenAPI或JSON Schema Draft 2020-12特性,火山引擎当前只支持Draft 07子集。
第二步:检查字段名是否含非法字符。火山引擎对properties下的键名强制要求:只能是字母、数字、下划线,且不能以数字开头。例如"2nd_attempt"会报错,必须改为"second_attempt"。
第三步:移除所有description字段。火山引擎Schema校验器会静默丢弃该字段,但若它出现在required数组里(如"required": ["name", "description"]),会导致校验失败并返回400。


















