OneApi官方简介

LLM API 管理 & 分发系统,支持 OpenAI、Azure、Anthropic Claude、Google Gemini、DeepSeek、字节豆包、ChatGLM、文心一言、讯飞星火、通义千问、360 智脑、腾讯混元等主流模型,统一 API 适配,可用于 key 管理与二次分发。单可执行文件,提供 Docker 镜像,一键部署,开箱即用。


OneApi部署


docker部署

# 使用 SQLite 的部署命令:
docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api
# 使用 MySQL 的部署命令,在上面的基础上添加 `-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"`,请自行修改数据库连接参数,不清楚如何修改请参见下面环境变量一节。
# 例如:
docker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api

其中,-p 3000:3000 中的第一个 3000 是宿主机的端口,可以根据需要进行修改。

数据和日志将会保存在宿主机的 /home/ubuntu/data/one-api目录,请确保该目录存在且具有写入权限,或者更改为合适的目录。

如果启动失败,请添加 --privileged=true,具体参考 #482

如果上面的镜像无法拉取,可以尝试使用 GitHub 的 Docker 镜像,将上面的 justsong/one-api 替换为 ghcr.io/songquanpeng/one-api 即可。

如果你的并发量较大,务必设置 SQL_DSN,详见下面环境变量一节。

更新命令:docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -cR
Nginx 的参考配置:

server{
   server_name openai.justsong.cn;  # 请根据实际情况修改你的域名

   location / {
          client_max_body_size  64m;
          proxy_http_version 1.1;
          proxy_pass http://localhost:3000;  # 请根据实际情况修改你的端口
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $remote_addr;
          proxy_cache_bypass $http_upgrade;
          proxy_set_header Accept-Encoding gzip;
          proxy_read_timeout 300s;  # GPT-4 需要较长的超时时间,请自行调整
   }
}

之后使用 Let’s Encrypt 的 certbot 配置 HTTPS:

# Ubuntu 安装 certbot:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# 生成证书 & 修改 Nginx 配置
sudo certbot --nginx
# 根据指示进行操作
# 重启 Nginx
sudo service nginx restart

初始账号用户名为 root,密码为 123456


基于 Docker Compose 进行部署

仅启动方式不同,参数设置不变,请参考基于 Docker 部署部分

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

# 查看部署状态
docker-compose ps

环境变量

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

  1. 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 哨兵模式下主节点的名称。
  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:启用内存缓存,会导致用户额度的更新存在一定的延迟,可选值为 truefalse,未设置则默认为 false
    • 例子:MEMORY_CACHE_ENABLED=true
  7. SYNC_FREQUENCY:在启用缓存的情况下与数据库同步配置的频率,单位为秒,默认为 600 秒。
    • 例子:SYNC_FREQUENCY=60
  8. NODE_TYPE:设置之后将指定节点类型,可选值为 masterslave,未设置则默认为 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:启用数据库批量更新聚合,会导致用户额度的更新存在一定的延迟可选值为 truefalse,未设置则默认为 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:是否根据请求成功率禁用渠道,默认不开启,可选值为 truefalse
  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,默认不开启,可选值为 truefalse
  30. TEST_PROMPT:测试模型时的用户 prompt,默认为 Print your model name exactly and do not output without any other text.

其余部署方式请参考官方文档


Ollama 部署安装


Windows安装

下载


其余参考系统请官方文档


模型部署

输入win+R打开运行界面输入cmd打开终端,终端中执行以下代码:

# 运行模型
ollama run <model>:<parameters>
# 删除模型
ollama rm <model>:<parameters>
# 列出所有模型
ollama list
# 运行模型api服务
ollama serve

测试api

生成请求
curl http://localhost:11434/api/generate -d '{
  "model": "<modelname>",
  "prompt":"Why is the sky blue?"
}'
模型返回
curl http://localhost:11434/api/chat -d '{
  "model": "<modelname>",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'

OneAPI 添加模型渠道

在这里插入图片描述

模型类型选择Ollama,名称填入对应模型的名称,模型选择Ollama下载的模型,如果找不到,在输入框填入后,点击旁边的填入按钮,密钥中填写自定义密钥,由于使用Ollama部署模型以及使用docker安装OneApi,需要在代理填写上http://<本机ip>:11434,点击提交
在这里插入图片描述
渠道页面点击测试回显响应时间即可。

api测试

curl http://localhost:3000/api/chat \
-H "Authorization: Bearer your-admin-token" \
-H "Content-Type: application/json" \
-d '{
  "model": "<modelname>",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