Skip to content

🚀 一键部署自己的AI代理 · OpenAI API Reverse Proxy · ChatGPT API Proxy

License

Notifications You must be signed in to change notification settings

tistergit/openai-forward

 
 

Repository files navigation

中文 | English


OpenAI forward

OpenAI API风格接口转发服务
The fastest way to deploy llms api forwarding

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

OpenAI-Forward是大模型与用户层之间的一道转发服务, 用于对请求模型的速率限制,模型返回的Token速率限制,自定义API KEY 等。

特点

OpenAI-Forward支持以下功能:

  • 万能代理: 几乎可以转发任何请求
  • 用户速率限制: 提供请求速率限制(RPM)与流式返回的Token速率限制(TPM)
  • 自定义秘钥: 支持用户使用自定义生成的秘钥代替原始api key使用。
  • 流式响应的对话日志
  • 可同时转发多个目标服务至不同路由
  • 失败请求自动重试
  • 一分钟内完成安装与部署; 一键部署至云端
  • ...

由本项目搭建的代理服务地址:

https://api.openai-forward.com
https://render.openai-forward.com

注:本项目中提供的所有代理服务仅供学习使用,请勿用作其它用途。

部署指南

👉 部署文档

使用

安装

pip install openai-forward

运行

aifd run

如果一切正常将会看到下面的启动信息

❯ aifd run
╭────── 🤗 openai-forward is ready to serve!  ───────╮
│                                                    │
│  base url         https://api.openai.com           │
│  route prefix     /                                │
│  api keys         False                            │
│  forward keys     False                            │
│  Log chat         False                            │
╰────────────────────────────────────────────────────╯
╭──────────── ⏱️ Rate Limit configuration ───────────╮
│                                                    │
│  strategy                   moving-window          │
│  /healthz                   60/2minutes            │
│  /v1/chat/completions       15/minute;200/hour     │
│  global_rate_limit          30/minute              │
│  token_rate_limit           50/second              │
│  token_interval_time        0.0200s                │
╰────────────────────────────────────────────────────╯
INFO:     Started server process [33811]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

代理OpenAI API:

这也是aifd run的默认选项

在第三方应用中使用

点击展开

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

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-******"

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"
}'

代理本地模型

LocalAIapi-for-open-llm等 一起使用,赋予这些服务接口的RPM限制,TPM限制,日志等能力。

以LocalAI为例:
假设部署的LocalAI服务运行在 http://localhost:8080, 那么接下来只需修改.env配置中OPENAI_BASE_URL=http://localhost:8080 就可以完成对LocalAI的代理。

(待补充)

代理其它云端模型

例如可通过 claude-to-chatgpt 将claude的api格式对齐为openai的格式,然后使用openai-forward进行代理。 (待补充)

配置

命令行参数

可通过 aifd run --help 查看

Click for more details

aifd run参数配置项

配置项 说明 默认值
--port 服务端口号 8000
--workers 工作进程数 1
--log_chat 同 LOG_CHAT False

环境变量配置项

支持从运行目录下的.env文件中读取
配置示例见根目录下的 .env.example

环境变量 说明 默认值
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 额外转发服务路由前缀
ROUTE_RATE_LIMIT 指定路由的请求速率限制(区分用户)
GLOBAL_RATE_LIMIT 所有RATE_LIMIT没有指定的路由. 不填默认无限制
RATE_LIMIT_STRATEGY 速率限制策略(fixed-window, fixed-window-elastic-expiry, moving-window)
TOKEN_RATE_LIMIT 对每一份流式返回的token速率限制 (这里的token并不严格等于gpt中定义的token,而是SSE的chunk)
PROXY http代理
LOG_CHAT 是否记录聊天内容 false

更多见 .env.example 中的说明。(待完善)

自定义秘钥

Click for more details

需要配置 OPENAI_API_KEY 和 FORWARD_KEY, 如

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

用例:

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

多目标服务转发

支持转发不同地址的服务至同一端口的不同路由下 用例见 .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.

About

🚀 一键部署自己的AI代理 · OpenAI API Reverse Proxy · ChatGPT API Proxy

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 94.7%
  • Makefile 2.2%
  • Dockerfile 1.2%
  • Other 1.9%