OneAPI-接口管理和分发神器:所有大模型一键封装成OpenAI协议

OneAPI-接口管理和分发神器:所有大模型一键封装成OpenAI协议

AI码上来

AI码上来

关于AI工具、实战的一切。欢迎围观公众号:猴哥的AI知识库。

收录于 · AI工具

37 人赞同了该文章

目录

写在前面

最近的各大厂商的 LLM 大模型,可谓百花齐放,想都尝试下,但每家的 API 协议都不尽相同~

注册了各家的 LLM API 帐号,如何统一管理?

甚至,想乘这阵 LLM 之风赚一波...

别急,今天介绍的这个 GitHub 开源项目满足你所有幻想:OneAPI,一款接口管理和分发神器,将所有大模型一键封装成OpenAI协议

传送门:https://github.com/songquanpeng/one-api

话不多说,上实操!

1. 服务部署

作者了提供了源码部署和 Docker 部署两种方式,其中源码部署需要分别构建前端和后端,相对麻烦一点。

前两篇,我们分别搞了一台本地 Linux 虚拟机和一台云服务器:

接下来,就把 OneAPI 部署在这台云服务器上,如果你用本地 Linux 虚拟机当然也没问题。

因为本项目还依赖数据库的服务,所以我们采用 docker-compose 的方式来进行部署,简单几步就能搞定,极大降低小白的部署门槛。

不了解 docker 的小伙伴可以看这里:【保姆级教程】Linux系统如何玩转Docker

1.1 创建 docker-compose 文件

打开一个终端:

mkdir oneapi

cd oneapi/
touch docker-compose.yml

把下述脚本复制到 docker-compose.yml 中:

version: '3.3'
services:
 mysql:
   # image: mysql:8.0.36
   image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云
   container_name: mysql
   restart: always
   ports:
     - 3306:3306
   command: --default-authentication-plugin=mysql_native_password
   environment:
     # 默认root密码,仅首次运行有效
     MYSQL_ROOT_PASSWORD: oneapimmysql
     MYSQL_DATABASE: oneapi
   volumes:
     - ./mysql:/var/lib/mysql
 oneapi:
   container_name: oneapi
   # image: ghcr.io/songquanpeng/one-api:latest
   image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云
   ports:
     - 3001:3000
   depends_on:
     - mysql
   restart: always
   environment:
     - SQL_DSN=root:oneapimmysql@tcp(mysql:3306)/oneapi
     - SESSION_SECRET=oneapikey
     - MEMORY_CACHE_ENABLED=true
     - BATCH_UPDATE_ENABLED=true
     - BATCH_UPDATE_INTERVAL=10
     # 初始化的默认令牌
     - INITIAL_ROOT_TOKEN=fastgpt
   volumes:
     - ./oneapi:/data

简单介绍下上面几个参数:

  • version: 指定了Compose文件格式的版本,用于确保配置文件与Docker Compose的版本兼容,最新版docker-compose已不需要这个字段;
  • services: 定义了应用程序中的服务,每个服务运行在独立的容器中;
  • image:镜像地址,国内服务器用阿里云的镜像会非常快,海外服务器不建议用阿里云的镜像;
  • ports: 3001:3000 意味着容器内部的3000端口映射到宿主机的3001端口,用于防止宿主机端口冲突;
  • volumes: ./mysql:/var/lib/mysql 意味着将本地的./mysql目录挂载到容器的/var/lib/mysql目录,用于数据持久化。

1.2 服务启动

配置好 docker-compose.yml 文件后,采取如下命令一键启动:

sudo docker-compose up -d

等待拉取镜像,终端出现如下提示,说明成功启动:

[+] Running 3/3
✔ Network oneapi_default  Created                  
✔ Container mysql         Started                  
✔ Container oneapi        Started

我们打开宝塔面板,可以看到服务已经在运行中了:

2. 服务配置和管理

2.1 OneAPI 登录

还记得 OneAPI 的端口号不?3001!

因此,浏览器中的访问地址应该是:http://IP:Port,例如:http://129.150.63.xxx:3001

但这时,上述地址是打不开的,还需要到服务器中把 3001/3306 端口的防火墙打开。如果你用的也是腾讯云服务器,具体操作见:玩转云服务:手把手带你薅一台腾讯云服务器,公网 IP

防火墙打开后,上述地址就可以访问了:

首先需要登录,初始账号名 root,密码 123456,登录后立即修改密码。

登录成功后,你会发现 Tab 页多了几个选项,这些只有超级管理员能看到:

接下来,我们一一了解下系统的几个模块。

2.2 用户

