为么要是用 One-API

从 v4.1.1 版本开始,GeekAI 将不在兼容多平台的 API,只支持类 OpenAI 格式的大模型 API,主要原因如下:

  1. 各种大模型层出不穷,要兼容的代码量越来越大,导致系统越来越臃肿。
  2. one-api (opens new window) 是一个非常优秀的大模型 API 整合框架,使用简单,功能强大,几乎支持市面上所有的主流模型,以及像 ollama 这种本地大模型的 API 服务,关键是又是完全免费开源系统,因为无需再重复造轮子,直接用这个工具即可。

使用 one-api,你可以轻松把你的所有不同平台的 API 资源(OpenAI,Claude,Azure,谷歌,星火,百度,字节,本地模型等)聚合到一起,然后作为统一的 API 接口向你应用提供服务。这样你在应用端就不需要再去兼容各个平台的 API 了,减少耦合。

其次,聚合的渠道也可以再次聚合,比如你买的中转站,已经是聚合渠道了,假设每个中转站支持的并发是1000,那么如果你买了三个不同中转平台的 API KEY,那么你聚合一起的并发就是 3000。能否大大提升你的应用 API 调用的并发数。

# 部署

首先拉取 docker 镜像,使用 Docker 拉取的最新镜像可能是 alpha 版本,我们这里手动指定稳定版本,我写本文档的时候的,one-api 的最新稳定版本是 v0.6.7。

使用 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:v0.6.7

使用 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:v0.6.7 

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

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

如果上面的镜像无法拉取,可以尝试使用 GitHub 的 Docker 镜像,将上面的 justsong/one-api 替换为 registry.cn-shenzhen.aliyuncs.com/geekmaster/one-api 即可。

也可以直接 docker-compose 启动,复制下面的内容到 docker-compose.yaml

services:
  redis:
    image: "registry.cn-shenzhen.aliyuncs.com/geekmaster/one-api:v0.6.7"
    container_name: "one-api"
    restart: always
    environment:
      - TZ="Asia/Shanghai"
      #- SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"
    ports:
      - "3000:3000"
    volumes:
      - ./data:/data

然后运行 docker-compose up -d 启动。

# 配置

访问 http://localhost:3000,使用 root/123456 登录后,点击 “渠道”

然后点击 “添加新的渠道”,填上渠道信息,保存。

这里需要注意的,这这里的渠道可以是单一渠道,比如 OpenAI,Kimi,百度等,也是聚合渠道,比如说你购买的中转 API 就是一种聚合渠道,可以同时支持 OpenAI 和各种国产模型。只要你在“模型”这一栏把渠道支持的模型全写上去就好。

在渠道列表页还可以设置渠道的优先级,优先级高的渠道将会被优先调用,建议把稳定的渠道设置较高的优先级,这样能增加 API 的可用性。

# 使用

配置好渠道之后,one-api 就可以使用了,我们先创建一个令牌。

填好令牌信息,保存

复制令牌:

然后就可以使用该令牌和 API 地址(http://localhost:3000)来调用 one-api 的 API 了。

curl http://localhost:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-PQtiDuMUpYUtzHjtF4B60c47566b44699f4b33Ed480160De" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {
        "role": "user",
        "content": "Hello!"
      }
    ]
  }'

# 响应
{
  "id": "chatcmpl-9qGUJ9P4QinHWPMTIHjny47Sp665T",
  "object": "chat.completion",
  "created": 1722243463,
  "model": "gpt-4o-mini-2024-07-18",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! How can I assist you today?"
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 9,
    "total_tokens": 18
  },
  "system_fingerprint": "fp_ba606877f9"
}

# Nginx 转发

如果你想使用 one-api 对外提供服务的话,可以使用 nginx 做一层转发:

map $http_upgrade $connection_upgrade {
     default upgrade;
     'websocket'      upgrade;
}
server {
    
    listen 80;
    server_name  api.abc.com; #替换成你自己的域名


    location / {
        proxy_http_version 1.1;
        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
        proxy_send_timeout 12s;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:3000;
    }
}

这样你就可以使用 http://api.abc.com 访问 one-api 服务了。

# GeekAI 配置

在 GeekAI 中配置自己搭建的 one-api 非常简单,只需要登录管理后台,选择 “API-KEY” 菜单,点击“添加 API-EKY”按钮,填入 API 信息即可。

上次更新: 2024/7/30 16:16:11