0%

AI对话接口 (后端实现Python)

接口简介

详见手册

后端实现 Python

  1. ChatGLM-6B模型本身是基于python的,且考虑到对硬件有较高要求,只能在本地PC上运行

  2. 云端服务器由GO实现

基于以上两点:决定继续用python开发本地服务,然后采用websocket与云端服务器进行通信。云端的GO服务器绑定公网IP,由本地的Python Client发起连接,然后由云端服务器发起请求,调用本地的AI对话功能

websocket

通过 asyncio 和 websockets 这两个py库进行ws通信,基础框架如下:

1
2
3
4
5
6
async with websockets.connect(url) as ws:
await ws.send("hello")
while True:
recvData = await ws.recv()
# do some logic
await ws.send(response)

在while循环中接收消息,处理后再通过ws返回给server

心跳包的实现

由于云服务器用nginx代理了所有请求,而nginx有超时机制。需要client发送心跳包来保持长链接,对框架做出一点改动

1
2
3
4
5
6
7
while True:
try:
recvData = await asyncio.wait_for(ws.recv(), timeout=60.0)
# do some logic
await ws.send(response)
except asyncio.TimeoutError:
await ws.send("heartbeat") # 发送心跳包

通过asyncio.wait_for的超时机制,每隔60s便向server发送一个心跳包,以保持链接

数据存储

由于是单卡AI提供的轻量级服务,不考虑复杂的数据存储。直接以json的形式存储在本地文件夹下即可