【记录】使用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

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

客户端

新建渠道

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

附加 关闭 Azure 筛选

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

附加 Google Vertex

注册 GCP 账户

启用 Vertex AI API

创建服务账户

添加到 one-api 渠道

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

附加 Amazon Bedrock

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


【记录】使用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