如何修复调用OpenAI Chat Completions API时的400错误?
解决OpenAI API 400 Bad Request错误(获取德语新闻)
你的代码出现400错误的核心原因:用了gpt-3.5-turbo模型,但用了错误的请求参数格式——这个模型属于Chat接口,不能用prompt字段传递指令,必须用messages数组。
直接用下面修正后的代码替换你原来的JS代码,就能解决问题:
const apiKey = "你的API密钥"; // 替换成你自己的真实密钥 const getNewsButton = document.getElementById("getNewsButton"); const newsText = document.getElementById("newsText"); getNewsButton.addEventListener("click", async () => { const userPrompt = "Give me the latest news in German"; const temperature = 0.7; // 数值越低结果越客观,越高越有创造性 const max_tokens = 300; // 调大一点能获取更完整的新闻内容 try { const response = await fetch("https://api.openai.com/v1/chat/completions", { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${apiKey}`, }, body: JSON.stringify({ model: "gpt-3.5-turbo", // 关键修改:用messages数组传递用户指令 messages: [{"role": "user", "content": userPrompt}], max_tokens: max_tokens, temperature: temperature, }), }); const data = await response.json(); // 关键修改:Chat接口的返回结果路径是message.content const news = data.choices[0].message.content; newsText.textContent = news; } catch (error) { console.error("获取新闻出错:", error); newsText.textContent = "获取新闻时出错,请稍后重试。"; } });
关键修改说明
- 请求参数格式:把原来的
prompt: prompt改成messages: [{"role": "user", "content": "你的指令"}],这是Chat模型要求的标准格式 - 结果提取路径:原来的
data.choices[0].text改成data.choices[0].message.content,因为Chat接口返回的结构和旧模型不同 - 顺手把
max_tokens调到300,避免原来100的长度限制导致新闻内容不完整
额外注意事项
- 确保你已经把
"你的API密钥"替换成自己的真实OpenAI密钥,密钥不能有空格或多余字符 - 不要把API密钥直接放在公开的前端代码里(如果你的网页会发布到网上),否则密钥会被别人盗用,最好用后端服务器中转请求
- 如果还是报错,打开浏览器的开发者工具(按F12),查看控制台里的详细错误信息,能帮你进一步排查问题
内容的提问来源于stack exchange,提问作者sid
相关产品推荐
相关产品推荐

