Skip to content

SSE 实时进度事件应该包含什么,为什么不能直接把日志推给前端?

题型:追问 · 重点回答稳定契约、顺序、重连和信息边界。

建议回答

SSE 事件应该是面向业务的稳定协议,而不是内部日志文本。公共字段至少包括 eventId、jobId、entityType、entityId、stage、eventType、status、sequence、attempt、timestamp 和可展示的摘要;进度事件可带当前值与总量,失败事件要给可公开的 errorCode、是否可重试和建议动作,完成事件要带最终状态与产物查询入口。

同一 Job 内用单调 sequence 保证客户端能排序和去重,Next.js 重连时携带 Last-Event-ID,服务端可以重放保留事件,或先返回状态快照再接增量。日志包含内部堆栈、Prompt、模型参数或敏感数据,格式也会随实现变化,直接推送会造成安全风险和前后端强耦合。SSE 只有服务端到客户端方向,暂停、取消和重跑仍应走有鉴权与幂等控制的命令接口。

进一步追问

  • 高频 token 或细粒度进度是否每条都要持久化?
  • 客户端错过中间事件后,怎样确认任务已经完成?

易错点

  • 不要把 sequence 说成全系统全局有序,通常只需在单个 Job 或流分区内有序。
  • 不要在 error 事件中泄露原始 Prompt、供应商响应或内部异常堆栈。

知识关系

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