主题
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、供应商响应或内部异常堆栈。