liqiujiong / openai-forward

🚀 Openai api forwarding · OpenAI 接口转发服务 · Openai Reverse Proxy · streaming forwarding

Home Page:https://caloi.top

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

中文 | English


OpenAI Forward

OpenAI API 接口转发服务
The fastest way to deploy openai api forwarding

PyPI version License Release (latest by date) GitHub repo size docer image size tests pypi downloads codecov

本项目用于解决一些地区无法直接访问OpenAI的问题,将该服务部署在可以正常访问openai api的服务器上,通过该服务转发OpenAI的请求。即搭建反向代理服务
测试访问:https://caloi.top/openai/v1/chat/completions 将等价于 https://api.openai.com/v1/chat/completions
或者说 https://caloi.top/openai 等价于 https://api.openai.com

Table of Contents

Features

  • 支持转发OpenAI所有接口
  • 支持流式响应
  • 实时记录聊天记录(包括流式响应的聊天内容)
  • 支持默认api key(多api key 循环调用)
  • pip安装部署
  • docker部署
  • 支持多进程转发
  • 支持指定转发路由前缀
  • 支持请求IP验证

应用

这里以个人使用该项目搭建好的代理服务 https://caloi.top/openai 为例

基于开源项目ChatGPT-Next-Web搭建自己的chatgpt服务
替换docker启动命令中的 BASE_URL为我们自己搭建的代理服务地址

docker run -d -p 3000:3000 -e OPENAI_API_KEY="sk-xxx" -e CODE="<your password>" -e BASE_URL="caloi.top/openai" 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-******"

Image Generation (DALL-E):

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

安装

pip install openai-forward

运行转发服务
可通过--port指定端口号,默认为8000,可通过--workers指定工作进程数,默认为1

openai_forward run --port=9999 --workers=1

服务就搭建完成了,使用方式只需将https://api.openai.com 替换为服务所在端口http://{ip}:{port} 即可。

当然也可以将 OPENAI_API_KEY 作为环境变量传入作为默认api key, 这样客户端在请求相关路由时可以无需在Header中传入Authorization。 带默认api key的启动方式:

OPENAI_API_KEY="sk-xxx" openai_forward run --port=9999 --workers=1

注: 如果既存在默认api key又在请求头中传入了api key,则以请求头中的api key会覆盖默认api key.

Docker (推荐)

docker run --name="openai-forward" -d -p 9999:8000 beidongjiedeguang/openai-forward:latest 

将映射宿主机的9999端口,通过http://{ip}:9999访问服务。
注:同样可以在启动命令中通过-e传入环境变量OPENAI_API_KEY=sk-xxx作为默认api key

服务调用

替换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 默认api key,支持多个默认api key, 以空格分割
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': ...}

...

About

🚀 Openai api forwarding · OpenAI 接口转发服务 · Openai Reverse Proxy · streaming forwarding

https://caloi.top

License:MIT License


Languages

Language:Python 92.3%Language:Makefile 5.0%Language:Dockerfile 2.7%