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
相关产品推荐
相关产品推荐

