NodeJS简单对接OpenAI

528 阅读2分钟

前言

OpenAI官网:OpenAI

API文档:文档

环境搭建

Node依赖安装

// 安装依赖
// 提供服务器
npm i express
// OpenAI相关依赖
npm i openai
// 环境变量注入
npm i dotenv

开启服务

// index.js
import express from "express";
import openai from "openai";
import dotenv from "dotenv";

const app = express();

app.post("/chat", (req, res) => {
  res.send("6666");
});

app.listen(3000, () => {
  console.log("正在监听3000端口...");
});

使用nodemon index.js开启服务

访问接口

// index.http
POST http://localhost:3000/chat HTTP/1.1
Content-Type: application/json

{
  "message": "你好"
}

发送请求之后发现返回666,OK的也是成功调通接口

Express 默认不支持 POST 参数的接收,使用app.use(express.json())即可。

使用vscode插件Rest Client即可通过http后缀的文件发送请求访问接口,具体使用请自行查阅。

创建 OpenAI 实例

// index.js

// 注入环境变量
dotenv.config()

// 创建 OpenAI 实例
// 由于 apiKey 需要保密,使用 dotenv 进行注入
const openai = new OpenAI({
  apiKey: process.env["API-KEY"], // openai 官网申请(没额度)或代理openkey.cloud
  baseURL: "https://openkey.cloud/v1"  // 使用代理需要填写
})
// .env
API-KEY = "apiKey"

使用dotenv注入变量,需要在根目录下创建文件.env

完善接口

// 具体使用请参考前言的 API 文档
app.post("/chat", async (req, res) => {
  const result = await openai.chat.completions.create({
    model: "gpt-4-turbo",
    messages: [
      {
        role: "user",
        content: req.body.message
      }
    ]
  });
  res.json({
    message: result.choices[0].message.content
  });
});

生成图片接口

app.use("/create/image", async (req, res) => {
  const result = await openai.images.generate({
    model: "dall-e-3",
    quality: "hd",
    n: 1,
    prompt: req.body.message
  });
  res.json({
    message: result.data[0].url
  });
})

完整代码

import express from "express";
import OpenAI from "openai";
import dotenv from "dotenv";

// 注入环境变量
dotenv.config()

// 创建 OpenAI 实例
// 由于 apiKey 需要保密,使用 dotenv 进行注入
const openai = new OpenAI({
  apiKey: process.env["API-KEY"], // openai 官网申请(没额度)或代理openkey.cloud
  baseURL: "https://openkey.cloud/v1"  // 使用代理需要填写
})

const app = express();

// express 默认不支持 POST 参数的接收
app.use(express.json());

// req.body 接收 POST 参数
// req.query 接收 GET 参数
// req.params 接收动态参数
app.post("/chat", async (req, res) => {
  const result = await openai.chat.completions.create({
    model: "gpt-4-turbo",
    messages: [
      {
        role: "user",
        content: req.body.message
      }
    ]
  });
  res.json({
    message: result.choices[0].message.content
  });
});

app.use("/create/image", async (req, res) => {
  const result = await openai.images.generate({
    model: "dall-e-3",
    quality: "hd",
    n: 1,
    prompt: req.body.message
  });
  res.json({
    message: result.data[0].url
  });
})

app.listen(3000, () => {
  console.log("正在监听3000端口...");
});