项目中 SSE 推送什么数据,采用什么格式?
未标记
考查重点:进度事件与任务结果关联。按任务推节点进度、文本片段和完成/错误事件,定义 event/id/data 与结构字段,结果用稳定任务标识关联
本题目录
参考答案
本答案基于相关资料,由 AI 辅助编写,供学习与面试准备参考。如有疏漏,欢迎反馈指正。
核心回答
问数接口通过 SSE 推送节点进度、最终查询结果和错误信息,既能展示处理过程,也能承载结构化结果。现有教程用每条事件的 data 承载一个 JSON 对象,通过 type=progress/result/error 区分业务消息。
事件格式和业务字段应分层约定:event 表示可选的事件类型,id 表示可选的恢复序号,data 才是业务内容。任务标识应在请求和消息之间保持一致;事件序号与任务标识各有用途,不能互相替代。
用一条请求讲清数据格式
下面是可扩展的协议示例,taskId、seq 和恢复能力需要业务系统另行实现:
id: task-42:3
event: progress
data: {"taskId":"task-42","seq":3,"type":"progress","step":"生成SQL","status":"running"}
id: task-42:4
event: result
data: {"taskId":"task-42","seq":4,"type":"result","resultUrl":"/tasks/task-42/result"}
进度说明“当前在做什么”,结果说明“完成了什么”。结果较大时,推送结果摘要和可查询地址,避免长连接一次携带大量明细。错误事件提供稳定错误码、用户可理解的信息和是否可以重试,详细堆栈留在服务端日志。
实际项目里还要说清什么
教程中的查询接口由当前请求驱动图执行,按 progress/result/error 返回事件。若要在断线后继续订阅,需要另外保存任务状态与事件日志,根据恢复游标补发,并由客户端处理重复事件。
心跳与业务进度分开:心跳只说明连接仍有数据经过,不代表检索或模型任务有进展。节点开始、结束和失败事件应带上同一任务的关联标识,才能把前端展示与后端排障连起来。
对应教程
- 电商问数第15章:API接口基础与FastAPI入门:回看流式响应与
SSE消息格式。 - 电商问数第17章:前后端联调与日志追踪:回看
progress、result、error的前后端约定。
参考资料
- 国内:阿里云:传统 HTTP 模式与 SSE:采用外层事件字段与内层业务
JSON分离的格式,组织消息示例。 - 国内:阿里云百炼:流式输出:采用增量内容和最终结束信号的区分,说明不能只依靠连接关闭表示成功。
- 国内:CloudWeGo:Hertz SSE:核对事件类型与标识的读写位置,区别任务ID与事件ID。
- 国内:阿里云点金:Agent 事件数据模型:借鉴进度、工具、完成和失败事件分别表达的方式,解释业务协议需要约定哪些内容。
- 国外:WHATWG:Server-sent events:核对
event/id/data、空行以及注释的标准行为,避免把业务type说成标准字段。 - 国外:Microsoft:Fetch Event Source:采用客户端可按响应状态与业务终态分类处理的机制,说明业务错误不能只依赖
HTTP状态。
