Skip to main content

🚀 OpenAI API Reverse Proxy · ChatGPT API Proxy

Project description

中文 | English


OpenAI Forward

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

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

本项目用于解决一些地区无法直接访问OpenAI的问题,将该服务部署在可以正常访问OpenAI API的(云)服务器上, 通过该服务转发OpenAI的请求。即搭建反向代理服务; 允许输入多个OpenAI API-KEY 组成轮询池; 可自定义二次分发api key.


由本项目搭建的长期代理地址:

https://api.openai-forward.com
https://cloudflare.worker.openai-forward.com
https://cloudflare.page.openai-forward.com
https://vercel.openai-forward.com
https://render.openai-forward.com
https://railway.openai-forward.com

功能

基础功能

  • 支持转发OpenAI所有接口
  • 支持流式响应
  • 支持指定转发路由前缀
  • docker部署
  • pip 安装部署
  • Railway 一键部署
  • Render 一键部署
  • cloudflare 部署
  • Vercel一键部署

高级功能

  • 允许输入多个openai api key 组成轮询池
  • 自定义 转发api key (见高级配置)
  • 流式响应对话日志
  • 多接口转发

部署指南

👉 部署文档

提供以下几种部署方式
有海外vps方案

  1. pip 安装部署
  2. Docker部署

    https://api.openai-forward.com

无vps免费部署方案

  1. Railway部署

    https://railway.openai-forward.com

  2. Render一键部署

    https://render.openai-forward.com


下面的部署仅提供单一转发功能

  1. 一键Vercel部署

    https://vercel.openai-forward.com

  2. cloudflare部署

    https://cloudflare.page.openai-forward.com

应用

聊天应用

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

details
docker run -d \
    -p 3000:3000 \
    -e OPENAI_API_KEY="sk-******" \
    -e BASE_URL="https://api.openai-forward.com" \
    -e CODE="******" \
    yidadaa/chatgpt-next-web 

在代码中使用

Python

  import openai
+ openai.api_base = "https://api.openai-forward.com/v1"
  openai.api_key = "sk-******"
More Examples

JS/TS

  import { Configuration } from "openai";
  
  const configuration = new Configuration({
+ basePath: "https://api.openai-forward.com/v1",
  apiKey: "sk-******",
  });

gpt-3.5-turbo

curl https://api.openai-forward.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-******" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

Image Generation (DALL-E)

curl --location 'https://api.openai-forward.com/v1/images/generations' \
--header 'Authorization: Bearer sk-******' \
--header 'Content-Type: application/json' \
--data '{
    "prompt": "A photo of a cat",
    "n": 1,
    "size": "512x512"
}'

配置选项

配置的设置方式支持两种
一种为在命令行中执行aifd run 的运行参数(如--port=8000)中指定;
另一种为读取环境变量的方式指定。

命令行参数

可通过 aifd run --help 查看

Click for more details

aifd run参数配置项

配置项 说明 默认值
--port 服务端口号 8000
--workers 工作进程数 1
--openai_base_url 同 OPENAI_BASE_URL https://api.openai.com
--openai_route_prefix 同 OPENAI_ROUTE_PREFIX None
--api_key 同 OPENAI_API_KEY None
--forward_key 同 FORWARD_KEY None
--extra_base_url 同 EXTRA_BASE_URL None
--extra_route_prefix 同 EXTRA_ROUTE_PREFIX None
--log_chat 同 LOG_CHAT False

环境变量配置项

支持从运行目录下的.env文件中读取

环境变量 说明 默认值
OPENAI_BASE_URL 默认 openai官方 api 地址 https://api.openai.com
OPENAI_ROUTE_PREFIX openai(接口格式)路由前缀 /
OPENAI_API_KEY 默认openai api key,支持多个默认api key, 以 sk- 开头, 以逗号分隔
FORWARD_KEY 允许调用方使用该key代替openai api key,支持多个forward key, 以逗号分隔; 如果设置了OPENAI_API_KEY,而没有设置FORWARD_KEY, 则客户端调用时无需提供密钥, 此时出于安全考虑不建议FORWARD_KEY置空
EXTRA_BASE_URL 额外转发服务地址
EXTRA_ROUTE_PREFIX 额外转发服务路由前缀
LOG_CHAT 是否记录聊天内容 false

高级配置

设置openai api_key为自定义的forward key

Click for more details

需要配置 OPENAI_API_KEY 和 FORWARD_KEY, 例如

OPENAI_API_KEY=sk-*******
FORWARD_KEY=fk-****** # 这里fk-token由我们自己定义

这里我们配置了FORWARD_KEY为fk-******, 那么后面客户端在调用时只需设置OPENAI_API_KEY为我们自定义的fk-****** 即可。
这样的好处是在使用一些需要输入OPENAI_API_KEY的第三方应用时,我们可以使用自定义的api-keyfk-******, 无需担心真正的OPENAI_API_KEY被泄露。并且可以对外分发fk-******

用例:

curl https://api.openai-forward.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer fk-******" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

Python

  import openai
+ openai.api_base = "https://api.openai-forward.com/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="https://api.openai-forward.com" \
    -e CODE="<your password>" \
    yidadaa/chatgpt-next-web 

多路由转发

支持转发不同地址的服务至同一端口的不同路由下,基本可以转发任何服务。
用例见 .env.example

对话日志

默认不记录对话日志,若要开启需设置环境变量LOG_CHAT=true

Click for more details

保存路径在当前目录下的Log/chat路径中。
记录格式为

{'messages': [{'user': 'hi'}], 'model': 'gpt-3.5-turbo', 'forwarded-for': '', 'uid': '467a17ec-bf39-4b65-9ebd-e722b3bdd5c3', 'datetime': '2023-07-18 14:01:21'}
{'assistant': 'Hello there! How can I assist you today?', 'uid': '467a17ec-bf39-4b65-9ebd-e722b3bdd5c3'}
{'messages': [{'user': 'Hello!'}], 'model': 'gpt-3.5-turbo', 'forwarded-for': '', 'uid': 'f844d156-e747-4887-aef8-e40d977b5ee7', 'datetime': '2023-07-18 14:01:23'}
{'assistant': 'Hi there! How can I assist you today?', 'uid': 'f844d156-e747-4887-aef8-e40d977b5ee7'}

转换为json格式:

aifd convert

得到chat.json

[
    {
        "datetime": "2023-07-18 14:01:21",
        "forwarded-for": "",
        "model": "gpt-3.5-turbo",
        "messages": [
            {
                "user": "hi"
            }
        ],
        "assistant": "Hello there! How can I assist you today?"
    },
    {
        "datetime": "2023-07-18 14:01:23",
        "forwarded-for": "",
        "model": "gpt-3.5-turbo",
        "messages": [
            {
                "user": "Hello!"
            }
        ],
        "assistant": "Hi there! How can I assist you today?"
    }
]

Backer and Sponsor

License

OpenAI-Forward is licensed under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ai_forward-0.0.1.tar.gz (14.0 kB view hashes)

Uploaded Source

Built Distribution

ai_forward-0.0.1-py3-none-any.whl (17.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page