背景
实现一个AI聊天问答功能,其中AI的回复是分段返回的。为了给用户带来更好的交互体验,需要设计一个流式读取AI回复的接口,并在UI上实时显示这些分段内容。具体来说,我们需要实现以下功能:
-
流式接口: 设计一个接口,能够持续从AI模型获取回复内容,并以段落为单位返回。
-
UI流式显示: 在UI界面上,随着新段落内容的获取,实时将这些内容追加到聊天窗口中,营造出AI在持续思考、逐步回答的氛围
流式传输网络设计
APP整体设计大致是
okhttp - retrofit - 自定义网络解析封装层(api) - repository - ViewModel - view
以下关于流式传输的设计,是基于自定义网络解析封装层来实现的
OkHttp响应的流式读取
当我们使用OkHttp发送网络请求时,服务器返回的数据通常会以流的形式传输。为了高效地处理这些数据,我们可以采用流式读取的方式,即边接收数据边处理,而不是一次性将所有数据读入内存。
为什么不直接使用string()
方法?
OkHttp提供的string()
方法会将整个响应体一次性读入内存,然后转换为字符串。对于大数据量