javascript - OpenAI ChatGPT (GPT-3.5) API 错误 404 : "Request failed with status code 404"

标签 javascript node.js reactjs openai-api chatgpt-api

我正在开发一个 ChatGPT-App,使用 React 和 Axios 向 OpenAI 的 GPT-3.5 API 发出 API 请求。但是,我在尝试发出请求时遇到 404 错误。我希望有人可以帮助我确定问题并指导我如何解决它。以下是 App.js 和 index.js 代码和错误消息:

前端

App.js

function App() {
  const [messages, setMessages] = useState([]);
  const [input, setInput] = useState("");

  const sendMessage = async () => {
    if (input.trim() === "") return;
  
    const userInput = input; // Store user input in a temporary variable
    setMessages([...messages, { type: "user", text: userInput }]);
    setInput("");
  
    try {
      const response = await axios.post("http://localhost:5000/api/chat", { text: userInput });
      const gptResponse = response.data.message;
      setMessages((prevMessages) => [
        ...prevMessages,
        { type: "chatgpt", text: gptResponse },
      ]);
    } catch (error) {
      console.error("Error:", error);
    }
  };

后端

index.js

const express = require("express");
const axios = require("axios");
const cors = require("cors");

const app = express();
app.use(express.json());
app.use(cors());

const openai_api_key = "MYOPENAI-APIKEY";
const headers = {
  "Content-Type": "application/json",
  "Authorization": `Bearer ${openai_api_key}`,
};

app.post("/api/chat", async (req, res) => {
  try {
    const input = req.body.text;
    const response = await axios.post(
      "https://api.openai.com/v1/engines/davinci-codex/completions",
      {
        prompt: `User: ${input}\nChatGPT: `,
        max_tokens: 150,
        temperature: 0.7,
        n: 1,
      },
      { headers }
    );

    const gptResponse = response.data.choices[0].text.trim();
    res.json({ message: gptResponse });
  } catch (error) {
    console.error("Error:", error);
    res.status(500).json({ error: "An error occurred while processing your request." });
  }
});

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
  console.log(`Server started on port ${PORT}`);
});

错误信息: AxiosError:请求失败,状态代码 404

我已验证 API key 正确,URL 也应该正确。谁能指出导致此错误的正确方向?任何帮助将不胜感激。谢谢!

最佳答案

Chat Completions API 之间存在三个主要区别(即 GPT-3.5 API)和 Completions API (即 GPT-3 API)。

如果您使用 OpenAI 库( NodeJSPython )

注意:OpenAI NodeJS SDK v4released于2023年8月16日发布,并且是对SDK的完全重写。下面的代码根据您当前拥有的版本而有所不同。请参阅 v3v4 migration guide .

差异如下:

  1. 功能
    • 完成 API:
      • OpenAI NodeJS SDK v3:openai.createCompletion
      • OpenAI NodeJS SDK v4:openai.completions.create
    • 聊天完成 API:
      • OpenAI NodeJS SDK v3:openai.createChatCompletion
      • OpenAI NodeJS SDK v4:openai.chat.completions.create
  2. prompt 参数(Completions API)已替换为 messages 参数(Chat Completions API)
  3. 响应访问
    • 完成 API:
      • OpenAI NodeJS SDK v3:返回response.data.choices[0].text;
      • OpenAI NodeJS SDK v4:返回response.choices[0].text;
    • 聊天完成 API:
      • OpenAI NodeJS SDK v3:返回response.data.choices[0].message.content;
      • OpenAI NodeJS SDK v4:返回response.choices[0].message.content;

工作示例(NodeJS)

• 如果您有 OpenAI NodeJS SDK v3:

const { Configuration, OpenAIApi } = require('openai');

const configuration = new Configuration({
  apiKey: 'sk-xxxxxxxxxxxxxxxxxxxx',
});

const openai = new OpenAIApi(configuration);

async function getChatGptResponse(request) {
  try {
    const response = await openai.createChatCompletion({
      model: 'gpt-3.5-turbo',
      messages: [{ role: 'user', content: 'Hello!' }],
    });

    console.log(response.data.choices[0].message.content);
    return response.data.choices[0].message.content;
  } catch (err) {
    console.log('Error: ' + err);
    return err;
  }
}

