功能

  1. 支持多种大模型:
  2. 支持配置镜像以及众多第三方代理服务
  3. 支持通过负载均衡的方式访问多个渠道。
  4. 支持 stream 模式,可以通过流式传输实现打字机效果。
  5. 支持多机部署详见此处
  6. 支持令牌管理,设置令牌的过期时间、额度、允许的 IP 范围以及允许的模型访问。
  7. 支持兑换码管理,支持批量生成和导出兑换码,可使用兑换码为账户进行充值。
  8. 支持渠道管理,批量创建渠道。
  9. 支持用户分组以及渠道分组,支持为不同分组设置不同的倍率。
  10. 支持渠道设置模型列表
  11. 支持查看额度明细
  12. 支持用户邀请奖励
  13. 支持以美元为单位显示额度。
  14. 支持发布公告,设置充值链接,设置新用户初始额度。
  15. 支持模型映射,重定向用户的请求模型,如无必要请不要设置,设置之后会导致请求体被重新构造而非直接透传,会导致部分还未正式支持的字段无法传递成功。
  16. 支持失败自动重试。
  17. 支持绘图接口。
  18. 支持 Cloudflare AI Gateway,渠道设置的代理部分填写 https://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY/openai 即可。
  19. 支持丰富的自定义设置,
    1. 支持自定义系统名称,logo 以及页脚。
    2. 支持自定义首页和关于页面,可以选择使用 HTML & Markdown 代码进行自定义,或者使用一个单独的网页通过 iframe 嵌入。
  20. 支持通过系统访问令牌调用管理 API,进而在无需二开的情况下扩展和自定义 One API 的功能,详情请参考此处 API 文档。。
  21. 支持 Cloudflare Turnstile 用户校验。
  22. 支持用户管理,支持多种用户登录注册方式
    • 邮箱登录注册(支持注册邮箱白名单)以及通过邮箱进行密码重置。
    • 支持使用飞书进行授权登录。
    • GitHub 开放授权
    • 微信公众号授权(需要额外部署 WeChat Server)。
  23. 支持主题切换,设置环境变量 THEME 即可,默认为 default,欢迎 PR 更多主题,具体参考此处
  24. 配合 Message Pusher 可将报警信息推送到多种 App 上。

基于 Docker Compose 进行部署

# 目前支持 MySQL 启动,数据存储在 ./data/mysql 文件夹内
docker-compose up -d

# 查看部署状态
docker-compose ps

手动部署

  1. 下载可执行文件或者从源码编译:git clone https://github.com/songquanpeng/one-api.git # 构建前端 cd one-api/web/default npm install npm run build # 构建后端 cd ../.. go mod download go build -ldflags "-s -w" -o one-api
  2. 运行:chmod u+x one-api ./one-api --port 3000 --log-dir ./logs
  3. 访问 http://localhost:3000/ 并登录。初始账号用户名为 root,密码为 123456

更加详细的部署教程参见此处

系统本身开箱即用。

你可以通过设置环境变量或者命令行参数进行配置。

等到系统启动后,使用 root 用户登录系统并做进一步的配置。

Note:如果你不知道某个配置项的含义,可以临时删掉值以看到进一步的提示文字。

使用方法

渠道页面中添加你的 API Key,之后在令牌页面中新增访问令牌。

之后就可以使用你的令牌访问 One API 了,使用方式与 OpenAI API 一致。

你需要在各种用到 OpenAI API 的地方设置 API Base 为你的 One API 的部署地址,例如:https://openai.justsong.cn,API Key 则为你在 One API 中生成的令牌。

注意,具体的 API Base 的格式取决于你所使用的客户端。

例如对于 OpenAI 的官方库:

OPENAI_API_KEY="sk-xxxxxx"
OPENAI_API_BASE="https://<HOST>:<PORT>/v1"

https://viewscreen.githubusercontent.com/markdown/mermaid?docs_host=https%3A%2F%2Fdocs.github.com&color_mode=light#7ef6802d-2845-4b83-b312-58ead38ab544

可以通过在令牌后面添加渠道 ID 的方式指定使用哪一个渠道处理本次请求,例如:Authorization: Bearer ONE_API_KEY-CHANNEL_ID。 注意,需要是管理员用户创建的令牌才能指定渠道 ID。

