Hotdry.
ai-systems

Onyx 聊天 UI 实时 WebSocket/SSE 多模型流式与会话持久化

开源 Onyx Chat UI 通过 WebSocket/SSE 实现多模型实时流式输出、多会话持久化和低延迟处理,提供工程参数配置与监控要点。

在现代 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: 30spingTimeout: 10s
  • 缓冲区管理:前端流式解码器使用 TextDecoder,缓冲阈值 1KB,避免 UI 卡顿。
  • 重连策略:指数退避(初始 1s,最大 30s),最多 5 次尝试;后端支持 Last-Event-ID 续传。
  • 并发控制:单用户限 3 个并发流式会话,超出排队或拒绝。

落地部署清单:

  1. 环境准备:Docker Compose 一键部署(curl ... install.sh),配置 OPENAI_BASE_URLMONGODB_URL
  2. 后端优化:FastAPI --workers 4,Nginx 代理 WebSocket(proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade;)。
  3. 前端配置:Next.js app/api/chat/route.ts 集成 SSE,启用 experimental.streaming
  4. 监控指标:Prometheus 采集 WS 连接数(ws_connections_active)、平均延迟(P95 < 200ms)、重连率(<1%)、MongoDB 查询 QPS。
  5. 回滚策略:版本 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。

资料来源:

查看归档