中文 | English
OpenAI API 接口转发服务
The fastest way to deploy openai api forwarding
本项目用于解决一些地区无法直接访问OpenAI的问题,将该服务部署在可以正常访问openai api的服务器上,通过该服务转发OpenAI的请求。即搭建反向代理服务
测试访问:https://caloi.top/openai/v1/chat/completions
或者说 https://caloi.top/openai 等价于 https://api.openai.com
基础功能
- 支持转发OpenAI所有接口
- 支持流式响应
- 支持指定转发路由前缀
- docker部署
- pip 安装部署
高级功能
- 实时记录聊天记录(包括流式响应的聊天内容)
- 支持默认openai api key(多api key 循环调用)
- 自定义forward api key 代替 openai api key (见高级配置)
- 支持请求IP验证(IP白名单与黑名单)
这里以个人使用该项目搭建好的代理服务 https://caloi.top/openai 为例
基于开源项目ChatGPT-Next-Web搭建自己的chatgpt服务
替换docker启动命令中的 BASE_URL
为我们自己搭建的代理服务地址
docker run -d \
-p 3000:3000 \
-e OPENAI_API_KEY="sk-******" \
-e BASE_URL="caloi.top/openai" \
-e CODE="<your password>" \
yidadaa/chatgpt-next-web
访问 https://caloi.top 。访问密码为 beidongjiedeguang
JS/TS
import { Configuration } from "openai";
const configuration = new Configuration({
+ basePath: "https://caloi.top/openai/v1",
apiKey: "sk-******",
});
Python
import openai
+ openai.api_base = "https://caloi.top/openai/v1"
openai.api_key = "sk-******"
curl --location 'https://caloi.top/openai/v1/images/generations' \
--header 'Authorization: Bearer sk-******' \
--header 'Content-Type: application/json' \
--data '{
"prompt": "A photo of a cat",
"n": 1,
"size": "512x512"
}'
选择一种即可
安装
pip install openai-forward
运行转发服务
可通过--port
指定端口号,默认为8000
openai_forward run --port=9999
服务就搭建完成了,使用方式只需将https://api.openai.com
替换为服务所在端口http://{ip}:{port}
即可。
当然也可以将 OPENAI_API_KEY 作为环境变量或--api_key
参数传入作为默认api key, 这样客户端在请求相关路由时可以无需在Header中传入Authorization。
带默认api key的启动方式:
openai_forward run --port=9999 --api_key="sk-******"
注: 如果既存在默认api key又在请求头中传入了api key,则以请求头中的api key会覆盖默认api key.
docker run -d -p 9999:8000 beidongjiedeguang/openai-forward:latest
将映射宿主机的9999端口,通过http://{ip}:9999
访问服务。
注:同样可以在启动命令中通过-e传入环境变量OPENAI_API_KEY=sk-xxx作为默认api key
git clone https://github.com/beidongjiedeguang/openai-forward.git --depth=1
cd openai-forward
Docker
docker-compose up
pip
pip install -e .
openai-forward run
替换openai的api地址为该服务的地址即可,如:
https://api.openai.com/v1/chat/completions
替换为
http://{ip}:{port}/v1/chat/completions
openai-forward run
参数配置项
配置项 | 说明 | 默认值 |
---|---|---|
--port | 服务端口号 | 8000 |
--workers | 工作进程数 | 1 |
环境变量配置项
支持从运行目录下的.env
文件中读取:
环境变量 | 说明 | 默认值 |
---|---|---|
OPENAI_API_KEY | 默认openai api key,支持多个默认api key, 以 sk- 开头, 以空格分割 |
无 |
FORWARD_KEY | 允许调用方使用该key代替openai api key,支持多个forward key, 以fk- 开头, 以空格分割 |
无 |
OPENAI_BASE_URL | 转发base url | https://api.openai.com |
LOG_CHAT | 是否记录聊天内容 | true |
ROUTE_PREFIX | 路由前缀 | 无 |
IP_WHITELIST | ip白名单, 空格分开 | 无 |
IP_BLACKLIST | ip黑名单, 空格分开 | 无 |
保存路径在当前目录下的Log/
路径中。
聊天日志以 chat_
开头, 默认每5轮对话写入一次文件
记录格式为
{'host': xxx, 'model': xxx, 'message': [{'user': xxx}, {'assistant': xxx}]}
{'assistant': xxx}
{'host': ...}
{'assistant': ...}
...
设置api_key为自己设置的forward key
需要配置 OPENAI_API_KEY 和 FORWARD_KEY, 例如
OPENAI_API_KEY=sk-*******
FORWARD_KEY=fk-****** # 这里fk-token由我们自己定义
这里我们配置了FORWARD_KEY为fk-******
, 那么后面客户端在调用时只需设置OPENAI_API_KEY为我们自定义的fk-******
即可。
这样的好处是在使用一些需要输入OPENAI_API_KEY的第三方应用时,我们可以使用fk-******
搭配proxy使用(如下面的例子) 而无需担心OPENAI_API_KEY被泄露。
用例:
curl https://caloi.top/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer fk-mytoken-abcd" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}'
Python
import openai
+ openai.api_base = "https://caloi.top/openai/v1"
- openai.api_key = "sk-******"
+ openai.api_key = "fk-******"
Web application
docker run -d \
-p 3000:3000 \
-e OPENAI_API_KEY="fk-******" \
-e BASE_URL="caloi.top/openai" \
-e CODE="<your password>" \
yidadaa/chatgpt-next-web
Openai-forward is licensed under the MIT license.