流式输出要分投影
Agent 产品的流式输出不要再把后端事件日志直接甩给前端,而要先投影成“消息、工具调用、状态变化”这几类稳定视图。最近 LangGraph SDK 0.4.x / LangGraph 1.2.3 把 v3 streaming、SSE/WebSocket transport、messages 和 tool call projections、interleave projections 连续补上;AG-UI 也在 5 月底到 6 月初持续发布 LangGraph 适配包。这说明前端 Agent 体验正在从“显示 token”走向“消费可组合的交互事件”。
机制上,原始 stream 是执行轨迹:节点开始、模型增量、工具参数片段、工具结果、取消、重连、子图事件……这些对调试有用,但不适合作为产品 API。产品真正需要的是投影:当前用户能看到哪条 assistant message、哪个 tool call 正在等待/执行/完成、哪个子 agent 在说话、哪些状态可以被恢复。投影层一旦稳定,后端可以从 SSE 换到 WebSocket,可以把单 agent 换成 RemoteGraph 或子 agent,前端仍然只处理同一套语义事件。
对 OPC 这类系统尤其关键:如果把“订单查询 agent 调了库存工具”直接编码成 UI 特例,后面一加审批、人审、回滚或多 agent 协作,界面就会被执行细节绑死。更好的做法是把流式协议当成产品边界:message projection 负责可读叙事,tool-call projection 负责可观测和权限提示,state projection 负责恢复与审计;raw trace 只进日志和回放。
常见误区是以为流式只是降低首 token 延迟。真正的工程价值是让长任务可解释、可中断、可恢复、可迁移。你现在的 Agent UI 如果明天换掉编排框架,前端消费的是“语义投影”,还是某个框架泄漏出来的事件名?
来源:
- LangGraph SDK 0.4.0 release:新增 thread stream helpers、WebSocket stream transports、stream reconnect、messages/tool calls 等 stream primitives。
- LangGraph 1.2.3 release:RemoteGraph v3 streaming、tool-dispatched subagent naming、interleave projections。
- AG-UI release 2026-06-02:发布 @ag-ui/langgraph 0.0.36、ag-ui-protocol 0.1.19;README 将 AG-UI 定义为连接 agent 与用户应用的轻量事件协议。