简介
在日常工作中,我们可能需要使用多种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中令牌的tokenCUSTOM_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网关可以选择,如Kong和Cloudflare。Cloudflare的AI网关支持缓存、日志和速率限制,对于某些企业场景来说,非常实用。
欢迎关注我的博客www.bboy.app
Have Fun