不加的话将会使用负载均衡的方式使用多个渠道。

环境变量

One API 支持从 .env 文件中读取环境变量,请参照 .env.example 文件,使用时请将其重命名为 .env

  1. REDIS_CONN_STRING:设置之后将使用 Redis 作为缓存使用。
    • 例子:REDIS_CONN_STRING=redis://default:redispw@localhost:49153
    • 如果数据库访问延迟很低,没有必要启用 Redis,启用后反而会出现数据滞后的问题。
  2. SESSION_SECRET:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的 cookie 将依旧有效。
    • 例子:SESSION_SECRET=random_string
  3. 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,单位分钟。
  4. LOG_SQL_DSN:设置之后将为 logs 表使用独立的数据库,请使用 MySQL 或 PostgreSQL。
  5. FRONTEND_BASE_URL:设置之后将重定向页面请求到指定的地址,仅限从服务器设置。
    • 例子:FRONTEND_BASE_URL=https://openai.justsong.cn
  6. MEMORY_CACHE_ENABLED:启用内存缓存,会导致用户额度的更新存在一定的延迟,可选值为 true 和 false,未设置则默认为 false
    • 例子:MEMORY_CACHE_ENABLED=true
  7. SYNC_FREQUENCY:在启用缓存的情况下与数据库同步配置的频率,单位为秒,默认为 600 秒。
    • 例子:SYNC_FREQUENCY=60
  8. NODE_TYPE:设置之后将指定节点类型,可选值为 master 和 slave,未设置则默认为 master
    • 例子:NODE_TYPE=slave
  9. CHANNEL_UPDATE_FREQUENCY:设置之后将定期更新渠道余额,单位为分钟,未设置则不进行更新。
    • 例子:CHANNEL_UPDATE_FREQUENCY=1440
  10. CHANNEL_TEST_FREQUENCY:设置之后将定期检查渠道,单位为分钟,未设置则不进行检查。 +例子:CHANNEL_TEST_FREQUENCY=1440
  11. POLLING_INTERVAL:批量更新渠道余额以及测试可用性时的请求间隔,单位为秒,默认无间隔。
    • 例子:POLLING_INTERVAL=5
  12. BATCH_UPDATE_ENABLED:启用数据库批量更新聚合,会导致用户额度的更新存在一定的延迟可选值为 true 和 false,未设置则默认为 false
    • 例子:BATCH_UPDATE_ENABLED=true
    • 如果你遇到了数据库连接数过多的问题,可以尝试启用该选项。
  13. BATCH_UPDATE_INTERVAL=5:批量更新聚合的时间间隔,单位为秒,默认为 5
    • 例子:BATCH_UPDATE_INTERVAL=5
  14. 请求频率限制:
    • GLOBAL_API_RATE_LIMIT:全局 API 速率限制(除中继请求外),单 ip 三分钟内的最大请求数,默认为 180
    • GLOBAL_WEB_RATE_LIMIT:全局 Web 速率限制,单 ip 三分钟内的最大请求数,默认为 60
  15. 编码器缓存设置:
    • TIKTOKEN_CACHE_DIR:默认程序启动时会联网下载一些通用的词元的编码,如:gpt-3.5-turbo,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。
    • DATA_GYM_CACHE_DIR:目前该配置作用与 TIKTOKEN_CACHE_DIR 一致,但是优先级没有它高。
  16. RELAY_TIMEOUT:中继超时设置,单位为秒,默认不设置超时时间。
  17. RELAY_PROXY:设置后使用该代理来请求 API。
  18. USER_CONTENT_REQUEST_TIMEOUT:用户上传内容下载超时时间,单位为秒。
  19. USER_CONTENT_REQUEST_PROXY:设置后使用该代理来请求用户上传的内容,例如图片。
  20. SQLITE_BUSY_TIMEOUT:SQLite 锁等待超时设置,单位为毫秒,默认 3000
  21. GEMINI_SAFETY_SETTING:Gemini 的安全设置,默认 BLOCK_NONE
  22. GEMINI_VERSION:One API 所使用的 Gemini 版本,默认为 v1
  23. THEME:系统的主题设置,默认为 default,具体可选值参考此处
  24. ENABLE_METRIC:是否根据请求成功率禁用渠道,默认不开启,可选值为 true 和 false
  25. METRIC_QUEUE_SIZE:请求成功率统计队列大小,默认为 10
  26. METRIC_SUCCESS_RATE_THRESHOLD:请求成功率阈值,默认为 0.8
  27. INITIAL_ROOT_TOKEN:如果设置了该值,则在系统首次启动时会自动创建一个值为该环境变量值的 root 用户令牌。
  28. INITIAL_ROOT_ACCESS_TOKEN:如果设置了该值,则在系统首次启动时会自动创建一个值为该环境变量的 root 用户创建系统管理令牌。
  29. ENFORCE_INCLUDE_USAGE:是否强制在 stream 模型下返回 usage,默认不开启,可选值为 true 和 false

