Package: openai-forward
简体中文|English🌠 OpenAI Forward特点|部署指南|使用指南|配置|对话日志[!IMPORTANT]在v0.7.0以后在配置方面会有较大调整，并与之前版本不兼容。通过UI配置起来会更加方便，且提供了更强大的配置选项。OpenAI-Forward是为大型语言模型实现的高效转发服务。其核心功能包括
用户请求速率控制、Token速率限制、智能预测缓存、日志管理和API密钥管理等，旨在提供高效、便捷的模型转发服务。
无论是代理本地语言模型还是云端语言模型，如LocalAI或OpenAI，都可以由 OpenAI Forward 轻松实现。
得益于uvicorn,aiohttp,
和asyncio等库支持，OpenAI-Forward 实现了出色的异步性能。News🎉🎉🎉 v0.7.0版本后支持通过WebUI进行配置管理gpt-1106版本已适配缓存后端切换为高性能数据库后端：🗲 FlaxKV主要特性全能转发：可转发几乎所有类型的请求性能优先：出色的异步性能缓存AI预测：对AI预测进行缓存，加速服务访问并节省费用用户流量控制：自定义请求速率与Token速率实时响应日志：提升LLMs可观察性自定义秘钥：替代原始API密钥多目标路由：转发多个服务地址至同一服务下的不同路由黑白名单：可对指定IP进行黑白名单限制自动重试：确保服务的稳定性，请求失败时将自动重试快速部署：支持通过pip和docker在本地或云端进行快速部署由本项目搭建的代理服务地址:原始OpenAI 服务地址https://api.openai-forward.comhttps://render.openai-forward.com开启缓存的服务地址（用户请求结果将被保存一段时间）https://smart.openai-forward.com注：此处部署的代理服务仅供个人学习和研究目的使用，勿用于任何商业用途。部署指南👉部署文档使用指南快速入门安装pipinstallopenai-forward# 或安装webui版本：pipinstallopenai-forward[webui]启动服务aifdrun# 或启动带webui的服务aifdrun--webui如果读入了根路径的.env的配置, 将会看到以下启动信息❯aifdrun
╭──────🤗openai-forwardisreadytoserve!───────╮
││
│baseurlhttps://api.openai.com│
│routeprefix/│
│apikeysFalse│
│forwardkeysFalse│
│cache_backendMEMORY│
╰────────────────────────────────────────────────────╯
╭────────────⏱️RateLimitconfiguration───────────╮
││
│backendmemory│
│strategymoving-window│
│globalratelimit100/minute(req)│
│/v1/chat/completions100/2minutes(req)│
│/v1/completions60/minute;600/hour(req)│
│/v1/chat/completions60/second(token)│
│/v1/completions60/second(token)│
╰────────────────────────────────────────────────────╯
INFO:Startedserverprocess[191471]INFO:Waitingforapplicationstartup.
INFO:Applicationstartupcomplete.
INFO:Uvicornrunningonhttp://0.0.0.0:8000(PressCTRL+Ctoquit)代理OpenAI模型:aifd run的默认选项便是代理https://api.openai.com下面以搭建好的服务地址https://api.openai-forward.com为例Pythonfrom openai import OpenAI  # pip install openai>=1.0.0client = OpenAI(+     base_url="https://api.openai-forward.com/v1",api_key="sk-******")更多在三方应用中使用基于开源项目ChatGPT-Next-Web中接入:替换docker启动命令中的BASE_URL为自己搭建的代理服务地址dockerrun-d\-p3000:3000\-eOPENAI_API_KEY="sk-******"\-eBASE_URL="https://api.openai-forward.com"\-eCODE="******"\yidadaa/chatgpt-next-webImage 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。(更多)代理其它云端模型场景1:使用通用转发,可对任意来源服务进行转发，
可获得请求速率控制与token速率控制；但通用转发不支持自定义秘钥.场景2：可通过LiteLLM可以将 众多云模型的 API 格式转换为 openai
的api格式，然后使用openai风格转发(更多)配置执行aifd run --webui进入配置页面 (默认服务地址http://localhost:8001)你可以在项目的运行目录下创建 .env 文件来定制各项配置。参考配置可见根目录下的.env.example文件智能缓存开启缓存后，将会对指定路由的内容进行缓存，其中转发类型分别为openai与general两者行为略有不同，
使用general转发时，默认会将相同的请求一律使用缓存返回，使用openai转发时，在开启缓存后，可以通过OpenAI 的extra_body参数来控制缓存的行为，如Pythonfrom openai import OpenAIclient = 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})Curlcurlhttps://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}'自定义秘钥Click for more details见.env文件用例:import openai+ openai.api_base = "https://api.openai-forward.com/v1"- openai.api_key = "sk-******"+ openai.api_key = "fk-******"多目标服务转发支持转发不同地址的服务至同一端口的不同路由下
用例见.env.example对话日志Click for more details保存路径在当前目录下的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格式：aifdconvert得到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许可证。