# 【记录】使用one-api聚合Azure和OpenAI的API

Last updated on November 6, 2024 am

One-api 是 OpenAI 接口管理 & 分发系统，支持Azure、Anthropic Claude、Google PaLM 2、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元，可用于二次分发管理 key。

- 在负载均衡的同时，有效避免了key的泄露风险

## 部署 One-api

- 反向代理
- 账号：`root`
- 密码：`123456`

    1
    2

    mkdir -p ~/app/one-api && cd ~/app/one-api && nano docker-compose.yml
    sudo docker-compose up -d

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    version: '3'
    services:
      one-api:
        image: justsong/one-api:latest
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - ./data:/data
        restart: unless-stopped
    networks:
      default:
        external: true
        name: ngpm

## 客户端

- ChatGPT-Next-Web
- 沉浸式翻译
- Jupyter-ai
- 在 令牌 中新建一个令牌，端点填反代的地址

## 新建渠道

- Azure 需要确保部署模型的名称是 `gpt-35-turbo`
- 可以将 one-api 本身当一个渠道进行套娃
- 在 日志 里可以看到对不同渠道进行了负载均衡

## 附加 关闭 Azure 筛选

- 安装油猴插件
- 去控制台新建一个筛选器，将筛选关闭，并开启异步筛选注释
- 设置模型部署中模型的高级选项，切换筛选器为刚刚创建的筛选器

## 附加 Google Vertex

### 注册 GCP 账户

- 访问 https://cloud.google.com/vertex-ai 并注册GCP账户。
- 激活账户获得所有模型的访问权限

### 启用 Vertex AI API

- 访问 https://console.cloud.google.com/marketplace/product/google/aiplatform.googleapis.com 为你的项目启用 Vertex AI API。
- 访问 https://console.cloud.google.com/vertex-ai/publishers/anthropic/model-garden/claude-3-5-sonnet 申请 Claude 模型。
- 访问 https://console.cloud.google.com/apis/library/iamcredentials.googleapis.com 激活 IAM Service Account Credentials API

### 创建服务账户

- 访问 https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts/create?walkthrough_id=iam--create-service-account#step_index=1
- 选择你之前创建的项目ID。
- 确保为服务账户授予 `Vertex AI Service Agent`, `Service Account Token Creator` 和 `Vertex AI User` 的角色。
- 在你刚创建的服务账户页面，转到"密钥"标签，点击"添加密钥"。
- 选择"创建新密钥"并选择"JSON"作为密钥类型。
- 密钥文件将自动下载。该文件包含worker所需的变量，如project_id、private_key和client_email。

### 添加到 one-api 渠道

- 区域 Region 写 `us-east5`
- Vertex AI Project ID 在 json 文件里
- Google Cloud Application Default Credentials JSON 为下载的 json 文件的内容
- 详细内容点此

## 附加 Amazon Bedrock

- 申请模型访问权限
- 添加 Access key
- litellm 文档

    1

    mkdir -p ~/app/litellm && cd ~/app/litellm && nano docker-compose.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    version: "3.9"
    services:
      litellm:
        image: ghcr.io/berriai/litellm:main-latest
        volumes:
          - ./proxy_server_config.yaml:/app/proxy_server_config.yaml # mount your litellm config.yaml
        environment:
          - AWS_ACCESS_KEY_ID=<ACCESS_KEY>
          - AWS_SECRET_ACCESS_KEY=<SECRET_ACCESS_KEY>
          - AWS_REGION_NAME=us-west-2
        restart: unless-stopped

    networks:
      default:
        external: true
        name: ngpm

    1
    2

    wget https://github.com/BerriAI/litellm/raw/main/proxy_server_config.yaml
    # 修改 master_key 和 model_list

    1
    2
    3
    4
    5
    6
    7

    model_list:
      - model_name: bedrock-claude-haiku
        litellm_params:
          model: bedrock/anthropic.claude-3-haiku-20240307-v1:0

    general_settings:
      master_key: sk-1234

    1

    sudo docker-compose up -d

- `one-api` 添加渠道

## 推荐 部署 SillyTavern

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    mkdir -p ~/app/sillytavern && cd ~/app/sillytavern && nano docker-compose.yml
    sudo docker-compose up -d
    sudo docker-compose logs
    nano config/config.yaml
    # listen: true
    # whitelist:
    #   - 172.*.*.*
    sudo docker-compose restart
    sudo docker-compose logs
    # 反代 sillytavern:8080
    # Custom Endpoint (Base URL) 设置 http://one-api:3000/v1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    version: "3"
    services:
      sillytavern:
        image: ghcr.io/sillytavern/sillytavern:latest
        volumes:
          - "./config:/home/node/app/config"
          - "./user:/home/node/app/public/user"
        restart: unless-stopped

    networks:
      default:
        external: true
        name: ngpm