命令行参数

  1. --port <port_number>: 指定服务器监听的端口号,默认为 3000
    • 例子:--port 3000
  2. --log-dir <log_dir>: 指定日志文件夹,如果没有设置,默认保存至工作目录的 logs 文件夹下。
    • 例子:--log-dir ./logs
  3. --version: 打印系统版本号并退出。
  4. --help: 查看命令的使用帮助和参数说明。

截图展示

channel
token

常见问题

  1. 额度是什么?怎么计算的?One API 的额度计算有问题?
    • 额度 = 分组倍率 * 模型倍率 * (提示 token 数 + 补全 token 数 * 补全倍率)
    • 其中补全倍率对于 GPT3.5 固定为 1.33,GPT4 为 2,与官方保持一致。
    • 如果是非流模式,官方接口会返回消耗的总 token,但是你要注意提示和补全的消耗倍率不一样。
    • 注意,One API 的默认倍率就是官方倍率,是已经调整过的。
  2. 账户额度足够为什么提示额度不足?
    • 请检查你的令牌额度是否足够,这个和账户额度是分开的。
    • 令牌额度仅供用户设置最大使用量,用户可自由设置。
  3. 提示无可用渠道?
    • 请检查的用户分组和渠道分组设置。
    • 以及渠道的模型设置。
  4. 渠道测试报错:invalid character '<' looking for beginning of value
    • 这是因为返回值不是合法的 JSON,而是一个 HTML 页面。
    • 大概率是你的部署站的 IP 或代理的节点被 CloudFlare 封禁了。
  5. ChatGPT Next Web 报错:Failed to fetch
    • 部署的时候不要设置 BASE_URL
    • 检查你的接口地址和 API Key 有没有填对。
    • 检查是否启用了 HTTPS,浏览器会拦截 HTTPS 域名下的 HTTP 请求。
  6. 报错:当前分组负载已饱和,请稍后再试
    • 上游渠道 429 了。
  7. 升级之后我的数据会丢失吗?
    • 如果使用 MySQL,不会。
    • 如果使用 SQLite,需要按照我所给的部署命令挂载 volume 持久化 one-api.db 数据库文件,否则容器重启后数据会丢失。
  8. 升级之前数据库需要做变更吗?
    • 一般情况下不需要,系统将在初始化的时候自动调整。
    • 如果需要的话,我会在更新日志中说明,并给出脚本。
  9. 手动修改数据库后报错:数据库一致性已被破坏,请联系管理员
    • 这是检测到 ability 表里有些记录的渠道 id 是不存在的,这大概率是因为你删了 channel 表里的记录但是没有同步在 ability 表里清理无效的渠道。
    • 对于每一个渠道,其所支持的模型都需要有一个专门的 ability 表的记录,表示该渠道支持该模型。
声明:本站资源均为作者提供或网友推荐收集各大资源网站整理而来,如无特殊说明或标注,均为本站原创发布,仅供功能验证和学习研究使用,源码、软件必须在下载后24小时内删除,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。不得用于非法商业用途,不得违反国家法律,否则后果自负!一切关于该资源商业行为与本站无关。请使用正版源码和软件,得到更好的正版服务。如有侵犯你的版权合法权益,请邮件或QQ:2098035220与我们联系处理删除(邮箱:2098035220@qq.com),本站将立即更正。