本项目采用Python 3.10语言和Server-sent Events技术,实现了一个类似ChatGPT的后端实时聊天功能,能够逐句回复用户请求,并支持流式传输。
善于观察的朋友一定会敏锐地发现ChatGPT网页端是逐句给出问题答案的。同样,在使用ChatGPT后台Api接口请求时,如果将Stream参数设置为True后,可以实现与网页端一样的流式返回方式,这样能够更快地向前端用户提供反馈,并且有助于缓解连接超时的问题。
Server-sent events(SSE)是一种用于服务器到客户端单向通信的协议。利用SSE,服务器可以在不需客户端请求的情况下推送实时数据给客户端。这种协议基于HTTP协议并使用文本格式的数据传输方式(通常是JSON)。在客户端方面,通过创建一个EventSource对象来与服务器建立连接,并监听来自服务器端发送过来的不同事件;而服务端则可以随时向已建立连接的客户端推发新的事件信息。
当应用ChatGPT时,在打开其网页版并提出一个问题后,进入网络菜单清除历史请求记录。然后在网络抓包工具中进行实时监控:可以看到在点击了回答按钮之后,页面会发送一个到后台对话接口(例如backend-api/conversation)的请求。然而值得注意的是,这个通信过程并非采用传统HTTP协议的方式。