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

Stack Overflow克隆项目集成ChatGPT API遇400错误求助

400 Bad Request错误排查与解决方法

可能的原因及对应解决方式

1. OpenAI API密钥配置错误

  • 检查.env文件中OPEN_AI_KEY是否正确:确认密钥无拼写错误、无多余空格,且该密钥未过期、拥有对应模型的调用权限。
  • 解决:登录OpenAI平台查看密钥状态,修正.env中的密钥内容,确保变量名严格为OPEN_AI_KEY。

2. 所使用的模型已停用

text-davinci-003属于旧版补全模型,OpenAI已在2024年1月停止对其提供支持,调用会直接报错。

  • 解决:将模型替换为当前可用的文本补全模型,例如gpt-3.5-turbo-instruct,修改控制器中的模型参数:
    const response = await openai.createCompletion({
      model: "gpt-3.5-turbo-instruct", // 替换为可用模型
      prompt: `${message}`,
      max_tokens: 100,
      temperature: 0,
    });
    

3. 请求参数不合法

  • 若客户端发送的message为空或格式错误,会导致OpenAI请求失败;另外prompt长度+max_tokens超出模型上下文限制也会触发错误。
  • 解决:
    1. 在控制器中添加参数校验,提前拦截空请求:
      export const chatbotController = async (req, res) => {
        const { message } = req.body
        // 新增校验逻辑
        if (!message || message.trim() === '') {
          return res.status(400).json({ error: '提问内容不能为空' });
        }
        try {
          // 原有请求逻辑
        }
      }
      
    2. 确保prompt长度与max_tokens之和不超过所选模型的上下文限制(例如gpt-3.5-turbo-instruct最大为4096 tokens)。

4. 服务端未正确接收请求体

虽然配置了express.json()中间件,但仍可能存在解析异常,导致无法获取req.body.message。

  • 解决:在控制器开头添加日志打印,确认请求体是否正确接收:
    export const chatbotController = async (req, res) => {
      console.log('Received request body:', req.body); // 新增日志
      const { message } = req.body
      // 原有逻辑
    }
    
    若日志显示req.body为空,检查express.json()中间件是否在路由挂载前加载(你的代码中顺序是正确的,可确认是否存在其他中间件干扰)。

5. 网络或OpenAI服务问题

服务器无法连接到OpenAI API,可能是网络防火墙、代理限制,或OpenAI临时故障。

  • 解决:在服务器终端执行以下命令测试网络连通性:
    curl https://api.openai.com/v1/models -H "Authorization: Bearer YOUR_OPENAI_KEY"
    
    若无法返回模型列表,排查服务器网络设置;若返回服务错误,等待OpenAI恢复或查看其状态公告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:45:09