首页 公告 项目 RSS

构建集成多AI服务的网关

March 14, 2024 本文有 1241 个字 需要花费 3 分钟阅读

简介

在日常工作中,我们可能需要使用多种AI服务,例如Github Copilot、Azure OpenAI和Groq等。然而,频繁在各个平台之间切换操作,无疑会增加工作的复杂性。因此,我们可以考虑构建一个AI网关,将这些服务集成在一起,提高工作效率。以下是我找到的一些相关项目,可以作为参考:

架构

我们的目标是构建一个简洁有效的架构。在这个架构中,ChatGPT-Next-Web作为用户界面,而one-api作为AI网关,负责将请求分发到各个AI服务。

搭建ChatGPT-Next-Web

我选择在Vercel上部署ChatGPT-Next-Web,并使用Cloudflare作为CDN。如果你想使用Docker Compose进行部署,可以参考以下的配置文件:

version: "3.9"
services:
  chatgpt-next-web:
    container_name: chatgpt-next-web
    image: yidadaa/chatgpt-next-web:v2.11.3
    restart: "always"
    volumes: 
      - "/etc/localtime:/etc/localtime"
    ports:
      - 3000:3000
    environment:
      - CUSTOM_MODELS=-all,+gpt-3.5-turbo,+gpt-4,+mixtral-8x7b-32768,+llama2-70b-4096
      - BASE_URL=xxxxxxxxxxxxxx
      - CODE=xxxxxxxxxxxxxxxxxx
      - OPENAI_API_KEY=xxxxxxxxxxxxxxxxxx

环境变量说明:

  • BASE_URL:one-api的地址
  • CODE:访问ChatGPT-Next-Web的密码
  • OPENAI_API_KEY:one-api中令牌的token
  • CUSTOM_MODELS:我只列出了Groq支持的两个模型和两个GPT模型,因为这是我最常用的模型。

搭建one-api

我选择在Kubernetes(k8s)中部署one-api。你可以参考以下的StatefulSet配置:


apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: one-api
  namespace: app
spec:
  selector:
    matchLabels:
      app: one-api
  serviceName: one-api
  replicas: 1
  template:
    metadata:
      labels:
        app: one-api
    spec:
      containers:
      - name: one-api
        image: justsong/one-api:v0.6.1
        ports:
        - containerPort: 3000
          name: one-api
        env:
        - name: TZ
          value: Asia/Shanghai
        - name: SQL_DSN
          value: root:xxxxxxxx@tcp(mysql:3306)/one-api # mysql 地址
        - name: SESSION_SECRET 
          value: xxxxxxx # 随便设置一个随机字符串
        args:
        - "--log-dir"
        - "/app/logs"
        volumeMounts:
        - name: one-api-data
          mountPath: /data
          subPath: data
        - name: one-api-data
          mountPath: /app/logs
          subPath: logs
        - name: timezone
          mountPath: /etc/localtime
          readOnly: true
      volumes:
        - name: timezone
          hostPath: 
            path: /usr/share/zoneinfo/Asia/Shanghai  
  volumeClaimTemplates:
  - metadata:
      name: one-api-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 50Gi

集成Azure OpenAI

虽然one-api本身支持Azure OpenAI,但在我的测试中,我一直收到404错误。因此,我在one-api后面添加了一层转发,你可以参考我的项目ai-gateway。只需使用Docker构建一个镜像,然后添加几个环境变量即可。在添加渠道时,选择自定义渠道,Base URL为你的容器地址,密钥可以随意设置。

集成Github Copilot

你可以参考copilot-gpt4-service来集成Github Copilot。以下是我的配置示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: copilot-gpt4-service
  namespace: app
spec:
  selector:
    matchLabels:
      app: copilot-gpt4-service
  serviceName: copilot-gpt4-service
  replicas: 1
  template:
    metadata:
      labels:
        app: copilot-gpt4-service
    spec:
      containers:
      - name: copilot-gpt4-service
        image: aaamoon/copilot-gpt4-service:0.2.0
        ports:
        - containerPort: 8080
          name: copilot
        env:
        - name: TZ
          value: "Asia/Shanghai"
        - name: CACHE_PATH
          value: "/db/cache.sqlite3"
        volumeMounts:
        - name: copilot-gpt4-service-data
          mountPath: /db
        - name: timezone
          mountPath: /etc/localtime
          readOnly: true
      volumes:
        - name: timezone
          hostPath: 
            path: /usr/share/zoneinfo/Asia/Shanghai  
  volumeClaimTemplates:
  - metadata:
      name: copilot-gpt4-service-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 50Gi

部署完容器后,使用以下命令获取token:

python3 <(curl -fsSL https://raw.githubusercontent.com/aaamoon/copilot-gpt4-service/master/shells/get_copilot_token.py)

在添加渠道时,选择自定义渠道,地址为你的容器地址,密钥为刚刚获取的token。目前只支持GPT-4和GPT-3.5-turbo模型,但相比Azure OpenAI,其速度会快一些。

集成Groq

集成Groq也需要选择自定义渠道,地址为Groq的地址,密钥为Groq的密钥。

其他

除了one-api,还有一些其他的AI网关可以选择,如KongCloudflare。Cloudflare的AI网关支持缓存、日志和速率限制,对于某些企业场景来说,非常实用。

欢迎关注我的博客www.bboy.app

Have Fun