1

构建集成多AI服务的网关

 1 month ago
source link: https://www.bboy.app/2024/03/14/%E6%9E%84%E5%BB%BA%E9%9B%86%E6%88%90%E5%A4%9Aai%E6%9C%8D%E5%8A%A1%E7%9A%84%E7%BD%91%E5%85%B3/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

构建集成多AI服务的网关

March 14, 2024 本文有 1241 个字 需要花费 3 分钟阅读
20240314-1.webp

在日常工作中,我们可能需要使用多种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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK