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

Express.js集成GPT-3.5-turbo替代Davinci引擎时请求报错问题求助

Express.js集成GPT-3.5-turbo替代Davinci引擎时请求报错问题求助

嘿,我来帮你搞定这个问题!你遇到的报错本质是GPT-3.5-turbo系列模型的API调用规则和Davinci这类补全模型完全不同,不是简单替换URL里的引擎名称就能解决的,得调整两个核心部分:API端点和请求体结构。

下面是具体的修改步骤和修正后的代码:

1. 替换API端点

GPT-3.5-turbo属于聊天模型,它的API端点不是补全模型的/engines/{model}/completions,而是专门的聊天接口:

https://api.openai.com/v1/chat/completions

2. 调整请求体结构

聊天模型不再使用prompt字段,而是用messages数组来传递上下文:

  • 你的standardPrompt应该作为system角色的消息(用来设定AI的身份/行为)
  • 用户的问题question作为user角色的消息
  • 同时要在请求体里指定model字段为gpt-3.5-turbo-0613

3. 修改响应解析逻辑

Turbo模型的响应结构和Davinci不同,要从choices[0].message.content里提取回复内容,而不是choices[0].text


修正后的完整代码:

app.get("/ask", async (req, res) => {
  const standardPrompt = prompt; // 这里假设你的prompt已经定义好,比如"你是XXX的个人助手,负责介绍XXX的背景、项目经历等"
  const question = req.query.q;

  try {
    const gptResponse = await axios.post(
      "https://api.openai.com/v1/chat/completions", // 替换为聊天模型端点
      {
        model: "gpt-3.5-turbo-0613", // 指定模型
        messages: [
          { role: "system", content: standardPrompt }, // 系统提示设定角色
          { role: "user", content: question } // 用户的问题
        ],
        max_tokens: 500,
      },
      {
        headers: {
          Authorization: `Bearer ${apiKey}`,
          "Content-Type": "application/json",
        },
      }
    );

    console.log(gptResponse.data);
    res.json(gptResponse.data.choices[0].message.content.trim()); // 调整响应提取逻辑
  } catch (error) {
    // 建议在这里打印更详细的错误信息,比如error.response.data,方便排查
    console.log("详细错误信息:", error.response?.data || error.message);
    res.status(500).send("Error in processing request");
  }
});

另外给你个小提示:在catch块里打印error.response.data能看到OpenAI返回的具体错误原因(比如参数错误、权限问题等),比只打印error对象更容易排查问题~

备注:内容来源于stack exchange,提问作者heckspoiler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:39:34