Agent高频送分题:为什么AI Agent多用SEE?以及SSE和WebSocket技术选型

为什么你这个Agent项目选择用 SSE 而不是 WebSocket?是怎么考虑的技术选型

在最近的 AI Agent 相关面试中,我发现这是一个必考的“送分题”。如果仅仅背诵“SSE 是单向、WebSocket 是双向”这类基础定义,很难打动面试官。

面试官真正想考察的,是你对业务场景的适配能力以及对网络协议架构的深度思考。以下是我总结的深度回答思路。

一、 核心分歧点:场景驱动选型

在面试中,我通常会先抛出一个观点:没有最好的协议,只有最适合业务的协议。

  • SSE (Server-Sent Events):本质是基于 HTTP 的“长轮询升级版”。服务器在处理完请求后,保持连接开启,不断推送数据(流式)。
  • WebSocket:一个独立的 TCP 全双工协议。客户端和服务器可以随时随地相互“插话”。

二、 为什么在 AI Agent 中 SSE 是首选?

大部分 AI Agent(如智能对话助手)的核心诉求是 “流式输出(Streaming)” ,即大模型生成内容的速度较慢,前端需要逐字显示。此时使用 SSE 具有显著优势:

  1. 协议轻量,兼容性好:SSE 基于标准 HTTP。在大多数企业架构中,负载均衡器(Nginx, HAProxy)对 HTTP 的支持非常完善,不需要特殊的协议升级配置。
  2. 自带“重连”特性:SSE 协议标准中内置了 Last-Event-ID,当网络发生抖动断开时,浏览器会自动尝试重连并请求断点续传。这在弱网环境下对 AI 对话体验极其重要。
  3. 开发运维成本极低:后端只需将响应头设置为 Content-Type: text/event-stream,无需维护复杂的心跳检测(Heartbeat)机制。

三、 什么时候必须“弃 SSE 投 WebSocket”?

当面试官追问“什么时候必须用 WebSocket”时,我会列举以下场景:

  • 真正的双向实时性:如果 AI Agent 需要支持 “语音实时打断” 功能。用户在说话时,必须立即向服务器发送中止指令,此时 SSE 的单向性无法满足,必须使用 WebSocket 实现全双工通信。
  • 高频交互与多端协同:如果 AI Agent 不仅仅是问答,还涉及到多人同时操作一个画布、实时状态同步,WebSocket 的低延迟和双向控制能力是 SSE 无法替代的。
  • 复杂二进制传输:WebSocket 支持二进制帧传输,如果业务涉及实时流式处理音频、视频或复杂的 protobuf 数据,WebSocket 的效率会更高。

四、 面试总结:我的回答模板

在面试回答时,我会采用 “结论先行 + 场景对比 + 进阶思考” 的逻辑:

“在 AI Agent 的开发中,我倾向于优先选择 SSE,因为大模型对话本质上是基于 HTTP 的单向流式渲染,SSE 能够以最小的运维成本实现流畅的‘打字机效果’,且自带重连,用户体验极佳。

但如果业务进入了 ‘实时交互’(如语音对话打断)‘多端协同’ 阶段,我会切换为 WebSocket。因为此时我们需要双向的高频交互,SSE 的单向性会成为架构的瓶颈。

此外,我认为技术选型还应考量运维复杂性。SSE 在 Nginx 等中间件配置上非常简单,而 WebSocket 需要考虑连接保活(心跳包)、多实例下的 Session 同步等问题,如果不是刚需,我会尽量规避 WebSocket 的复杂性。”

#AI求职记录##AI求职实录##面试题刺客退退退#
全部评论
感觉好多面经都只说协议,没人讲具体的业务考量啊
点赞 回复 分享
发布于 昨天 13:50 吉林
SSE那种打字机效果真的解压
点赞 回复 分享
发布于 昨天 13:50 北京
emmm,要是业务涉及多人同时操作画布还要边聊边画,这种场景下SSE是不是就完全没戏了?
点赞 回复 分享
发布于 昨天 13:48 北京
确实啊,之前我用WebSocket做流式输出,光心跳检测就写了一大堆代码,麻了简直
点赞 回复 分享
发布于 昨天 13:47 山东
大佬,那你在项目里写SSE重连的时候,Last-Event-ID这个细节面试官真的会问这么细吗?
点赞 回复 分享
发布于 昨天 13:46 北京

相关推荐

昨天 09:49
已编辑
门头沟学院 Java
ttl: 3.19一面晚上过3.20二面晚上过3.23oc3.25offerbase:末9有一段中小厂实习一面面经:(总体时长一个小时二十分钟左右没什么八股,主要都是问项目和场景题1.实习(问了有四十分钟,感觉面试官很看重实习这一块,一直在拷打,问到后面我都要疯了,好在准备得比较充分1️⃣用的是什么中间件,有参与技术选型吗,实习的项目里为什么选这个RabbitMQ而不是kafka,为什么不用RocketMQ,为什么放弃异步,自己的项目里面使用的是kafka,那你觉得项目和实习的中间件选型有差异的原因是什么,他们之间的区别在哪里,底层的原因知道吗(高柱到这里已经快疯了,但是硬着头皮答完了,主要是从一致性吞吐量和框架的契合度答,面试官说答得挺好的,应该是没什么问题,这一块就问了快半个小时,到这里我已经快疯了2️⃣项目怎么对接上下游3️⃣介绍项目的难点重点4️⃣微服务(高柱实习是单体项目没涉及这一块5️⃣Redis的使用2.项目:1️⃣智能客服是怎么应用在项目里的(langchain4j➕rag➕functioncalling)2️⃣RAG了解多少3️⃣文本向量化的难点是什么,了解哪些大模型的知识(我一点不懂,纯瞎扯,但貌似扯对了4️⃣对ai的态度是什么,aicoding相关5️⃣怎么保证多节点下Caffeine缓存里面数据都是一致的(答的是短ttl,面试官不是很满意,但是我确实不太懂这个怎么保证,后来查了还是不懂怎么保证6️⃣Redis的使用,和你的实习项目的使用有区别吗,还有一些引申问题3.八股(含量不高,就是走个过场1️⃣进程的内存布局2️⃣Redis三剑客3️⃣微服务相关知识(高柱已经忘得差不多了…勉强答上来4️⃣JVM5️⃣线程状态6️⃣线程安全,在你的实习项目里怎么保证线程安全的(又绕回来了4.智商题找异常球5.手撕:1️⃣五道sql,不难2️⃣力扣不重叠的滑动窗口数组,贪心➕双指针秒了强度拉满了这个一面,高柱到后面人都是傻的二面面经:(就半个小时实习拷打,简历上写了几点就问了几点,问完就结束了,无手撕
查看17道真题和解析
点赞 评论 收藏
分享
评论
5
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务