中文| English | 日本语
Zeabur 的服务器在国外,自动解决了网络的问题,同时免费的额度也足够个人使用 Render 提供免费额度,绑卡后可以进一步提升额度 Render 可以直接部署docker 镜像,不需要fork 仓库:https://dashboard.*r*en*der.com 部署到Zeabur
部署到Render
配置
系统本身开箱即用。
你可以通过设置环境变量或者命令行参数进行配置。
等到系统启动后,使用root 用户登录系统并做进一步的配置。
Note :如果你不知道某个配置项的含义,可以临时删掉值以看到进一步的提示文字。
使用方法
在渠道页面中添加你的API Key,之后在令牌页面中新增访问令牌。
之后就可以使用你的令牌访问one api了,使用方式与OpenAI API 一致。
你需要在各种用到OpenAI API 的地方设置API Base 为你的one api的部署地址,例如:https://openai.ju*st*so*ng.cn,API Key 则为你在one api 中生成的令牌。
注意,具体的API Base 的格式取决于你所使用的客户端。
例如对于OpenAI 的官方库:
OPENAI_API_KEY= \" sk-xxxxxx \" OPENAI_API_BASE= \" https://<HOST>:<PORT>/v1 \"
graph LR
A(用户)
A --->|使用one api分发的key 进行请求| B( one api )
B -->|中继请求| C(OpenAI)
B -->|中继请求| D(Azure)
B -->|中继请求| E(其他OpenAI API 格式下游渠道)
B -->|中继并修改请求体和返回体| F(非OpenAI API 格式下游渠道)
Loading
可以通过在令牌后面添加渠道ID 的方式指定使用哪一个渠道处理本次请求,例如:Authorization: Bearer ONE_API_KEY-CHANNEL_ID。 注意,需要是管理员用户创建的令牌才能指定渠道ID。
不加的话将会使用负载均衡的方式使用多个渠道。
环境变量
one api支持从.env 文件中读取环境变量,请参照.env.example 文件,使用时请将其重命名为.env。
- REDIS_CONN_STRING:设置之后将使用Redis 作为缓存使用。
- 例子:REDIS_CONN_STRING=redis://default:redispw@localhost:49153
- 如果数据库访问延迟很低,没有必要启用Redis,启用后反而会出现数据滞后的问题。
- 如果需要使用哨兵或者集群模式:
- 则需要把该环境变量设置为节点列表,例如:localhost:49153,localhost:49154,localhost:49155。
- 除此之外还需要设置以下环境变量:
- REDIS_PASSWORD:Redis 集群或者哨兵模式下的密码设置。
- REDIS_MASTER_NAME:Redis 哨兵模式下主节点的名称。
- SESSION_SECRET:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的cookie 将依旧有效。
- 例子:SESSION_SECRET=random_string
- SQL_DSN:设置之后将使用指定数据库而非SQLite,请使用MySQL 或PostgreSQL。
- 例子:
- MySQL:SQL_DSN=root:123456@tcp(localhost:3306)/oneapi
- PostgreSQL:SQL_DSN=postgres://postgres:123456@localhost:5432/oneapi(适配中,欢迎反馈)
- 注意需要提前建立数据库oneapi,无需手动建表,程序将自动建表。
- 如果使用本地数据库:部署命令可添加–network=\”host\” 以使得容器内的程序可以访问到宿主机上的MySQL。
- 如果使用云数据库:如果云服务器需要验证身份,需要在连接参数中添加?tls=skip-verify。
- 请根据你的数据库配置修改下列参数(或者保持默认值):
- SQL_MAX_IDLE_CONNS:最大空闲连接数,默认为100。
- SQL_MAX_OPEN_CONNS:最大打开连接数,默认为1000。
- 如果报错Error 1040: Too many connections,请适当减小该值。
- SQL_CONN_MAX_LIFETIME:连接的最大生命周期,默认为60,单位分钟。
- 例子:
- LOG_SQL_DSN:设置之后将为logs 表使用独立的数据库,请使用MySQL 或PostgreSQL。
- FRONTEND_BASE_URL:设置之后将重定向页面请求到指定的地址,仅限从服务器设置。
- 例子:FRONTEND_BASE_URL=https://openai.j*ust*so*ng.cn
- MEMORY_CACHE_ENABLED:启用内存缓存,会导致用户额度的更新存在一定的延迟,可选值为true 和false,未设置则默认为false。
- 例子:MEMORY_CACHE_ENABLED=true
- SYNC_FREQUENCY:在启用缓存的情况下与数据库同步配置的频率,单位为秒,默认为600 秒。
- 例子:SYNC_FREQUENCY=60
- NODE_TYPE:设置之后将指定节点类型,可选值为master 和slave,未设置则默认为master。
- 例子:NODE_TYPE=slave
- CHANNEL_UPDATE_FREQUENCY:设置之后将定期更新渠道余额,单位为分钟,未设置则不进行更新。
- 例子:CHANNEL_UPDATE_FREQUENCY=1440
- CHANNEL_TEST_FREQUENCY:设置之后将定期检查渠道,单位为分钟,未设置则不进行检查。 +例子:CHANNEL_TEST_FREQUENCY=1440
- POLLING_INTERVAL:批量更新渠道余额以及测试可用性时的请求间隔,单位为秒,默认无间隔。
- 例子:POLLING_INTERVAL=5
- BATCH_UPDATE_ENABLED:启用数据库批量更新聚合,会导致用户额度的更新存在一定的延迟可选值为true 和false,未设置则默认为false。
- 例子:BATCH_UPDATE_ENABLED=true
- 如果你遇到了数据库连接数过多的问题,可以尝试启用该选项。
- BATCH_UPDATE_INTERVAL=5:批量更新聚合的时间间隔,单位为秒,默认为5。
- 例子:BATCH_UPDATE_INTERVAL=5
- 请求频率限制:
- GLOBAL_API_RATE_LIMIT:全局API 速率限制(除中继请求外),单ip 三分钟内的最大请求数,默认为180。
- GLOBAL_WEB_RATE_LIMIT:全局Web 速率限制,单ip 三分钟内的最大请求数,默认为60。
- 编码器缓存设置:
- TIKTOKEN_CACHE_DIR:默认程序启动时会联网下载一些通用的词元的编码,如:gpt-3.5-turbo,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。
- DATA_GYM_CACHE_DIR:目前该配置作用与TIKTOKEN_CACHE_DIR 一致,但是优先级没有它高。
- RELAY_TIMEOUT:中继超时设置,单位为秒,默认不设置超时时间。
- RELAY_PROXY:设置后使用该代理来请求API。
- USER_CONTENT_REQUEST_TIMEOUT:用户上传内容下载超时时间,单位为秒。
- USER_CONTENT_REQUEST_PROXY:设置后使用该代理来请求用户上传的内容,例如图片。
- SQLITE_BUSY_TIMEOUT:SQLite 锁等待超时设置,单位为毫秒,默认3000。
- GEMINI_SAFETY_SETTING:Gemini 的安全设置,默认BLOCK_NONE。
- GEMINI_VERSION: one api所使用的Gemini 版本,默认为v1。
- THEME:系统的主题设置,默认为default,具体可选值参考此处。
- ENABLE_METRIC:是否根据请求成功率禁用渠道,默认不开启,可选值为true 和false。
- METRIC_QUEUE_SIZE:请求成功率统计队列大小,默认为10。
- METRIC_SUCCESS_RATE_THRESHOLD:请求成功率阈值,默认为0.8。
- INITIAL_ROOT_TOKEN:如果设置了该值,则在系统首次启动时会自动创建一个值为该环境变量值的root 用户令牌。
- INITIAL_ROOT_ACCESS_TOKEN:如果设置了该值,则在系统首次启动时会自动创建一个值为该环境变量的root 用户创建系统管理令牌。
- ENFORCE_INCLUDE_USAGE:是否强制在stream 模型下返回usage,默认不开启,可选值为true 和false。
- TEST_PROMPT:测试模型时的用户prompt,默认为Print your model name exactly and do not output without any other text.。
命令行参数
- –port <port_number>: 指定服务器监听的端口号,默认为3000。
- 例子:–port 3000
- –log-dir <log_dir>: 指定日志文件夹,如果没有设置,默认保存至工作目录的logs 文件夹下。
- 例子:–log-dir ./logs
- –version: 打印系统版本号并退出。
- –help: 查看命令的使用帮助和参数说明。
演示
在线演示
注意,该演示站不提供对外服务: https://openai.j*ust*so*ng.cn
截图展示
常见问题
- 额度是什么?怎么计算的? one api的额度计算有问题?
- 额度= 分组倍率* 模型倍率* (提示token 数+ 补全token 数* 补全倍率)
- 其中补全倍率对于GPT3.5 固定为1.33,GPT4 为2,与官方保持一致。
- 如果是非流模式,官方接口会返回消耗的总token,但是你要注意提示和补全的消耗倍率不一样。
- 注意, one api的默认倍率就是官方倍率,是已经调整过的。
- 账户额度足够为什么提示额度不足?
- 请检查你的令牌额度是否足够,这个和账户额度是分开的。
- 令牌额度仅供用户设置最大使用量,用户可自由设置。
- 提示无可用渠道?
- 请检查的用户分组和渠道分组设置。
- 以及渠道的模型设置。
- 渠道测试报错:invalid character \'<\’ looking for beginning of value
- 这是因为返回值不是合法的JSON,而是一个HTML 页面。
- 大概率是你的部署站的IP 或代理的节点被CloudFlare 封禁了。
- ChatGPT Next Web 报错:Failed to fetch
- 部署的时候不要设置BASE_URL。
- 检查你的接口地址和API Key 有没有填对。
- 检查是否启用了HTTPS,浏览器会拦截HTTPS 域名下的HTTP 请求。
- 报错:当前分组负载已饱和,请稍后再试
- 上游渠道429 了。
- 升级之后我的数据会丢失吗?
- 如果使用MySQL,不会。
- 如果使用SQLite,需要按照我所给的部署命令挂载volume 持久化one-api.db 数据库文件,否则容器重启后数据会丢失。
- 升级之前数据库需要做变更吗?
- 一般情况下不需要,系统将在初始化的时候自动调整。
- 如果需要的话,我会在更新日志中说明,并给出脚本。
- 手动修改数据库后报错:数据库一致性已被破坏,请联系管理员?
- 这是检测到ability 表里有些记录的渠道id 是不存在的,这大概率是因为你删了channel 表里的记录但是没有同步在ability 表里清理无效的渠道。
- 对于每一个渠道,其所支持的模型都需要有一个专门的ability 表的记录,表示该渠道支持该模型。
相关项目
- FastGPT: 基于LLM 大语言模型的知识库问答系统
- ChatGPT Next Web: 一键拥有你自己的跨平台ChatGPT 应用
- VChart: 不只是开箱即用的多端图表库,更是生动灵活的数据故事讲述者。
- VMind: 不仅自动,还很智能。开源智能可视化解决方案。
- CherryStudio: 全平台支持的AI客户端, 多服务商集成管理、本地知识库支持。
注意
本项目使用MIT 协议进行开源,在此基础上,必须在页面底部保留署名以及指向本项目的链接。如果不想保留署名,必须首先获得授权。
同样适用于基于本项目的二开项目。
依据MIT 协议,使用者需自行承担使用本项目的风险与责任,本开源项目开发者与此无关。


