开了 response_format json_object,仍有 3% 的返回在 json.loads 时抛 JSONDecodeError,内容以“好的”开头。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,只开 format 约束不足以保证输出合法,模型偶尔先写一句解释再给 JSON。解析代码没有兜底分支。

碰到「结构化输出兜底」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。

python -c "import json;s=open('r.txt').read();print(json.loads(s[s.find('{'):s.rfind('}')+1]))"

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

具体做法是,prompt 里明确只输出 JSON 对象;解析前截取第一个左花括号到最后一个右花括号;失败重试一次并把错误回传;仍失败返回结构化降级结果。

最后用这个标准收尾,那 3% 的样本能解析成功 解析失败率降到 0.2% 以下。

作者 9823189