🚀 OpenAI-Forward 是一个专为大型语言模型设计的高级转发代理,提供包括用户请求速率控制、Token速率限制和自定义API密钥等增强功能。该服务可用于代理本地模型和云端模型。OpenAI API Reverse Proxy
Project description
中文 | English
OpenAI Forward
openai-forward
是一个专为大型语言模型设计的高级转发服务,提供包括用户请求速率控制、Token速率限制、日志记录和自定义API密钥等功能。
该服务可用于代理本地模型(如 LocalAI)或云端模型(如 OpenAI)。
服务由 fastapi,aiohttp,asyncio完全异步实现。
主要特性
OpenAI-Forward 提供如下功能:
- 全能代理: 具备转发几乎所有类型请求的能力
- 用户流量控制: 实现用户请求速率限制(RPM)和流式Token速率限制(TPM)
- 实时响应日志: 支持流式响应的会话日志记录,用于调试自己的prompt合理性
- 自定义秘钥: 允许用户用自定义生成的密钥替代原始API密钥
- 多目标路由: 能够同时转发多个服务到不同的路由地址
- 自动重试机制:在请求失败时自动重试
- 快速部署:
pip/docker快速本地安装和部署,支持一键云端部署
由本项目搭建的代理服务地址:
注:此代理服务仅供个人学习和研究目的使用,勿用于任何商业用途。https://api.openai-forward.com
https://render.openai-forward.com
部署指南
👉 部署文档
使用指南
快速入门
安装
pip install openai-forward
启动服务
aifd run
如果读入了根路径的.env的配置, 将会看到以下启动信息
❯ aifd run
╭────── 🤗 openai-forward is ready to serve! ───────╮
│ │
│ base url https://api.openai.com │
│ route prefix / │
│ api keys False │
│ forward keys False │
╰────────────────────────────────────────────────────╯
╭──────────── ⏱️ Rate Limit configuration ───────────╮
│ │
│ strategy moving-window │
│ /healthz 100/2minutes (req) │
│ /v1/chat/completions 60/minute;600/hour (req) │
│ /v1/chat/completions 40/second (token) │
╰────────────────────────────────────────────────────╯
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模型:
aifd run的默认选项便是代理https://api.openai.com
下面以搭建好的服务地址https://api/openai-forward.com 为例
点击展开
在三方应用中使用
基于开源项目ChatGPT-Next-Web中接入:
替换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"
}'
代理本地模型
-
适用场景: 与 LocalAI, api-for-open-llm等项目一起使用
-
如何操作: 以LocalAI为例,如果已在 http://localhost:8080 部署了LocalAI服务,仅需在环境变量或 .env 文件中设置
OPENAI_BASE_URL=http://localhost:8080。 然后即可通过访问 http://localhost:8000 使用LocalAI。
(更多)
代理其它云端模型
- 适用场景: 例如,通过 claude-to-chatgpt 可以将 claude 的 API 格式转换为 openai 的api格式, 然后使用本服务进行代理。
(更多)
配置
命令行参数
执行 aifd run --help 获取参数详情
Click for more details
| 配置项 | 说明 | 默认值 |
|---|---|---|
| --port | 服务端口号 | 8000 |
| --workers | 工作进程数 | 1 |
环境变量详情
你可以在项目的运行目录下创建 .env 文件来定制各项配置。参考配置可见根目录下的 .env.example文件
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| OPENAI_BASE_URL | 设置OpenAI API风格的基础地址 | https://api.openai.com |
| OPENAI_ROUTE_PREFIX | 为OPENAI_BASE_URL接口地址定义路由前缀 | / |
| OPENAI_API_KEY | 配置OpenAI 接口风格的API密钥,支持使用多个密钥,通过逗号分隔 | 无 |
| FORWARD_KEY | 设定用于代理的自定义密钥,多个密钥可用逗号分隔。如果未设置(不建议),将直接使用 OPENAI_API_KEY |
无 |
| EXTRA_BASE_URL | 用于配置额外代理服务的基础URL | 无 |
| EXTRA_ROUTE_PREFIX | 定义额外代理服务的路由前缀 | 无 |
| REQ_RATE_LIMIT | 设置特定路由的用户请求速率限制 (区分用户) | 无 |
| GLOBAL_RATE_LIMIT | 配置全局请求速率限制,适用于未在 REQ_RATE_LIMIT 中指定的路由 |
无 |
| RATE_LIMIT_STRATEGY | 选择速率限制策略,选项包括:fixed-window、fixed-window-elastic-expiry、moving-window | 无 |
| TOKEN_RATE_LIMIT | 限制流式响应中每个token(或SSE chunk)的输出速率 | 无 |
| PROXY | 设置HTTP代理地址 | 无 |
| LOG_CHAT | 开关聊天内容的日志记录,用于调试和监控 | false |
详细配置说明可参见 .env.example 文件。(待完善)
注意:如果你设置了 OPENAI_API_KEY 但未设置 FORWARD_KEY,客户端在调用时将不需要提供密钥。由于这可能存在安全风险,除非有明确需求,否则不推荐将 FORWARD_KEY 置空。
自定义秘钥
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openai_forward-0.6.1.tar.gz.
File metadata
- Download URL: openai_forward-0.6.1.tar.gz
- Upload date:
- Size: 24.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5518ebb183a6920bdf8f05d718e7cbd2ddee808f41fe2ebaadba655a46967aa6
|
|
| MD5 |
1252fcb763018c58c02897e8d7f361cd
|
|
| BLAKE2b-256 |
8dd36b9ebeb4d9f537ce465246dff6caa0ee6881f78243e9ce040098138eb649
|
File details
Details for the file openai_forward-0.6.1-py3-none-any.whl.
File metadata
- Download URL: openai_forward-0.6.1-py3-none-any.whl
- Upload date:
- Size: 29.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb93f7417f2d5ad2628695e70f61b44fa4379bb581a117f6c914a40f5a72e63e
|
|
| MD5 |
5ca99ca0057bf22c03e7e8a4431a082a
|
|
| BLAKE2b-256 |
8d13ff5832b3988788652aa2446263ca6dd3c47983cc3e50cfe44634559754e3
|