让模型稳定输出JSON:json_object和json_schema别用混
做信息抽取、或者给 agent 定输出格式时,最烦的是模型在 JSON 前后带上 ```json 之类的多余文本,下游一解析就崩。阿里云百炼的官方文档里有一套结构化输出能解决这个问题,但两个模式差别很大,别用混。 第一种是 JSON Object:把 response_format 设成 {"type":"json_object"},它保证输出是合法 JSON 字符串,但不保证符合你要的结构。还有个容易踩的坑——提示词里必须出现 JSON 这个词,否则接口直接报错。它支持的模型比较广,千问大部分模型,加上 Kimi、GLM、DeepSeek、Stepfun。 第二种是 JSON Schema:response_format 里给 json_schema 并设 strict,输出会严格遵循你给的 schema,提示词也不必带 JSON 关键词。代价是只支持部分模型,官方文档里列的是千问 3.7-Plus、3.8-Flash、3.7-Flash、3.7-Max、3.8-Max 这几个系列,动手前先对一遍清单。 还有一个边界值得记:文档里标注「非思考模式」的模型,切到思考模式后 json_object 不会报错,但结构化输出可能失效,等于静默降级。 选型顺序很简单:能定 schema 就上 json_schema 加 strict,把字段类型和枚举写死;只能用 json_object 时,把格式校验留在下游。
还没有跟帖,欢迎写下第一条。