头图

本文将介绍一个名为OpenAI-Proxy-Api的开源项目,该项目使用Node.js和Express.js框架,将OpenAI的API服务部署为一个本地代理服务器。通过云函数在国内顺畅调用 OpenAI API。本项目的目的是通过搭建一个代理服务器,帮助国内用户克服网络限制,轻松享受 OpenAI API 的强大功能。

项目概述

OpenAI-Proxy-Api是一个简单的代理服务器,允许开发人员在本地环境中轻松地与OpenAI API(如GPT-3和Codex等语言模型)进行交互。它使用Express.js框架构建,并使用dotenv库管理环境变量。

项目结构

以下是项目的主要结构:
OpenAI-Proxy-Api/
|-- .env.example
|-- .gitignore
|-- app.js
|-- package.json
|-- package-lock.json
|-- README.md

app.js:应用程序的主入口文件,包含代理服务器的所有逻辑。
.env.example:一个示例环境变量文件,您需要根据自己的API密钥复制并重命名为.env。
package.jsonpackage-lock.json:项目的依赖关系和配置文件。

项目部署与使用

代理服务器代码解析

首先,我们导入所需的库:

const express = require("express");
const axios = require("axios");
require("dotenv").config();

然后,我们初始化一个Express应用实例并设置端口号:

const app = express();
const port = 3000;

接下来,我们创建一个名为apiRequest的函数,用于将请求转发到OpenAI API:

async function apiRequest(url, method, data) {
  try {
    const response = await axios({
      url: url,
      method: method,
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
      },
      data: data,
    });

    return response.data;
  } catch (error) {
    console.error(`Error: ${error}`);
    return { error: error.message };
  }
}

在这个函数中,我们使用axios库向OpenAI API发起请求,并通过process.env.OPENAI_API_KEY获取API密钥。这个函数会返回请求的结果,如果请求出错,则返回一个包含错误信息的对象。

接下来,我们创建一个用于处理POST请求的路由,该路由将用户的请求转发到OpenAI API:

app.post("/v1/engines/:engine_id/completions", async (req, res) => {
  const engine_id = req.params.engine_id;
  const data = req.body;

  const response = await apiRequest(
    `https://api.openai.com/v1/engines/${engine_id}/completions`,
    "post",
    data
  );

  res.json(response);
});

在这个路由中,我们从请求参数中获取引擎ID(engine_id),并将请求体传递给apiRequest函数。然后,我们将OpenAI API的响应转发给用户。
最后,我们启动服务器并在控制台输出一条消息,以确认服务器正在运行:

app.listen(port, () => {
  console.log(`OpenAI Proxy API server is running at http://localhost:${port}`);
});

现在,您可以通过向http://localhost:3000/v1/engines/:engine_id/completions发送POST请求,以与OpenAI API进行交互。


Happy
1 声望0 粉丝