在前端 AI Native 应用中,你如何实现一个支持中断和恢复的流式对话?
比如用户点击"停止生成"后,前端如何优雅地中断请求?恢复时又如何续接上下文?
使用一个 AbortController,在用户点击停止之后,取消流式请求,并把目前为止已经生成的 token 缓存下来,如果用户要求恢复,就将之前缓存的 token 重新发给大模型,让大模型继续生成。
优点:
不足:
assistant 角色的前缀消息构造到 messages 数组,而非当成新 promptreader.cancel() 资源释放用 AbortController 中断 fetch/SSE 请求,同时将已生成的文本保存在 state 中。恢复时,将原始用户消息 + 已生成内容作为 assistant 的前缀消息重新构造 messages 数组,附加系统提示要求模型"不重复、继续生成",再发起新的流式请求。前端维护 idle / streaming / paused / resuming 四个状态控制 UI 行为,流关闭时调用 reader.cancel() 释放资源。