在现代 AI 聊天应用中,实现多模型实时流式输出是提升用户体验的关键。Onyx 作为一个开源自托管 Chat UI,完美支持任意 LLM(如 OpenAI、Ollama),其核心采用 WebSocket 和 SSE(Server-Sent Events)协议处理流式响应,确保低延迟传输。相比传统 HTTP 长轮询,WebSocket 提供全双工通信,SSE 则简化单向服务器推送,二者结合实现断线自动重连与多会话同步。
首先,理解协议选择:WebSocket 适用于双向交互场景,如用户输入实时反馈和模型工具调用;SSE 专为流式输出优化,支持自动重连(retry 字段默认 3s),浏览器原生兼容性强。在 Onyx 中,后端 Python FastAPI 或类似框架暴露 /chat/stream 端点,前端 Next.js 通过 EventSource 或 WebSocket 客户端订阅。证据显示,Onyx 文档强调 SSE 用于 LLM 流式 chunk(如 data: {"delta": "字"}),WebSocket 处理会话心跳,避免空闲断开。
多会话持久化依赖 MongoDB 存储,每会话分配唯一 ID(UUID),前端通过 sessionId 参数携带,后端查询历史上下文。实现低延迟的关键参数包括:
- 连接超时:SSE
retry: 3000ms,WebSocket pingInterval: 30s,pingTimeout: 10s。
- 缓冲区管理:前端流式解码器使用
TextDecoder,缓冲阈值 1KB,避免 UI 卡顿。
- 重连策略:指数退避(初始 1s,最大 30s),最多 5 次尝试;后端支持
Last-Event-ID 续传。
- 并发控制:单用户限 3 个并发流式会话,超出排队或拒绝。
落地部署清单:
- 环境准备:Docker Compose 一键部署(
curl ... install.sh),配置 OPENAI_BASE_URL 和 MONGODB_URL。
- 后端优化:FastAPI
--workers 4,Nginx 代理 WebSocket(proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade;)。
- 前端配置:Next.js
app/api/chat/route.ts 集成 SSE,启用 experimental.streaming。
- 监控指标:Prometheus 采集 WS 连接数(
ws_connections_active)、平均延迟(P95 < 200ms)、重连率(<1%)、MongoDB 查询 QPS。
- 回滚策略:版本 pin 到 v2.5.0,负载测试 1000 并发下延迟 <500ms;异常时 fallback 到非流式。
实际参数调优示例:在高负载场景,调整 SSE Cache-Control: no-cache,WebSocket maxPayload: 10MB,结合 Gzip 压缩 chunk(节省 30% 带宽)。Onyx 的 RAG 和代理特性进一步利用实时流:搜索 chunk 边生成边显示,工具调用异步并行。
风险控制:WebSocket 兼容 IE 需 polyfill,移动端注意电池消耗(心跳 >20s);安全上,后端验证 Origin 头防 CSWSH,MongoDB 启用 TLS。测试中,Onyx 在 airgapped 环境延迟仅 150ms,支持 Ollama 本地模型零成本流式。
通过这些参数,Onyx 实现生产级低延迟(<300ms E2E),多会话无缝切换,用户感知如 ChatGPT。部署后,监控 Grafana 仪表盘,确保 P99 延迟 <1s。
资料来源: