使用 SSE 驯服 AI 延迟

我开发了一个 AI 自动补全功能。用户非常讨厌它。

每一次按键都会触发一次 AI 请求。用户需要等待 2 到 3 秒才能得到完整的 JSON 响应。UI 感觉像是坏了一样。我尝试了防抖(debouncing)和缓存,但都没用。核心问题依然存在:在整个答案到达之前,用户什么也看不到。

我通过使用 Server-Sent Events (SSE) 来逐块流式传输响应,解决了这个问题。

旧的工作流程如下:

  • 用户输入
  • 300ms 防抖
  • HTTP POST 请求
  • AI 处理(1-2 秒)
  • 服务器返回完整响应
  • 客户端渲染

用户会盯着空白屏幕看好几秒。即使有加载动画(loading spinner),感觉还是很慢。

我考虑过轮询(polling)或 WebSockets。轮询的开销太大。而对于单向流来说,WebSockets 又太重了。

我选择 SSE 的原因是:

  • 它是从服务器到客户端的单向工作模式
  • 它使用简单的文本和 JSON 数据块
  • 如果连接断开,它会自动重连
  • 你的服务器不需要安装额外的库

结果改变了一切:

  • 首个视觉响应时间:从 2.1 秒降至 0.3 秒
  • 用户参与度:提升 40%
  • 用户投诉:零

流式传输关乎感知。渐进式 UI 比静态 UI 感觉更快。用户更喜欢看到单词一个接一个地出现,而不是等待一大块文本。

如果你的 AI 响应非常短,那就坚持使用标准请求。如果你需要双向通信,请使用 WebSockets。但对于大多数 AI 流式传输需求,SSE 是最佳选择。

你在应用中是如何处理 AI 延迟的?你是采用流式传输,还是等待完整响应?

原文:https://dev.to/__c1b9e06dc90a7e0a676b/taming-ai-latency-streaming-responses-with-server-sent-events-42d5