UniAPI是一个兼容OpenAI协议的API转发器,允许用户管理多个API密钥。
模型择优机制:在请求时,会查询可选模型列表过去72小时的成功率及首token RT,选择成功率更高,rt更低的服务商。
断路器机制:服务商连续失败时,会进入冷却期,一段时间不再继续发起请求。详细说明见下方
流式视觉效果优化:把类似gemini这种大块的响应拆分小块,优化展示效果。兼容推理式模型
左:优化前 右:优化后
- 支持OpenAI API和兼容OpenAI协议的其他服务 (如Azure OpenAI, Claude API等)
- 自定义API密钥、Base URL和模型列表
- 支持模型映射,可以使用统一的模型名称映射到不同厂商的实际模型
- 请求时根据模型自动随机选择API密钥
- 支持流式和非流式输出
- 标准Bearer Token认证,与OpenAI API完全兼容
- 在Vercel上轻松部署
- 安全的管理员登录系统,保护您的API配置
配置环境变量:
ADMIN_API_KEY
: 管理员API密钥,用于访问管理面板(必须设置)TEMP_API_KEY_ONE
和TEMP_API_KEY
: 配置2个允许访问的API密钥REDIS_URL
: Redis连接URL(如果要持久化存储配置)ENVIRONMENT
: 设置为production
以禁用开发模式下的默认API密钥
部署完成后,你将获得一个Vercel提供的URL,使用ADMIN_API_KEY登录并录入API即可。
为了确保系统的稳定性和可靠性,本项目引入了断路器机制。当某个模型的请求连续失败达到指定次数时,系统将对该模型实施降级处理,在一定时间内不再发起新的请求,从而避免因频繁失败导致的服务不可用。
断路时间根据连续失败次数动态调整,具体规则如下:
- 3次连续失败:5分钟内不再发起请求。
- 4次连续失败:10分钟内不再发起请求。
- 5次连续失败:30分钟内不再发起请求。
- 6次连续失败:2小时内不再发起请求。
- 7次连续失败:6小时内不再发起请求。
- 8次连续失败:24小时内不再发起请求。
- 9次连续失败:48小时内不再发起请求。
- 系统会记录每个模型的请求历史,包括请求成功或失败的状态。
- 当检测到某个模型的连续失败次数达到上述规则中的阈值时,启动断路器。
- 在断路期间,系统将不会选择该服务商,而选择其他提供相同模型服务的服务商
- 断路时间结束后,系统会重新尝试请求该模型。如果请求成功,则恢复正常;否则继续触发断路器。
通过这种机制,系统能够在异常情况下快速做出反应,保护上游服务免受不稳定下游服务的影响。
为了保护您的API配置不被未授权访问,所有请求都需要包含有效的API密钥。API密钥需要使用OAuth Bearer Token格式在授权头中提供:
Authorization: Bearer your_api_key
您可以通过环境变量TEMP_API_KEY_ONE
和TEMP_API_KEY
配置最多2个额外的API密钥,这些密钥可以用于调用API但不能访问管理面板。
管理员API密钥可以通过环境变量ADMIN_API_KEY
设置,默认值为adminadmin
。
当前版本仅支持以下端点:
POST /v1/chat/completions
- 创建聊天完成
请求参数与OpenAI官方API一致,主要包括:
model
: 要使用的模型名称messages
: 消息数组,包含role和contenttemperature
: 温度参数,控制随机性max_tokens
: 生成的最大token数stream
: 是否使用流式输出
curl https://your-vercel-url.vercel.app/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "你好"}],
"stream": true
}'
UniAPI支持模型映射,允许您使用统一的模型名称映射到不同厂商的实际模型。例如,您可以将 gpt-4
映射到不同厂商的相应模型,然后在请求中使用 gpt-4
作为模型名称,系统会自动处理映射。
本项目采用 Apache License 2.0 许可证。详情见LICENSE文件。