You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenAI API(@ai-sdk/openai)结构化输出时出现冗余格式异常响应的问题咨询

OpenAI API(@ai-sdk/openai)结构化输出时出现冗余格式异常响应的问题咨询

我最近在用@ai-sdk/openai包调用OpenAI的o4-mini模型做结构化输出,代码大致是这样的:

const { object } = await generateObject({
  model: openai("o4-mini"),
  system,
  messages,
  schema: z.object({
    decision: z.enum(['OPTION1', 'OPTION2']).describe('which decision you chose'),
    confidence: z.number().min(0).max(1).describe('how confident you are in your decision, from 0 to 1'),
    reasoning: z.string().describe('reasoning for the decision')
  }),
  providerOptions: {
    openai: {
      reasoningEffort: 'high',
    },
  },
  temperature: 0.7,
})

系统提示和消息数组我都检查过没问题,在OpenAI仪表板里也能看到格式解析是正确的,但偶尔会遇到很奇怪的格式异常响应——模型返回的JSON本身是对的,但后面跟着一大堆毫无意义的空换行,占了超多输出tokens。有时候超了输出限制直接导致调用失败,就算没失败也平白多花了不少钱。而且这个问题只在调用OpenAI的时候出现,用Gemini或者其他提供商从来没碰到过。

举个坏响应的例子(后面的空换行省略了一部分,实际有超多):

{
  "decision": "OPTION1",
  "confidence": 0.7,
  "reasoning": "lorem ipsum blah blah blah whatever reasoning"
}












// 此处省略大量空换行

针对这个问题,我整理了几个可能的解决方向,你可以试试:

  • 降低temperature参数:当前设为0.7,这个值偏高会让模型输出随机性更强。可以降到0.3左右,减少模型生成冗余内容的概率
  • 强化系统提示要求:在系统提示里明确要求模型严格按照指定JSON格式输出,不要添加任何额外内容。比如加上一句:"请仅返回符合给定Schema的纯JSON数据,不要包含任何多余的换行、注释或解释性文本"
  • 优化结构化输出配置:虽然@ai-sdk/openai已经帮你处理了schema封装,但可以尝试在providerOptions里添加更严格的参数,确保启用OpenAI的强制结构化输出特性(如果当前版本支持的话)
  • 添加响应后处理步骤:拿到模型返回的内容后,先做一次清理——比如用正则去掉多余的空换行,修剪首尾空白,再进行JSON解析,这样就算有冗余内容也能提前过滤掉
  • 测试其他模型:o4-mini相对较新,可能存在一些边缘场景的格式问题。可以临时切换到gpt-4o这类更稳定的模型,看看是否还会出现同样的问题,以此排查是不是模型本身的特性导致的

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:14:32