本文将介绍一个名为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.json
和package-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进行交互。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。