2026-05-02

Question

在前端 AI Native 应用中,你如何实现一个支持中断和恢复的流式对话

比如用户点击"停止生成"后,前端如何优雅地中断请求?恢复时又如何续接上下文?

Your Answer

使用一个 AbortController,在用户点击停止之后,取消流式请求,并把目前为止已经生成的 token 缓存下来,如果用户要求恢复,就将之前缓存的 token 重新发给大模型,让大模型继续生成。

Review

优点:

  • AbortController 方向正确,是标准取消方案
  • 想到缓存已生成内容,不丢失用户进度,有产品意识

不足:

  • "重新发给大模型"表述模糊——需明确将已生成内容作为 assistant 角色的前缀消息构造到 messages 数组,而非当成新 prompt
  • 未提及系统提示("不重复、继续生成")
  • 未提及 reader.cancel() 资源释放
  • 未提及前端状态机设计

Improved Answer

AbortController 中断 fetch/SSE 请求,同时将已生成的文本保存在 state 中。恢复时,将原始用户消息 + 已生成内容作为 assistant 的前缀消息重新构造 messages 数组,附加系统提示要求模型"不重复、继续生成",再发起新的流式请求。前端维护 idle / streaming / paused / resuming 四个状态控制 UI 行为,流关闭时调用 reader.cancel() 释放资源。