簡體中文| English
特點| 部署指南| 使用指南| 配置| 對話日誌
Important
在v0.7.0以後在配置方面會有較大調整,並與之前版本不兼容。通過UI配置起來會更加方便,且提供了更強大的配置選項。
OpenAI-Forward是為大型語言模型實現的高效轉發服務。其核心功能包括用戶請求速率控制、Token速率限制、智能預測緩存、日誌管理和API密鑰管理等,旨在提供高效、便捷的模型轉發服務。 無論是代理本地語言模型還是雲端語言模型,如LocalAI 或OpenAI,都可以由OpenAI Forward 輕鬆實現。 得益於uvicorn, aiohttp, 和asyncio 等庫支持,OpenAI-Forward 實現了出色的異步性能。
由本項目搭建的代理服務地址:
原始OpenAI 服務地址
https://api.openai-forward.com
https://render.openai-forward.com
開啟緩存的服務地址(用戶請求結果將被保存一段時間)
https://smart.openai-forward.com
部署文檔
安裝
pip install openai-forward
# 或安装webui版本:
pip install openai-forward[webui]
啟動服務
aifd run
# 或启动带webui的服务
aifd run --webui
如果讀入了根路徑的.env
的配置, 將會看到以下啟動信息
❯ aifd run
╭────── ? openai-forward is ready to serve ! ───────╮
│ │
│ base url https://api.openai.com │
│ route prefix / │
│ api keys False │
│ forward keys False │
│ cache_backend MEMORY │
╰────────────────────────────────────────────────────╯
╭──────────── ⏱️ Rate Limit configuration ───────────╮
│ │
│ backend memory │
│ strategy moving-window │
│ global rate limit 100/minute (req) │
│ /v1/chat/completions 100/2minutes (req) │
│ /v1/completions 60/minute ; 600/hour (req) │
│ /v1/chat/completions 60/second (token) │
│ /v1/completions 60/second (token) │
╰────────────────────────────────────────────────────╯
INFO: Started server process [191471]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
aifd run
的默認選項便是代理https://api.openai.com
下面以搭建好的服務地址https://api.openai-forward.com
為例
Python
from openai import OpenAI # pip install openai>=1.0.0
client = OpenAI(
+ base_url="https://api.openai-forward.com/v1",
api_key="sk-******"
)
適用場景:與LocalAI, api-for-open-llm等項目一起使用
如何操作:以LocalAI為例,如果已在FORWARD_CONFIG=[{"base_url":"http://localhost:8080","route":"/localai","type":"openai"}]
。 然後即可通過訪問http://localhost:8000/localai 使用LocalAI。
(更多)
配置環境變量或.env 文件如下:
FORWARD_CONFIG = [{"base_url":"https://generativelanguage.googleapis.com","route":"/gemini","type":"general"}]
說明: aidf run
啟動後,即可通過訪問http://localhost:8000/gemini 使用gemini pro。
場景1:使用通用轉發,可對任意來源服務進行轉發, 可獲得請求速率控制與token速率控制;但通用轉發不支持自定義秘鑰.
場景2:可通過LiteLLM 可以將眾多雲模型的API 格式轉換為openai 的api格式,然後使用openai風格轉發
(更多)
執行aifd run --webui
進入配置頁面(默認服務地址http://localhost:8001)
你可以在項目的運行目錄下創建.env 文件來定制各項配置。參考配置可見根目錄下的.env.example文件
開啟緩存後,將會對指定路由的內容進行緩存,其中轉發類型分別為openai
與general
兩者行為略有不同, 使用general
轉發時,默認會將相同的請求一律使用緩存返回,
使用openai
轉發時,在開啟緩存後,可以通過OpenAI 的extra_body
參數來控制緩存的行為,如
Python
from openai import OpenAI
client = OpenAI(
+ base_url="https://smart.openai-forward.com/v1",
api_key="sk-******"
)
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Hello!"}
],
+ extra_body={"caching": True}
)
Curl
curl https://smart.openai.com/v1/chat/completions
-H " Content-Type: application/json "
-H " Authorization: Bearer sk-****** "
-d ' {
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}],
"caching": true
} '
見.env文件
用例:
import openai
+ openai.api_base = "https://api.openai-forward.com/v1"
- openai.api_key = "sk-******"
+ openai.api_key = "fk-******"
支持轉發不同地址的服務至同一端口的不同路由下用例見.env.example
保存路徑在當前目錄下的Log/openai/chat/chat.log
路徑中。
記錄格式為
{'messages': [{'role': 'user', 'content': 'hi'}], 'model': 'gpt-3.5-turbo', 'stream': True, 'max_tokens': None, 'n': 1, 'temperature': 1, 'top_p': 1, 'logit_bias': None, 'frequency_penalty': 0, 'presence_penalty': 0, 'stop': None, 'user': None, 'ip': '127.0.0.1', 'uid': '2155fe1580e6aed626aa1ad74c1ce54e', 'datetime': '2023-10-17 15:27:12'}
{'assistant': 'Hello! How can I assist you today?', 'is_tool_calls': False, 'uid': '2155fe1580e6aed626aa1ad74c1ce54e'}
轉換為json
格式:
aifd convert
得到chat_openai.json
:
[
{
"datetime" : " 2023-10-17 15:27:12 " ,
"ip" : " 127.0.0.1 " ,
"model" : " gpt-3.5-turbo " ,
"temperature" : 1 ,
"messages" : [
{
"user" : " hi "
}
],
"tools" : null ,
"is_tool_calls" : false ,
"assistant" : " Hello! How can I assist you today? "
}
]
歡迎通過提交拉取請求或在倉庫中提出問題來為此項目做出貢獻。
OpenAI-Forward 採用MIT 許可證。