使用Node.js官方OpenAI库调用ChatGPT API时持续出现400空错误
使用OpenAI Node.js库持续出现400错误排查
我在后端使用官方OpenAI Node.js库时,持续出现400空错误,已检查API密钥但问题仍未解决。
代码实现
export class ChatGPTServiceImplemnt implements ChatGPTService { async sendMessage(message:string): Promise<string|undefined> { try { const respons = await openai.createChatCompletion({ model: "gpt-3.5-turbo", messages: [{ role: "user", content: message }], temperature: 0, top_p: 1.0, n: 1, frequency_penalty: 0.0, presence_penalty: 0.0, stop: ["#", ";"], }); return respons.data.choices[0].message?.content; } catch (error) { console.log(`this is the error from this ${error}`); throw error; } } }
请求接口代码
export async function chatGPT(req: Request, res: Response,) { try { const {message} = req.body; if (message == null) { return res.status(400).send({message: "Missing fields"}); } const chatGPTService = myContainer .get<ChatGPTService>(TYPES.ChatGPTservice); const dataAuthService = await chatGPTService.sendMessage(message); if (dataAuthService != undefined) { const data = dataAuthService; return res.status(200).send({message: "Succesfull", data}); } else { return res.status(200).send({message: "faild", dataAuthService}); } } catch (error) { return res.status(400).send({error, message: "error"}); } }
错误截图

排查及解决建议
- 检查请求内容合法性:
- 当前接口仅判断
message == null,空字符串""会绕过这个校验,导致OpenAI API收到空的content参数触发400错误。建议将判断改为if (!message),拦截空字符串、null、undefined等无效值。 - 暂时注释
stop: ["#", ";"]参数测试,部分情况下特殊字符组成的stop序列可能触发API参数校验失败。
- 当前接口仅判断
- 修正代码拼写错误:
- 变量名
respons应为response,避免后续调试时因变量名错误导致的问题。 - 类名
ChatGPTServiceImplemnt存在拼写错误(应为ChatGPTServiceImpl),可能影响依赖注入或类引用逻辑。
- 变量名
- 完善错误日志:
- 在catch块中打印更详细的错误信息,OpenAI的错误详情通常在
error.response.data中,修改日志代码为:console.error('OpenAI API Error:', error.response?.data || error.message);
- 在catch块中打印更详细的错误信息,OpenAI的错误详情通常在
- 确认OpenAI实例初始化:
- 确保初始化时正确配置API密钥,示例如下:
import { OpenAI } from "openai"; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, // 确认环境变量已正确配置 });
- 确保初始化时正确配置API密钥,示例如下:
- 发送最小化测试请求:
- 简化参数发送测试请求,验证基础功能是否正常:
const response = await openai.createChatCompletion({ model: "gpt-3.5-turbo", messages: [{ role: "user", content: "Hello" }], });
- 简化参数发送测试请求,验证基础功能是否正常:
内容的提问来源于stack exchange,提问作者Gbenga B Ayannuga
相关产品推荐
相关产品推荐

