Skip to content

Reactor Flux 与 SSE 的统一事件模型应该怎样设计?

题型:深入 · 事件不仅包含文本 Token,还要能表达完整 Agent 生命周期。

建议回答

我会定义统一的 AiStreamEvent,公共字段包括 eventId、runId、sequence、timestamp、nodeId、type 和 traceId。事件类型至少覆盖 run_started、node_started、model_delta、tool_call、tool_result、retrieval_result、checkpoint、warning、error 和 run_completed;不同事件的 payload 使用明确 Schema 和版本号。

后端将模型流、图节点状态、检索和工具事件合并为 Flux,按每个 run 保证 sequence 有序,再映射为 SSE。业务异常尽量转成结构化 error 事件后正常结束流,基础连接异常则由 HTTP 层处理。敏感工具参数、内部 Prompt 和文档权限字段在进入事件流前脱敏。

设计细节

  • 心跳事件防止代理和网关把空闲连接关闭。
  • generationId 区分模型重试或切换后的新输出段。
  • run_completed 包含最终状态和统计,客户端不能只靠连接关闭判断成功。
  • 可观测事件与可恢复 Checkpoint 有关联,但二者不是同一份数据。

易错点

  • SSE 只有服务端到客户端方向,不适合代替所有双向交互。
  • 不能让并行 Flux 合并后破坏同一运行的关键事件顺序。

知识关系

从当前问题继续深入,或者回到提出这个问题的知识入口。