【AI大模型接入SDK】SSE协议 个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录1 ~ SSEServer‑Sent‑Events服务器发送事件协议1.1 背景HTTP 原生模型的局限1.1.1 HTTP 基础模型特性1.1.2 原始折中方案轮询Polling1.1.3 SSE 发展历史2 ~ SSE 协议核心定义2.1 SSE 核心特点2.2 SSE HTTP 报文规范2.3 SSE 事件数据格式3 ~ SSE 大模型流式交互实践3.1 业务原理3.2 API 工具Apifox观测现象4 ~ SSE 与 WebSocket 核心对比面试高频5 ~ 核心易错点总结结尾1 ~ SSEServer‑Sent‑Events服务器发送事件协议1.1 背景HTTP 原生模型的局限1.1.1 HTTP 基础模型特性HTTP 为严格 ** 请求‑响应一问一答** 模型仅客户端发起请求服务端才能返回响应服务端无法主动向客户端推送数据。HTTP 具备无状态特性两次独立请求响应之间不存在上下文关联。适用场景普通网页访问、表单提交等绝大多数业务。不适用场景需要服务端主动推送实时数据的业务体育赛事实时比分推送多人联机游戏状态同步导航实时信息下发大模型流式输出对话内容1.1.2 原始折中方案轮询Polling实现逻辑客户端周期性主动向服务端发起 HTTP 请求拉取最新数据并非服务端真正主动推送。缺陷大量无效请求多数请求到达服务端时并无新数据产生浪费网络、服务端资源。实时性差数据更新时刻与客户端拉取时刻存在时间窗口。例轮询间隔 10s数据第 11s 更新客户端最早第 20s 才能拿到数据最大延迟接近轮询周期。1.1.3 SSE 发展历史2004 年 Ian Hickson 提出 SSE 概念Opera 浏览器首个实现支持2011 年 Chrome、Firefox、Safari 主流浏览器陆续支持2015 年 SSE 正式成为 W3C 标准大模型行业爆发后流式对话场景带动 SSE 大规模落地2 ~ SSE 协议核心定义SSE 全称 Server‑Sent Events服务器发送事件是构建在标准 HTTP 之上的 W3C 规范实现服务端单向向客户端推送实时数据。通信模型建立单条持久长连接客户端仅发起一次 HTTP 请求后续由服务端持续向客户端推送数据分片客户端不再发送请求。重要特性单向通信仅服务端 → 客户端客户端不能通过 SSE 通道回传数据客户端如需向服务端发送新数据必须新建独立 HTTP 请求。适配大模型流式对话场景用户发送一次提问请求大模型分片返回输出内容完美匹配 SSE 单向长连接模型。2.1 SSE 核心特点基于标准 HTTP 协议无需新增协议、不需要额外端口配置浏览器原生兼容实现成本低。单向通信服务端推送至客户端客户端无回传能力。轻量级代码实现简单适合简单实时推送场景。浏览器自动重连网络断开后浏览器原生自动尝试重建长连接业务代码无需手写重连逻辑。支持自定义事件类型服务端指定event字段客户端可按事件类型做不同业务处理。支持消息 ID每条消息携带唯一 id断线重连后客户端携带最后收到的消息 id服务端可恢复断点消息流。支持自定义重连间隔retry字段。2.2 SSE HTTP 报文规范请求侧客户端发起普通 HTTP 请求通常携带业务标识例如stream:true告知服务端期望开启流式 SSE 返回。响应头服务端必须设置Content-Type: text/event-stream Connection: keep‑alive Cache-Control: no-cacheContent-Type: text/event‑streamMIME 类型标记标识这是 SSE 事件流Connection: keep‑alive维持长连接Cache‑Control: no‑cache禁止缓存事件流数据。2.3 SSE 事件数据格式每条事件流由多行字段组成事件块以连续两个换行符\n\n作为结束分隔符。字段是否必须含义data:必须事件承载的业务消息内容event:可选自定义事件类型客户端监听对应事件回调id:可选消息唯一 ID用于断线断点续传retry:可选单位毫秒浏览器断开后重连等待时间示例原始 SSE 数据流data: 春眠 event: message id:123retry:10000data: 不 event: message id:123retry:10000data: 觉晓 event: message id:123retry:10000data:[DONE]data: [DONE]为业务层约定结束标记代表本次完整数据流推送完毕浏览器本身协议层面没有规定该标记属于上层业务约定各大模型 API 通用约定。注意现实工程实现中部分大模型 API 没有严格完全遵循 SSE 标准字段格式会自定义 payload 结构例如直接在 data 内部封装 JSON 字符串属于业务层扩展。3 ~ SSE 大模型流式交互实践3.1 业务原理全量返回模型计算完成后一次性返回全部结果适合生成图片、报表等场景缺点是用户等待时间长。流式响应SSE客户端发起一次请求大模型边计算边分片输出 token服务端通过 SSE 长连接持续把分片推送给客户端用户可以实时看到输出降低等待感知。3.2 API 工具Apifox观测现象请求参数设置stream:true开启流式返回。响应流持续输出一块块 JSON 分片 chunk每个分片携带增量输出内容。流末尾收到业务标记data: [DONE]代表本轮对话流式输出结束。消息 ID同一次会话流使用同一个消息 ID用于断线恢复。注意标准 SSE 协议中data字段是纯文本大模型工业 API 会把 JSON 字符串放在data:后面属于业务封装。4 ~ SSE 与 WebSocket 核心对比面试高频SSE传输层基于原生 HTTP 协议通信方向单向仅服务端向客户端发送数据浏览器能力原生自带自动断线重连部署无需特殊代理复用 HTTP 端口适用场景大模型流式输出、消息通知、比分推送服务端单向下发场景局限客户端无法在已有连接上发送数据WebSocket传输层HTTP 完成握手后升级为 ws/wss 自定义协议通信方向全双工客户端与服务端双向互相收发消息浏览器能力无内置重连业务代码手动实现重连逻辑部署部分反向代理需要额外配置适用场景聊天室、多人游戏、需要双向交互实时业务局限实现复杂度更高5 ~ 核心易错点总结SSE 不是独立传输协议是 HTTP 之上的应用层规范不能脱离 HTTP 运行。SSE 单向指通信通道单向客户端要发新数据必须新建 HTTP 请求不能复用 SSE 长连接发送上行数据。[DONE]不是 SSE 协议标准是大模型 API 行业业务约定不同厂商实现可以变更。轮询是客户端不断拉取SSE 是建立长连接服务端主动推送二者底层模型本质不同。SSE 消息 ID 作用断线重连客户端携带Last‑Event‑Id请求头服务端据此补发丢失事件实现断点续流。结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【AI大模型接入SDK】DeepSeek API 基础概述博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა