找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4257

积分

0

好友

555

主题
发表于 3 小时前 | 查看: 3| 回复: 0

面试官问:“做一个 AI 客服,答案要逐字出来,用户能随时打断,以后还要加实时语音。通信方案怎么设计?”

你答:“上 WebSocket,一条长连接全搞定。”

面试官把笔放下:“登录、上传头像、查聊天记录也走 WebSocket?下个需求是不是让它顺便煮咖啡?”

这句追问就是题眼:面试官不是让你给四种协议排座次,而是看你会不会 先拆需求

01 REQUIREMENT —— “实时”不是 WebSocket 的通行证

AI 客服里的“实时”,至少藏着四种完全不同的动作:

  • 用户提交一个问题;
  • AI 持续输出文字;
  • 用户偶尔点一次停止;
  • 用户和 AI 低延迟语音通话。

选协议前,你得先问:谁在给谁发?发得有多频繁?传的是文字还是音视频?断线后要不要重连和补发?

这四个问题问完,协议往往自己就站好队了。

02 REQUEST —— HTTP:别嫌它朴素,大部分活还得它干

第一版客服只有一问一答。用户发问题,AI 返回完整结果:

POST /runs 创建任务,GET /runs/{id} 查状态。上传文件、查记录、登录鉴权,也继续走 HTTP

HTTP 像办事窗口:提交请求、返回结果、结束本次交互。它很适合 有明确业务动作的一问一答

它成熟、容易监控,鉴权、重试、日志和网关都有现成方案。

还有一个常见误区:HTTP 不是只能憋到最后一次性返回。 响应体完全可以边生成边传输。SSE 也不是 HTTP 的竞争对手,它本来就是 跑在 HTTP 上的一种事件流格式

把 HTTP 和 SSE 当成二选一并不准确:一个是通信基础,一个是在 HTTP 响应上组织事件的方式。

03 STREAM —— SSE:AI 负责说,你先安静听

第二版要求答案逐字出现。此时大部分数据都是 AI 发给浏览器,用户只负责接收,SSE 正合适。

你可以把它想成一条 单向传送带。AI 每生成一段,就放上一张卡片:text_delta 是文字,tool_status 是工具状态,error 是报错,done 表示“本次唠完”。

SSE 是事件格式;EventSource 和 Fetch 才是浏览器读取它的方式。EventSource 适合 GET 订阅,支持自动重连和 Last-Event-ID;需要 POST、请求体或自定义请求头时,可以用 Fetch 读取并解析 SSE。

SSE 在 HTTP/1.1 上也能用,不是非 HTTP/2 不可。但并发会话多、标签页多,并且部署链路支持 HTTP/2 时,多路复用 能让多条 SSE 流共享连接,少在连接数上打架。

上线后还要防三个坑:代理缓冲 会把逐字输出攒成一坨;空闲连接可能被网关掐掉;断线续传要求服务端保留事件,客户端还要去重。

有时 AI 并没有“思考五秒”,只是 Nginx 在门口攒够一袋字才放行。

04 CANCEL —— 一个停止按钮,还不配拥有整条 WebSocket

第三版增加“停止生成”。

很多人看到“打断”又激动了:这次总该用 WebSocket 了吧?

未必。用户只点一次停止,本质上是一条 低频命令POST /runs/{id}/cancel 就能完成,而且鉴权、重试和审计都更直接。

更重要的是,关闭 SSE 或终止 Fetch,只表示 前端“不听了”,并不代表 后台“不干了”。模型可能还在生成,工具可能还在查库存,账单也可能还在微笑。

正确做法是:创建任务时返回 run_id;前端停止读取;同时调用取消接口,让 取消信号一路传到模型和工具执行层

停止接收和停止执行,是两件事。 这句话比“我会 WebSocket”值钱得多。

05 DUPLEX —— WebSocket:双方都话多,再把对讲机发下来

如果 AI 在执行中不断追问,用户又持续修改参数;或者场景是协同编辑、游戏操作、远程设备控制,双方都要频繁主动发消息,WebSocket 才真正舒服。

WebSocket 通常先借 HTTP 完成握手,之后进入 持久的双向消息通道。两边都能随时讲话,不需要每条消息都重新走一遍 HTTP 请求与响应语义。

但对讲机发下去,不代表通信秩序自动出现。消息类型、请求编号、确认、幂等、心跳、重连、补发和背压,一个都不会凭空长出来

如果客户端只有一个偶尔触发的停止按钮,单独的 HTTP 取消接口通常更简单。

06 REALTIME MEDIA —— WebRTC:语音不是更大的文字包

第四版要加语音,仍然不能听见“音频”就条件反射。

上传一段录音,HTTP 足够;简单地把音频片段持续发给服务端,WebSocket 也能做。

可一旦要求 用户边说、AI 边回,还能随时插话,并且要处理弱网、抖动、丢包和网络穿透,这就进入 WebRTC 的主场了。

WebRTC 面向 实时音视频和数据通道。它不是“跑得更快的 WebSocket”,而是在解决 通话质量问题

它也不会单打独斗。WebRTC 不规定业务信令协议,应用通常还要通过 HTTP 或 WebSocket 交换 SDP 和 ICE candidates。ICE 负责寻找并检查可用路径,STUN 帮助端点发现公网映射,直连失败时再由 TURN 中继流量。

07 DECISION —— 面试官最后问:所以到底选哪个?

你可以这样回答:

我会先按 通信方向、消息频率、数据类型和恢复要求 拆链路。创建任务、查询状态、上传文件和取消任务走 HTTP;AI 的文字增量主要是服务端单向输出,用 SSE;只有双方频繁主动通信时,才增加 WebSocket;到了可插话、低延迟的通话级语音,再用 WebRTC 传媒体,并让 HTTP 或 WebSocket 负责信令。

如果并发 SSE 流比较多,部署链路支持时会利用 HTTP/2 多路复用,同时处理 代理缓冲、心跳和事件重放。用户点击停止时,前端断开流之外,还必须调用取消接口,确保后台任务真的停下。

换句话说:HTTP 管办事,SSE 管 AI 往外说,WebSocket 管双方频繁聊,WebRTC 管实时通话。

面试官想听的从来不是“我全都会用”,而是“它们别抢活,我知道谁该干什么”。如果你也遇到过协议选型上的纠结,不妨到 云栈社区 看看更多同行的实战经验。




上一篇:AI时代核心竞争力重塑:唐杰谈认知>格局>技术>管理的底层逻辑
下一篇:MCP协议2026为何删除Session?从有状态到无状态的架构演进
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-8-2 05:08 , Processed in 1.153743 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表