首先我们看下用户管理模块,左下角可以新增用户。

点击右侧编辑,可以发现用户分组有三个。分组有什么用?假如你在这个系统中代理 10 种大模型并商业化,可以设定 VIP 可以使用其中的 2 种模型,而 SVIP 可以使用全部。如果自己玩,那随意。

2.2 渠道

渠道用来管理和添加各个大模型厂商的 LLM。只有超级管理员才能设置。

在渠道管理中,左下角点击添加新的渠道:

 

2.3.1 渠道添加

我们以 Coze 为例进行介绍。

如何去 coze 申请一个bot,可以看这里:coze2openai

假设你已经申请到了一个bot,那么它的url应该是这样:https://www.coze.cn/space/user_id/bot/bot_id

保存好user_idbot_id ,下面渠道填写要用到:

  • 类型:选择 Coze;
  • 名称:渠道名称,随便填,方便自己使用即可;
  • 模型:要用哪些模型,Coze 中以bot_id区分,红色方框里填入bot_id,最后点击填入;
  • User ID:填写你的user_id
  • 密钥:填写你在 coze 中获取的令牌;
  • 代理:如果是国内的coze,则是 https://api.coze.cn/;如果是国外的 coze,则对应 https://api.coze.com/。(非常重要,否则调用不了

提交后,点击右侧测试,看看是否能够调用成功。

再比如我们还要用智谱的GLM,添加则更加简单,只需要你准备好智谱的 API key 就好了:

2.3.2 渠道列表

其他厂商基本和上述一致,最后,给大家看下我的渠道列表:

2.3 令牌

这个模块用于创建令牌,供客户端或调用方使用,其作用跟 LLM的令牌(或密钥)的作用是一样的。点击复制后,会显示在上方搜索框。

当然也可以选择添加新的令牌,如果仅仅是自用,可以设为无限额度,永不过期;如果是外发给其他人使用的,你可以给他设置一个限量:

有了令牌,就可以采用 OpenAI 协议的 API 调用了。

2.4 兑换 & 充值

这两个模块是为了商业化准备的。

兑换模块,用于管理兑换码,类似话费充值卡。

 

充值模块,用于给账户充值,与兑换配合使用。输入一个有效兑换码,就相当于给当前账户充值对应的额度,用于供令牌调用消耗。

2.5 日志 & 设置

日志模块,用于展示用户充值和额度消耗记录。

设置模板,包括个人设置、运营设置、系统设置和其他设置,整个系统的商业化功能还是挺完备的。

3. 服务测试

最后,我们用获取到的令牌来测试一下。

其调用方式与 OpenAI API 一致,只需将:

  • OpenAI 的网址 'base_url',改成你部署的 OneAPI 的网址,例:'http://129.150.63.xxx:3001/v1';
  • OpenAI 的令牌 'api_key',改成你的令牌,在本文 2.3 部分得到。

我们在 2.2 渠道部分添加了两个模型,测试的示例代码如下:

from openai import OpenAI

model_dict = {
   'coze': {
       'api_key': 'sk-xxx',
       'base_url': 'http://129.150.63.184:3001/v1',
       'model_name': '7357494611763445771'
   },
   'glm': {
       'api_key': 'sk-xxx',
       'base_url': 'http://129.150.63.184:3001/v1',
       'model_name': 'glm-4'
   },
}

class LLM_API:
   def __init__(self, api_key, base_url, model):
       self.client =  OpenAI(
           api_key=api_key,
           base_url=base_url,
       )
       self.model = model
   
   def __call__(self, messages, temperature=0.7):
       completion = self.client.chat.completions.create(
           model=self.model,
           messages=messages,
           temperature=temperature,
       )
       return completion.choices[-1].message.content

if name == '__main__':
   model = 'coze'
   llm = LLM_API(model_dictmodel, model_dictmodel, model_dictmodel)
   user_question = "你是谁"
   messages = [{"role": "user", "content": user_question},]
   print(llm(messages))

写在最后

上篇分享:无惧 OpenAI 封禁,Coze API 邀你免费用 GPT,还只能将 Coze 的 LLM 转换为OpenAI API,而今天介绍的这款 OneAPI 则支持了更多的 LLM。本质上,OneAPI 相当于进行了中转操作:

从此,你再也不用为用哪个 LLM 而纠结了,一个接口帮你测试所有 LLM!想调哪个你随意~

祝大家借助 OneAPI 玩转大模型,开发出更多 AI 创意应用。

下篇预告:FastGPT - 给 GPT 插上知识库的翅膀!0基础搭建本地私有知识库

标签: none

添加新评论