背景

讯飞星火大模型的请求,java只适合用webSocket做异步的请求,但是公众号用户侧又需要实时回答,并且讯飞星火返回的AI回答是多次多语句返回的。
举个栗子
问:今天天气怎么样?
返回1:今天某某地天气 ,
返回2:多云转晴,
返回3:傍晚可能会下雨,
返回4:请尽量带上雨伞
返回5:多注意天气变化,over

那么这个时候,就需要接收到所有的返回消息,并且拼接之后再给用户返回数据。而这个返回消息是异步的,如何知道这个链接中的返回消息要给哪个用户?

方案

这时候就需要通过缓存来进行一对一的处理,为每个用户都维护一个链接。
大致方案如下:

  1. 用户请求,建立webSocket建立链接,并且缓存起来与用户id做一对一关系
  2. 通过webSocket发送用户问题,进入等待状态
    a. webSocket监听类不断的接收回答分片数据,缓存起来,与链接做一对一关系
    b. 接收到最后一个分片消息的时候,将回答整合
    c. 存入完整回答缓存,与用户和问题做一对一关系
  3. 不断的查询缓存是否有完整回答,直到查询到,返回数据
  4. 如果超时没有查询到,返回指定报错,结束

实现

在这里插入图片描述

详细实现可以直接看项目
https://gitee.com/shangziliang/mu-wx-message

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