大模型一键封装成OpenAI协议解决方案(一)

引言:本质上是统一为openai协议

参考文章:

目前有两种选择,一是开源可商用的OneAPI,另一种则是国内的接口聚合管理平台小豆包,一个个来介绍

OneAPI

简介:OneAPI 是一个 LLM API 管理与分发系统,支持多种主流模型,如 OpenAI、Azure、Anthropic Claude、Google Gemini 等,提供统一 API 适配,可用于 key 管理与二次分发。它是一个单可执行文件,提供 Docker 镜像,支持一键部署和开箱即用。这里用的是基于Docker Compose部署的方式

原理简介图
中转大模型

我们一步步解析

准备docker-compose.yml文件
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
服务启动

docker-compose.yml文件准备好后,就运行以下命令启动容器

[root@iZwz9j0c6gfg3q7pp1ep6cZ oneapi] docker-compose up -d # sudo 可加可不加

稍微等待以下,有以下内容即为成功

Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6
Creating mysql ... done
Creating oneapi ... done

可以用命令查看一下容器是否正常运行

[root@iZwz9j0c6gfg3q7pp1ep6cZ oneapi]# docker ps
CONTAINER ID   IMAGE                                                      COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
82761e849914   registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6   "/one-api"               22 minutes ago   Up 22 minutes   0.0.0.0:3001->3000/tcp, :::3001->3000/tcp              oneapi
4f165b6b4d33   registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36     "docker-entrypoint.s…"   22 minutes ago   Up 22 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

目前一切正常

打开防火墙

我用的是移动云轻型服务器,只需要放开3001/3306这两个端口就可以了

image-20250404021415483

接下来就可以成功访问部署的服务了,使用公网IP:Port即可

image-20250404021654051

默认是root/123456,登陆后需要强制修改密码

管理渠道

渠道,也就是支持的可调用的大模型image-20250404112853431

点击添加新渠道后,选择支持的模型,再填写自己的keyimage-20250404113152887

image-20250404113216893

确认信息无误后,点击提交即可

提交完成后,可以点击测试,看是否有响应image-20250404145703256

管理令牌

接下来,添加对应的令牌

image-20250404150629541

可以选择该令牌可使用的模型范围以及可用额度image-20250404150722320

接下来就可以复制OneAPI对应的令牌密钥进行调用了,参考代码如下

from openai import OpenAI

model_dict = {
    'coze': {
        'api_key': '你的密钥',
        'base_url': 'http://IP:Port/v1',
        'model_name': '模型名称'
    },
    'kimi': {
        'api_key': '你的密钥',
        'base_url': 'http://IP:Port/v1',
        'model_name': '模型名称'
    },
}

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,
        )
        print(completion)
        return completion.choices[-1].message.content

if __name__ == '__main__':
    model = 'kimi'
    llm = LLM_API(model_dict[model]['api_key'], model_dict[model]['base_url'], model_dict[model]['model_name'])
    user_question = "你是谁"
    messages = [{"role": "user", "content": user_question},]
    print(llm(messages))

响应如下即为成功image-20250404152825555

管理兑换码

而兑换码,是可以给用户兑换余额的,由管理员创建,供其他用户使用image-20250404160527100

在充值页面填写刚才复制的兑换码,就可以兑换管理员设定的相应的额度image-20250404160641865

管理用户

这部分的话,就可以由管理员来创建用户,供其他人可以使用你部署的服务image-20250404160930383

管理日志

这部分没什么,就是记录用户行为、api使用情况image-20250404161531942

管理设置

最后,设置这方面的话,更多是运营相关image-20250404162132369

posted @ 2025-04-04 16:54  终须有  阅读(182)  评论(0)    收藏  举报