PaiSmart面试题预测:WebSocket、客户端掉线重连、Elasticsearch、并发上传分片、Kafka、context、LLM切换
1. WebSocket 流式对话与主动中断
简历描述
基于 WebSocket 实现全双工流式对话,后端通过 WebFlux 的 Stream 接入 DeepSeek 等 LLM 的 SSE 流,实现逐字输出;支持用户主动中断,后端同步取消 LLM 侧的流式连接,避免错误提示词下的 Token 消耗;整体首字响应延迟控制在 500ms 以内。
面试提问
Q1: 为什么选择 WebSocket 而不是 SSE 来实现流式对话?
考察点:WebSocket vs SSE 的技术选型
参考答案:SSE 是单向通道(服务端→客户端),无法在流式输出过程中接收客户端的中断指令;WebSocket 是全双工通信,客户端可以在接收流式输出的同时发送 stop 命令。此外 WebSocket 支持心跳保活(ping/pong),更适合长连接场景。
Q2: 用户点击"停止生成"后,后端做了哪些事情确保 LLM 也停下来?
考察点:流式中断的完整链路
参考答案:分三步
(1) 在 stopFlags 中标记该 generationId 为已取消;
(2) 从 activeStreams 中取出 StreamHandle,调用 cancel() 方法,内部调用 Reactor Disposable.dispose() 断开与 LLM API 的 HTTP 流连接;
(3) 对关联的 CompletableFuture 调用 completeExceptionally(CancellationException) 唤醒完成监控线程,向客户端推送 {type:"stop"}。
源码位置:ChatH...
真诚点赞 诚不我欺
回复