AI JSON校验失败、结构化输出仍被业务拒收?按OpenAI与Gemini的实际接口、响应状态和消费对象分流,用六维证据矩阵与双契约对照定位下一核验动作,不把合法JSON当成业务正确。
JSON模式:先找出业务拒收的是谁
JSON能解析,业务却拒收。
遇到AI JSON校验失败、结构化输出验收受阻,先留住失败对象。解析器回答语法能否成立;JSON Schema描述字段契约;业务校验检查值能否用于当前任务。错误来自哪一层,要看证据。
先看结论:AI JSON校验失败、结构化输出拒收,先按端点核查机制、状态和消费对象,再比对双契约。工具与流式按路径检查;业务语义和动作授权另核,拒绝与截断另行排除。
先做这些采集:
记录真实端点、模型快照、SDK版本及请求配置,避免拿新文档解释旧请求。
留下脱敏响应、校验失败字段和原始错误,明确应用究竟提取了哪个对象。
将拒绝、截断、请求失败另列,不把它们包装成完整合法JSON样本。
业界存在多种做法。提示词里写“请返回JSON”,不能充当平台JSON模式已开启的证据;程序能读出SDK对象,也还没证明线上发送了哪些约束。本文只给证据比对与下一动作,不给跨接口通用参数代码。复现限定在脱敏沙箱。
若卡住的其实是采用决策,应该先回答哪个问题?
多家API联调:收口前先保留差异

多家接口同时联调那段时间,某内容聚合平台的技术团队希望快速补齐游戏内容生态。从集成工程师的视角看,接通只是开头:各厂商接口规范不同,错误处理不同,版本节奏也不同。缺少统一收口,联调就反复返工。
这是行业通识重构,非AI输出案例,也非服务商客户实绩。场景中的处理路径是建立统一接入抽象层,标准化错误处理与限流,再把版本兼容差异隔离。抽象层可以理解为接入侧的转接层;它要接住差异,而非把差异藏起来。
该场景设定的结果是:抽象层建好后,接入效率大幅改善。没有性能测量,也不外推到AI效果。这里保留的教训很具体:聚合难点在多家差异如何收口,而非接口能否接通。
拿这个类比检查交接记录:
是否保留各接口的错误来源,而非只剩应用统一报错?
是否标明版本差异的归属,而非把切换后的异常都交给输出校验器?
回到AI响应,先保留端点与对象身份,再决定哪些证据能放在一起比较。
OpenAI Responses、Chat Completions与Gemini generateContent:按证据分流

从请求找机制。提示词要求、JSON模式、Schema输出、工具调用参数,检查对象不同。OpenAI结构化输出文档区分了JSON有效性与Schema遵循;适用仍受模型、Schema支持子集及状态例外约束。结构化输出不是业务值鉴定器。
以下是待核入口,不是字段互换表:
OpenAI Responses:查
text.format,并分别核对status、incomplete_details与output中的拒绝项。Chat Completions:查
response_format、choices[].finish_reason和message.refusal。Gemini generateContent:查
generationConfig、candidates[].finishReason及promptFeedback。
先用实际SDK/REST版本确认入口含义,再与发出配置比对。材料缺完整跨接口参数标签,不能照这份清单拼接请求。Google v1beta Discovery所载定义为:空finishReason表示尚未停止生成;MAX_TOKENS表示达到请求指定的token上限。它们不能直接作为某次故障已发生截断的诊断依据,也不能套给OpenAI。
D183-1|接口证据矩阵兼决策速查
诊断阻断风险衡量的是证据能否支持继续消费,不是故障率或法务等级。
| 路径/维度 | 脱敏证据 | 判断依据 | 诊断阻断风险(低/中/高) | 下一动作 | 不可下结论 |
|---|---|---|---|---|---|
| 输出机制 | 实发配置、端点及模型 | 提示词与平台配置是否分开 | 低:配置与预期一致;中:配置缺失;高:机制冲突仍消费 | 核对模型支持的机制 | JSON模式等于Schema约束 |
| 响应状态 | 本端点状态、原始错误 | 状态是否支持对象可消费 | 低:状态证据完整一致;中:缺状态或版本;高:异常未排除仍消费 | 分接口查拒绝、未完成及请求失败 | 各端点共用finish_reason |
| 消费对象 | 输出项、参数或结果身份 | 目标与提取对象是否相符 | 低:身份相符;中:提取位置不明;高:把参数当结果消费 | 工具路径查选择模式与结果身份 | 参数合规即执行完成 |
| Schema版本 | 实发Schema、校验器版本 | 必填、枚举等是否一致 | 低:版本与约束一致;中:缺版本;高:约束冲突仍消费 | 并排比对双契约 | 缺字段必为模型失约 |
| 流式完整性 | 流式配置、聚合记录 | 验证是否针对完整对象 | 低:完整性证据齐全;中:缺聚合记录;高:明知片段仍消费 | 仅流式路径核对聚合时点 | 局部可解析即生成完成 |
| 语义与执行边界 | 实体、业务规则、授权记录 | 值、关系及动作许可是否相符 | 低:证据齐全且相符;中:缺核对或授权;高:已见冲突仍消费 | 隔离异常,补业务核对 | Schema通过即获授权 |
快答:工具参数是不是执行结果,是否拿错对象?
OpenAI的Auto允许不调用,空调用列表不能直接判为生成违约。待勾选:□应用要参数还是结果;□当前选择模式允许不调用吗;□是否把未调用误判成缺字段。
快答:Responses和Chat的状态怎么看,何时应推迟验证?
收到的片段即使能单独解析,也先查是否属于完整目标;非流式路径跳过聚合检查。待勾选:□是否启用流式;□验证时点是否早于聚合完成;□是否查本端点状态。
有了这份对照,才把异常暂归到机制不支持、状态异常、契约错位或业务语义。拿不齐证据就标待核,不用“模型不听话”盖过去。
JSON Schema:发出去的契约,与应用守的契约
先摆两份材料。左边不是SDK类定义,而是实际发出的Schema;右边不是产品描述,而是正在运行的应用校验器。Schema就是结构约束说明。对象看着一样,不足以证明两边约束相同。
A183-1|双契约分叉图
同一待消费对象 / \ 实际发出的Schema 应用校验器 端点/模型/配置版本 校验器/规则版本 required / enum required / enum nullable / 嵌套 nullable / 嵌套 未知字段策略 未知字段策略 \ / 约束一致还是错位?
本示意图建议PC端阅读效果最佳。
图看的是契约分叉,不是统一执行流程。把相同字段的规则逐项标成一致、不同或证据缺失,别把未检查当成通过。依次核对:
必填字段:应用要求出现的字段,是否进入实发约束?若只在应用侧必填,先记为双契约差异。
枚举与空值:比对
enum取值及nullable设定,把“字段未出现”和“出现但为空”分开记录,别靠字段名相同判一致。嵌套与未知字段:沿报错位置检查两边规则,定位是结构本身冲突,还是应用额外拒收。
别从SDK对象倒推线上约束。若请求状态及消费对象已排除异常,且模型支持范围、实发Schema与响应证据齐全,才进一步核验是否真的违反受支持的Schema。若请求固定复现拒绝,停止盲重试,留下错误和配置交平台检查。
快答:JSON合法为什么业务校验失败,两个契约版本一致吗?
版本名称一致仍应比较实发内容;缺证据就保留契约错位待核项。待勾选:□Schema是否对应本次请求;□错误是否对应当前校验器;□是否只比较了SDK定义。
快答:结构化输出为什么缺字段,关键字受当前模型支持吗?
第三方兼容表若对应另一模型快照,不能直接套用;相邻关键字受支持也不能代作结论。待勾选:□模型及微调条件;□真实配置字段;□必填性与支持子集。
OpenAI文档有递归支持的表述,但具体限制要落回模型与Schema子集;Gemini则要分清接口版本、实际配置字段及必填性,不能把空值设定当统一递归规则。每次契约变更后,用留存的脱敏样本重新核验,并保留前后版本及错误证据。
工具调用参数:字段齐全,也可能交给错误对象

