24|多轮对话:API 读写分离设计
月影

你好,我是月影。
接下来我们继续实现复杂的多轮对话。在这一讲里,我们在深入业务前,需要解决一个技术难题。
还记得我们在使用 Ling 的时候,推荐大家用 Server-Sent Events 模式,因为 Server-Sent Event 是现代浏览器支持的协议,前端处理比较简单。
但是,Server-Sent Events 有个弊端,那就是根据规范,它只支持 GET 请求。这是因为,SSE 的设计初衷就是客户端建立一个单向连接从服务器接收事件,而这个连接只能通过 GET 请求发起,因为它是用来“获取资源”的,服务器通过流式传输的方式持续返回数据。
对于前面的波波熊学伴产品而言,由于孩子问的问题内容通常比较简单,所以用 GET 请求的问题不大。因为简单的参数我们完全可以通过浏览器的 URL 查询传递参数。
然而对于面试官这种需求,因为我们提交回答的内容可能会很长,甚至未来有可能提交图片之类非文本的内容,所以通过 GET 的方式就不再合适,我们需要采用 POST 方法提交数据。
那么我们这个时候就要做一个读写分离的处理,通过 POST 请求提交数据,建立 EventSource 通道,然后再通过通道来读取流式数据。

在 AI 应用的技术架构中,这实际上是非常常用的一种接口设计范式。因为通常 GET 请求处理 AI 的流式推理的时间,远比 POST 提交用户请求和数据的时间要长。这么设计之后,我们可以让读取数据不会阻塞整个业务流程,也就意味着用户可以提交数据后离开页面,等待 server 的更新,server 更新完成后,再通过轮询或者浏览器自身的消息机制告诉用户。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

1. API 读写分离设计解决多轮对话中的技术难题,处理 GET 和 POST 请求的数据提交和读取。 2. 采用读写分离的设计范式在AI应用的技术架构中是常用的,可以提高用户体验,避免阻塞整个业务流程。 3. 通过读写分离设计,用户可以提交数据后离开页面,等待服务器的更新,提高了系统的效率和用户体验. 4. EventChannel 类的设计包括 init 方法和 getStream 方法,用于处理异步读取和存储流数据。 5. 服务端通过 /chat 方法接收消息并创建 EventChannel,通过 /event 方法实现流式 GET 方法,将内容发送给前端。 6. 读写分离设计在多轮对话中的应用,通过 EventChannel 实现异步读取和存储流数据,提高系统效率和用户体验. 7. ChatDisplay 组件用于显示聊天记录,监听消息变化,自动滚动到底部并在首次变化时触发内容变化事件. 8. MessageInput 组件实现了发送消息的功能,提供了简洁的用户界面和交互体验.
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《跟月影学前端智能体开发》,新⼈⾸单¥59
《跟月影学前端智能体开发》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论