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

OpenAI API返回不完整响应原因排查及解决方法求助

问题分析与解决办法

原因

返回的finish_reason: 'length'直接点明了问题:你使用的text-davinci-003模型默认max_tokens值为16,当生成的补全token数达到这个上限时,API就会截断响应。而ChatGPT网页版使用的模型(如gpt-3.5-turbo)默认max_tokens更高,且会自动适配内容长度,所以能返回完整答案。从你的返回数据也能看到,completion_tokens刚好是16,完全触发了默认上限。

解决办法

1. 手动设置max_tokens参数

在请求的body中添加max_tokens字段,设置一个足够覆盖所需内容的数值(注意:text-davinci-003的总token上限为4097,即prompt_tokens + completion_tokens不能超过这个值)。

修改后的请求代码示例:

fetch(url, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${apiKey}`,
  },
  body: JSON.stringify({
    model: "text-davinci-003",
    prompt: "how to make 54 cheese pizza?",
    max_tokens: 500, // 根据需求调整,比如设为500或1000
  }),
})
  .then((response) => response.json())

2. 切换到Chat Completion API模型

OpenAI推荐使用新的Chat Completion接口(如gpt-3.5-turbo),这类模型不仅成本更低,默认max_tokens更高,而且更适合对话类生成任务。示例代码如下:

fetch(url, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${apiKey}`,
  },
  body: JSON.stringify({
    model: "gpt-3.5-turbo",
    messages: [
      { role: "user", content: "how to make 54 cheese pizza?" }
    ],
    max_tokens: 1000, // 可按需调整
  }),
})
  .then((response) => response.json())

3. 分段请求长内容

如果需要生成的内容长度远超单请求的token上限,可以将问题拆分为多个步骤,先请求第一部分内容,再将已生成的内容作为上下文,继续请求后续部分,直到获取完整答案。

内容的提问来源于stack exchange,提问作者Minesweeper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:22:21