应选JSON Schema模式以确保字段存在、类型正确及必填项满足;JSON模式仅保证输出合法JSON但无语义约束,适用于临时调试;JSON Schema通过Pydantic类定义结构并自动校验,强依赖完整性场景必须使用。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让火山引擎大模型返回结构化数据,但面对JSON模式和JSON Schema模式不知如何选择——前者开箱即用但字段约束弱,后者可校验但需额外定义和维护。
先看核心区别
JSON模式指调用时仅设置response_format={"type": "json_object"},模型尽力输出合法JSON,但【不保证字段存在、类型正确或必填项满足】。JSON Schema模式则需传入完整Schema定义,模型在生成时受格式+语义双重约束,输出结果能被jsonschema.validate()直接校验通过。
如果你的下游系统依赖result["user_id"]必须存在且为整数,选JSON Schema;如果只是临时调试、快速看个结构,JSON模式够用。
JSON模式:三步启用
第一步:在请求参数中加入response_format={"type": "json_object"}。
第二步:system提示词明确要求“只输出JSON,不要任何解释性文字”。漏掉这句,模型可能在JSON前加一句“好的,这是你要的JSON:”。
第三步:接收响应后用json.loads()解析。若失败,说明模型没遵守约定——这时你得切到JSON Schema模式或加重试逻辑。
JSON Schema模式:四步落地
方法一:用Pydantic类定义结构(推荐)
① 安装pydantic>=2.0,定义带类型注解和Field(description=...)的类。
② 调用llm.with_structured_output(ProductInfo)获得封装后的模型实例。这一步会自动将Pydantic类转为JSON Schema并注入请求头。
③ invoke()后直接得到ProductInfo对象,字段缺失或类型错误会抛出ValidationError,不用自己写校验逻辑。
④ 注意:【Pydantic v2默认禁用extra字段,若模型多返回了未定义字段会直接报错】,需在类定义中加model_config = {"extra": "ignore"}避免崩溃。
什么时候必须用JSON Schema
当你的业务逻辑强依赖字段完整性:比如财务系统要取amount做扣款,但JSON模式下模型可能返回{"amt": 99.9}——字段名错、类型对,下游解析就崩。
当需要对接外部API,对方严格校验Schema:例如调用银行接口必须传{"transaction_id": "string", "timestamp": "integer"},少一个字段400报错。
当团队有明确的数据契约规范:产品、前端、后端共用同一份Pydantic类,模型输出天然对齐接口定义。