## 附加 部署 Next-Web

    1
    2

    mkdir -p ~/app/next-web && cd ~/app/next-web && nano docker-compose.yml
    sudo docker-compose up -d

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    version: '3'
    services:
      next-web:
        image: yidadaa/chatgpt-next-web:latest
        environment:
          - TZ=Asia/Shanghai
          - BASE_URL=https://cdn.limour.top/one-api
          - CUSTOM_MODELS=-all,+gpt-4o-mini@Deepbricks,+gpt-3.5-turbo@openai,+gpt-4-turbo@openai,+gpt-4o@openai,+o1-mini@openai,+gpt-claude-3.5-haiku@OpenRouter,+gpt-claude-3.5-sonnet@OpenRouter
          - ENABLE_BALANCE_QUERY=1
          - HOSTNAME=0.0.0.0
          - DEFAULT_MODEL=gpt-4o
        restart: unless-stopped

    networks:
      default:
        external: true
        name: ngpm

- 添加基本身份验证
- 修改 `/api/openai` 接口的 `header`
- 设置里的 `对话摘要模型` 改为 `gpt-4o-mini`, 否则会默认使用最贵的模型来生成标题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    chunked_transfer_encoding off;
    proxy_buffering off;
    proxy_cache off;
    set $next_header $http_authorization;
    if ($http_authorization = "Basic <用户1>"){
    set $next_header "Bearer <用户1的key>";
    }
    if ($http_authorization = "Basic <用户2>"){
    set $next_header "Bearer <用户2的key>";
    }
    proxy_set_header Authorization $next_header;

## 附加 搭建独角数卡

- 反向代理
- 账号：`admin`
- 密码：`admin`
- 数据库地址填 `shop-db`
- Redis地址 填 `shop-redis`

    1
    2
    3
    4
    5
    6
    7
    8

    mkdir -p ~/app/shop && cd ~/app/shop && nano docker-compose.yml && nano env.conf
    mkdir storage uploads && chmod -R 777 ./* && sudo docker-compose up -d
    # 访问首页完成安装后
    sudo docker-compose down
    # 分别把 - INSTALL=true 改成 - INSTALL=false
    # 把 APP_DEBUG=true 改成 APP_DEBUG=false
    # 把 ADMIN_HTTPS=false 改成 ADMIN_HTTPS=true
    sudo docker-compose up -d

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38

    version: "3"

    services:
      shop:
        image: ghcr.io/apocalypsor/dujiaoka:latest
        environment:
          - TZ=Asia/Shanghai
          # - INSTALL=false
          - INSTALL=true
          # - MODIFY=true
          - ADMIN_HTTPS=true
        volumes:
          - ./env.conf:/dujiaoka/.env
          - ./uploads:/dujiaoka/public/uploads
          - ./storage:/dujiaoka/storage
        restart: always

      shop-db:
        image: mariadb:focal
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=changeyourpassword
          - MYSQL_DATABASE=dujiaoka
          - MYSQL_USER=dujiaoka
          - MYSQL_PASSWORD=changeyourpassword
        volumes:
          - ./mysql:/var/lib/mysql

      shop-redis:
        image: redis:alpine
        restart: always
        volumes:
          - ./redis:/data

    networks:
      default:
        external: true
        name: ngpm

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47

    APP_NAME=璃墨的小卖部
    APP_ENV=local
    APP_KEY=base64:rKwRuI6eRpCw/9e2XZKKGj/Yx3iZy5e7+FQ6+aQl8Zg=
    APP_DEBUG=true
    APP_URL=https://shop.limour.top

    LOG_CHANNEL=stack

    # 数据库配置
    DB_CONNECTION=mysql
    DB_HOST=shop-db
    DB_PORT=3306
    DB_DATABASE=dujiaoka
    DB_USERNAME=dujiaoka
    DB_PASSWORD=changeyourpassword

    # redis配置
    REDIS_HOST=shop-redis
    REDIS_PASSWORD=
    REDIS_PORT=6379

    BROADCAST_DRIVER=log
    SESSION_DRIVER=file
    SESSION_LIFETIME=120

    # 缓存配置
    # file为磁盘文件  redis为内存级别
    # redis为内存需要安装好redis服务端并配置
    CACHE_DRIVER=redis

    # 异步消息队列
    # sync为同步  redis为异步
    # 使用redis异步需要安装好redis服务端并配置
    QUEUE_CONNECTION=redis

    # 后台语言
    ## zh_CN 简体中文
    ## zh_TW 繁体中文
    ## en    英文
    DUJIAO_ADMIN_LANGUAGE=zh_CN

    # 后台登录地址
    ADMIN_ROUTE_PREFIX=/admin

    # 是否开启https (前端开启了后端也必须为true)
    # 后台登录出现0err或者其他登录异常问题，大概率是开启了https而后台没有开启，把下面的false改为true即可
    ADMIN_HTTPS=true

#llama #docker #ngpm #openai
【记录】使用one-api聚合Azure和OpenAI的API
https://hexo.limour.top/Aggregating-Azure-and-OpenAI-APIs-with-OneAPI
Author
Limour
Posted on
October 3, 2023
Updated on
November 6, 2024
Licensed under
【学习】孟德尔随机化 Previous
【设定】亿万年前的学院制文明 Next

#### Search

Keyword