← 返回文章列表
031 — 后端 · #SSE #FastAPI · 2026-08-16 · 2 MIN READ
SSE 流式输出:从原理到 FastAPI 实现
AI 问答的首字响应时间直接决定用户体验。LLM 生成完整回答可能要 10 秒,但首字只要 1 秒——SSE 让用户从第 1 秒就开始读。
SSE 是什么
Server-Sent Events 是基于 HTTP 的单向推送协议:响应头声明 text/event-stream,之后服务器可以持续推送 data: 行。相比 WebSocket 它不需要协议升级,天然支持重连,对「服务器单方面输出」的场景刚刚好。
FastAPI 实现
python
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
@app.post("/api/chat")
async def chat(req: ChatRequest):
async def stream():
async for token in llm.astream(prompt):
yield f"data: {token}\n\n"
return StreamingResponse(stream(),
media_type="text/event-stream")
前端注意点
EventSource 不支持 POST,所以聊天接口要用 fetch + ReadableStream 手动解析 SSE 帧。另外 Nginx 反代时必须关掉响应缓冲(proxy_buffering off),否则流式会变成「一次性返回」。
Comments