把“合法JSON就是业务可用”推到底,会得到一个荒唐结果:只要账户标识类型正确、收件人字段齐全,即便实体不存在,也应该准许后续执行。问题就出在这里。语法检查无法完成实体核对,Schema约束也不能签发动作许可。
只作条件化示意:在出海多语言客服场景中,假设模型给出结构完整的账户与收件人字段,应用能解析,枚举也匹配;但账户未在业务系统中得到核实,或收件人与当前任务对象不一致。如果继续把这些值交给下游,正确格式就可能被送到错误对象那里。这是用虚构非敏感业务对象说明边界,不是厂商事故,也没有真实用户资料。
此时,再让模型换个说法,缺口仍在。
OpenAI函数调用文档的严格约束针对工具调用参数;应先核对实际接口的strict设置与适用条件,而非假定各接口默认相同。参数符合函数Schema,与工具是否执行、动作是否获准,是不同结论。Google的generateContent结构化输出文档也要求在应用中核验最终输出的业务语义——说得直白些,是查这些值放进当前业务里是否说得通,而非继续检查标点和括号。
在脱敏沙箱中分别留下:
实体核对:账户和收件人能否对应到已核验对象?若无对应证据,暂停消费这组值。
业务约束:字段之间的关系是否符合当前任务?若关系冲突,记录冲突字段,不把它改写成格式错误;格式和业务核验的结果应分别留下。
动作授权:本次动作是否具备许可?缺少授权时停止在待确认状态,不用生成结果替代授权记录。
即使实体确实存在,收件人也未必属于当前任务;即使关系一致,后续动作仍要单独检查许可。注意,这里检查的是结果能否被消费,不是展开一套多工具权限治理方案,也不提供敏感自动执行办法。
格式替你过门,不能替你认人。
留好证据,再决定修契约还是交接
处理AI JSON校验失败、结构化输出拒收,先交一份能复现的材料:
端点、模型快照、SDK/REST版本及实发配置。
脱敏请求响应、原始错误、消费对象与失败位置。
发出Schema及应用校验器版本、工具/流式条件和已排除项。
交接时标出哪项已有证据、哪项仍缺材料,并写明下一核验动作及停止条件;这样接手者不必从统一报错重新猜起。
不交token、用户原文或生产完整载荷。限流、超时先作请求状态排除,别写成字段错误;重试受应用预算和停止条件约束。证据指向契约错位,可自行修正并复验;指向平台请求或响应异常,交平台或集成负责人核验;缺证据则先补采,不急着换模型。
如果问题已超出本次响应,整体路径还缺什么?
出海团队的多语言客服结果可能继续进入不同系统;讨论协作前,先写清字段解释、实体核对和动作批准各自的边界。若要与Win Gaming(WG)确认AI接口集成验收需求及出海系统集成边界,可携带上述版本清单、脱敏证据、契约差异确认需求匹配。官网展示智能包网、游戏API及官方商务等范围,未据此确认OpenAI/Gemini专项集成或托管能力,具体协作范围须另行确认。