千问怎么实现流式输出SSE?流式响应接口接入与前端展示方案

梦静君_3072

梦静君_3072

2026-05-27

641人浏览

原创

需通过sse协议调用通义千问流式接口:一、请求中设stream:true并验content-type;二、前端用eventsource接收解析;三、fetch+readablestream手动处理;四、node.js代理转发避cors;五、前端节流批量渲染防抖。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

千问怎么实现流式输出sse?流式响应接口接入与前端展示方案

如果您希望在调用通义千问API时获得逐字生成的响应效果,而非等待完整文本一次性返回,则需通过Server-Sent Events(SSE)协议接入其流式响应接口。以下是具体实施路径:

一、启用 API 请求的 stream 参数

流式输出的前提是向服务端明确声明需以流式方式接收响应。通义千问兼容 OpenAI-style 接口,设置 stream: true 可触发服务端分块推送行为。

1、构造 JSON 请求体,在顶层字段中添加 "stream": true;

2、确保请求 Header 中包含 Content-Type: application/json 与有效的 Authorization 凭据;

3、发起 POST 请求至 /v1/chat/completions 等支持 streaming 的端点;

4、验证服务端响应头中包含 Content-Type: text/event-stream;

二、使用 Server-Sent Events (SSE) 协议接收

SSE 是浏览器原生支持的单向流协议,适用于服务器持续推送文本块的场景。它无需额外库即可解析 event: message 格式的数据帧,且具备自动重连机制。

1、在前端 JavaScript 中创建 new EventSource(url, { withCredentials: true }) 实例;

2、监听 message 事件,对 event.data 字段执行 data.replace(/^data:\s*/, '') 去除前缀;

3、跳过空行及注释行(以 : 开头的行);

4、对每条有效数据调用 JSON.parse() 解析,提取 content 字段并追加至显示区域;

5、监听 error 事件并在连接中断时执行清理操作;

三、使用 Fetch API + ReadableStream 手动处理

当需要精细控制流生命周期、中断逻辑或兼容不支持 EventSource 的环境时,Fetch 配合可读流是更灵活的选择。该方式绕过自动解析,直接操作原始字节流。

1、调用 fetch(url, { method: 'POST', body: JSON.stringify(payload), headers: { 'Content-Type': 'application/json' } });

2、检查 response.ok 并确认 response.headers.get('content-type') 为 text/event-stream;

前端设计优化skill
前端设计优化skill

前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。

下载

3、获取 response.body.getReader();

4、使用 while 循环配合 reader.read() 持续读取 chunk,每次读取后用 TextDecoder.decode(chunk.value, {stream: true}) 解析;

5、对每段解码后的文本进行清理(如去除 data: 前缀、过滤空行),并追加至 DOM 元素中;

四、基于 Node.js 后端代理实现流式转发

为规避前端直连导致的 CORS 限制与密钥暴露风险,可通过 Node.js 服务作为中间层接收 SSE 响应,并原样透传至前端。该方式可统一注入认证凭证、日志记录与错误熔断逻辑。

1、在 Express 路由中配置 res.writeHead(200, {'Content-Type': 'text/event-stream'});

2、使用 axios({ responseType: 'stream' }) 向通义千问 API 发起流式请求;

3、监听响应流的 data 事件,将原始 chunk 直接写入客户端响应流;

4、监听 error 和 end 事件,确保连接异常时关闭客户端响应流;

5、设置超时与心跳保活头(如 X-Accel-Buffering: no),防止反向代理缓冲中断流式传输;

五、前端展示层优化:防抖与批量渲染

高频 token 推送易引发 DOM 频繁重绘与布局抖动,需在展示层引入节流与缓冲策略,保障主线程响应能力与视觉稳定性。

1、定义缓冲数组与定时器引用,接收每个 SSE 数据块中的文本片段;

2、使用 setTimeout 延迟 20ms 批量合并并更新 UI,避免逐 token 触发重排;

3、为聊天容器设置 max-height 与 overflow-y: auto,禁用自适应高度抖动;

4、采用 requestIdleCallback 将非关键渲染任务调度至浏览器空闲时段执行;

5、对长消息启用虚拟滚动,仅渲染可视区域内 DOM 节点,防止历史消息累积导致内存膨胀;

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2563

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5543

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6550

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6198

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

883

5

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2563

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5543

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6550

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6198

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程