getChatGptResponse();

• 如果您有 OpenAI NodeJS SDK v4:

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: 'sk-xxxxxxxxxxxxxxxxxxxx',
});

async function getChatGptResponse(request) {
  try {
    const response = await openai.chat.completions.create({
      model: 'gpt-3.5-turbo',
      messages: [{ role: 'user', content: 'Hello!' }],
    });

    console.log(response.choices[0].message.content);
    return response.choices[0].message.content;
  } catch (err) {
    console.log('Error: ' + err);
    return err;
  }
}

getChatGptResponse();

如果您没有使用 OpenAI 库

差异如下:

  1. API端点
    • Completions API:https://api.openai.com/v1/completions
    • 聊天完成 API:https://api.openai.com/v1/chat/completions
  2. prompt 参数(Completions API)已替换为 messages 参数(Chat Completions API)
  3. 响应访问
    • 完成 API:
      • OpenAI NodeJS SDK v3:
        const chatGptResponse = response.data.choices[0].text;
      • OpenAI NodeJS SDK v4:
        const chatGptResponse = response.choices[0].text;
    • 聊天完成 API:
      • OpenAI NodeJS SDK v3:
        const chatGptResponse = response.data.choices[0].message.content;
      • OpenAI NodeJS SDK v4:
        const chatGptResponse = response.choices[0].message.content;

工作示例

• 如果您有 OpenAI NodeJS SDK v3:

const express = require('express');
const axios = require('axios');
const cors = require('cors');

const app = express();
app.use(express.json());
app.use(cors());

const openaiApiKey = 'sk-xxxxxxxxxxxxxxxxxxxx';

const headers = {
  'Content-Type': 'application/json',
  'Authorization': `Bearer ${openaiApiKey}`,
};

app.post('/api/chat', async (req, res) => {
  try {
    const input = req.body.text;

    const response = await axios.post(
      'https://api.openai.com/v1/chat/completions',
      {
        model: 'gpt-3.5-turbo',
        messages: [{role: 'user', content: `${input}`}],
      },
      { headers }
    );

    const chatGptResponse = response.data.choices[0].message.content;

    console.log(chatGptResponse);
    res.status(200).json({ message: chatGptResponse });
  } catch (err) {
    console.log('Error: ' + err);
    res.status(500).json({ error: 'An error occurred while processing your request' });
  }
});

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
  console.log(`Server started on port ${PORT}`);
});

• 如果您有 OpenAI NodeJS SDK v4:

const express = require('express');
const axios = require('axios');
const cors = require('cors');

const app = express();
app.use(express.json());
app.use(cors());

const openaiApiKey = 'sk-xxxxxxxxxxxxxxxxxxxx';

const headers = {
  'Content-Type': 'application/json',
  'Authorization': `Bearer ${openaiApiKey}`,
};

app.post('/api/chat', async (req, res) => {
  try {
    const input = req.body.text;

    const response = await axios.post(
      'https://api.openai.com/v1/chat/completions',
      {
        model: 'gpt-3.5-turbo',
        messages: [{role: 'user', content: `${input}`}],
      },
      { headers }
    );

    const chatGptResponse = response.choices[0].message.content;

    console.log(chatGptResponse);
    res.status(200).json({ message: chatGptResponse });
  } catch (err) {
    console.log('Error: ' + err);
    res.status(500).json({ error: 'An error occurred while processing your request' });
  }
});

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
  console.log(`Server started on port ${PORT}`);
});

关于javascript - OpenAI ChatGPT (GPT-3.5) API 错误 404 : "Request failed with status code 404",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75909209/

相关文章:

javascript - ng-init 或 ng-bind 不适用于示例代码

javascript - TouchEvent 在 Firefox 和其他网站浏览器中不起作用

javascript - 在不使用 JavaScript 的情况下通过 iframe 访问时从页面重定向?

滚动控制台窗口时 Node.js 停止

javascript - 在 Meteor 中发布到客户端之前转换字段

javascript - 导入时 Fetch 返回 undefined

reactjs - React 使用 TypeScript,不要使用 {} 作为类型。 {

javascript - 对数组中的json进行排序

node.js - 为什么我的所有图像都没有显示?

reactjs - 让 Nextjs 忽略 babel.config.js