打开网易新闻 查看精彩图片
做AI Agent界面的团队,最后都会在同一块石头上绊倒。Praxiom团队做了36个工具之后,决定不再给SSE代码打第15个补丁——他们坐下来写了一个真正的协议。
打开网易新闻 查看精彩图片
问题出在四个反复出现的bug上。第一个是块边界:本地开发时,event:和data:总是同时到达,你的解析器看起来工作正常。但生产环境有网络延迟、代理、nginx,事件和数据可能被拆成两个chunk。你的代码在第一个chunk后重置了currentEvent,第二个chunk到达时,事件类型已经丢失,token就这样悄无声息地消失。凌晨2点的告警就是这么来的。
打开网易新闻 查看精彩图片
第二个bug更隐蔽。Claude 3.5 Sonnet每秒吐25-35个token,每个都触发setState,那就是每秒30次渲染。React的并发模式在高频下并不可靠,结果就是肉眼可见的卡顿,低端设备直接掉帧。解法很简单:攒50毫秒批量刷新,但大多数人直到用户投诉才意识到问题。
Praxiom的工程师在复盘里写了一句很直白的话:「我们之前每次都在修补症状,而不是承认SSE从来不是为这种场景设计的。」他们最后把经验抽成了一个协议,核心就一条——currentEvent必须跨chunk存活,而不是在每个read()里重生。
现在他们的Agent UI在凌晨2点也能正常流式输出了。代价是36次试错,和无数个被SSE"静默吞掉"的token。
热门跟贴