通义千问 流式输出实现原理与 SSE 实战指南

轻静姑娘_7022

轻静姑娘_7022

2026-05-13

1504人浏览

原创

需启用流式输出机制,其核心依赖server-sent events(sse)协议,通过持久化http连接实时推送文本块;前端可用eventsource或fetch+readablestream监听,后端spring boot用sseemitter、php用curl+writefunction、ollama需穿透双重缓冲实现逐字响应。

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

通义千问 流式输出实现原理与 sse 实战指南 - php中文网

如果您在集成通义千问时希望用户能实时看到模型逐字生成的响应,而非等待全部内容完成后再一次性呈现,则需启用流式输出机制。该机制依赖于服务端持续推送数据的能力,核心实现路径围绕 Server-Sent Events(SSE)协议展开。以下是具体实施步骤:

一、理解流式输出的技术基础

流式输出的本质是将模型推理过程中产生的文本块(chunk)即时封装为事件流,通过持久化 HTTP 连接推送给前端。与传统 REST API 的“请求-等待-响应”模式不同,SSE 允许服务器在单次连接中多次发送数据,且浏览器原生支持解析 event: message 格式的数据帧。这种单向、低开销、无需轮询的通信方式,特别适配大语言模型边生成边返回的自然过程。

1、确认所用通义千问 SDK 或 API 接口支持 stream 参数,并设置为 true;

2、确保后端服务返回的 Content-Type 为 text/event-stream;

3、验证客户端使用 EventSource 或 fetch + ReadableStream 方式监听数据流,而非普通 XMLHttpRequest;

二、基于 Fetch API 的前端流式接收实现

现代浏览器可通过原生 fetch 配合 response.body.getReader() 获取可读流,再利用 TextDecoder 逐块解码服务端推送的 UTF-8 数据。该方式绕过 EventSource 的自动重连机制,便于精细控制中断、错误处理与渲染节奏。

1、发起带 stream: true 参数的 POST 请求,Header 中包含 Authorization 和 Content-Type: application/json;

2、调用 response.body.getReader() 获取流读取器;

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

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

5、当 done 为 true 时终止循环,关闭流连接;

三、Spring Boot 后端使用 SseEmitter 实现推送

Spring Boot 提供了 SseEmitter 类作为 SSE 协议的封装抽象,它内部维护一个异步连接,允许控制器在任意时刻调用 emitter.send() 推送事件。该方式适用于基于 Servlet 容器的传统 Web 应用,无需引入 WebFlux。

1、定义 @GetMapping 接口,produces 设置为 MediaType.TEXT_EVENT_STREAM_VALUE;

2、方法返回类型声明为 SseEmitter,并设置超时时间(如 30000 毫秒);

3、在新线程中调用通义千问 Java SDK 的流式接口(如 Generation.stream()),获取 Flowable;

Qwen Vision
Qwen Vision

利用通义千问视觉API(阿里云灵积)分析图像和视频,支持图像理解、OCR及视觉推理。

下载

4、订阅 Flowable,对每个 GenerationResult 调用 emitter.send(SseEmitter.event().data(result.getOutput().getText()));

5、捕获异常后调用 emitter.completeWithError(e),正常结束时调用 emitter.complete();

四、PHP 环境下通过 cURL 实现流式响应透传

在无原生 SSE 支持的 PHP 环境中,可借助 cURL 的 WRITEFUNCTION 回调函数捕获服务端分块返回的数据,并立即输出至标准输出流。配合 ob_flush() 和 flush() 可强制刷新缓冲区,使前端浏览器按 chunk 解析。

1、初始化 cURL 句柄,设置 CURLOPT_URL 为通义千问兼容模式接口地址;

2、启用 CURLOPT_POST 并传入 JSON 请求体,其中 'stream' => true 必须显式设置;

3、配置 CURLOPT_HTTPHEADER 包含 Authorization Bearer Token 和 application/json;

4、设置 CURLOPT_WRITEFUNCTION 回调,在回调中对原始 $data 执行 processStreamedData() 解析逻辑;

5、每次解析出有效文本片段后,执行 echo 输出并紧跟 ob_flush() 和 flush();

五、Ollama + Ollama-WebUI 环境下的双重缓冲优化

当通过 Ollama-WebUI 调用本地部署的 Qwen3-14B 或 Qwen2.5 模型时,Ollama 服务端与 WebUI 前端各自存在独立缓冲区,导致 token 级延迟叠加。必须穿透两层缓冲,才能还原 SSE 的实时性。

1、修改 Ollama 启动参数,添加 --no-cache 和 --stream 强制启用底层流式通道;

2、在 Ollama-WebUI 的代理配置中禁用 response buffering,设置 Nginx 的 proxy_buffering off 与 proxy_cache off;

3、检查 Ollama-WebUI 前端是否对 EventSource 进行了额外包装,若存在中间解析层则需绕过或重写;

4、直接调用 Ollama 的 /api/chat 接口并手动构造 Accept: text/event-stream 请求头;

5、在前端使用自定义 fetch 流式读取,避免依赖 WebUI 内置的非流式封装函数;

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

通义千问 千问 qwen

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
通义千问入门教程_通义千问基础使用指南
通义千问入门教程_通义千问基础使用指南

本通义千问入门教程专为新手设计,全面覆盖通义千问基础使用指南。从注册登录、界面功能详解,到核心对话技巧与提示词入门,助你快速掌握这款阿里AI大模型。无论是网页版还是APP,本指南都将带你零基础上手,解锁智能问答、内容创作等高效功能,开启你的AI提效之旅。

2026.04.24

5455

10

通义千问提示词工程_通义千问提示词高阶技巧
通义千问提示词工程_通义千问提示词高阶技巧

本通义千问提示词工程指南,专为进阶用户打造,深度解析通义千问提示词高阶技巧。从角色锚定、结构化指令到思维链(CoT)与少样本提示,系统传授优化提问的核心方法。掌握这些技巧,你将能精准控制AI输出,大幅提升回答质量与效率,解锁通义千问的深层潜力,让AI真正成为你的智能助手。

2026.04.24

228

10

通义千问实战应用_通义千问工作效率提升教程
通义千问实战应用_通义千问工作效率提升教程

本通义千问实战应用教程,聚焦真实办公场景,传授通义千问工作效率提升秘籍。从一键生成周报、会议纪要,到辅助文案创作、市场调研与学习规划,覆盖职场、学习、生活全链路。通过具体案例与步骤拆解,教你将AI深度融入日常,告别重复劳动,实现效率翻倍,让通义千问成为你的全能工作搭档。

2026.04.24

178

10

通义千问 入门使用与AI对话实战指南
通义千问 入门使用与AI对话实战指南

本专题带你快速上手阿里推出的全能AI助手——通义千问。详解App、网页版及小程序等多端登录方式,掌握“角色+背景+任务+要求”的万能提问公式,轻松驾驭智能问答、文案创作、文档解析及多模态交互等核心功能。通过实战指南,助你高效利用AI提升办公与生活效率。

2026.05.13

925

10

通义千问 API开发与大模型集成实战
通义千问 API开发与大模型集成实战

本教程带你从零掌握通义千问大模型的 API 开发与集成实战。涵盖阿里云百炼平台的账号注册、API Key 获取及环境变量配置。通过 Python、Java 等主流语言的实战代码,详解兼容 OpenAI 接口的调用方式,深入解析流式输出、多轮对话及异常处理技巧。助你快速将通义千问的强大 AI 能力无缝集成到企业级业务系统中。

2026.05.13

187

10

通义千问 Agent开发与AI工作流实战
通义千问 Agent开发与AI工作流实战

本指南带你从零掌握通义千问 Agent 与 AI 工作流的开发实战。深入解析 Agent “规划-执行-反思”的核心原理,详解阿里云百炼平台与工作流编排技巧。通过集成通义千问模型、配置 MCP 工具及知识库,手把手教你构建能自主拆解任务、调用外部服务并处理复杂逻辑的企业级智能体应用。

2026.05.13

184

11

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

20

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

0

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

0

12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
通义千问基本用法
通义千问基本用法

共1课时 | 227人学习

通义千问的提示词工程
通义千问的提示词工程

共1课时 | 258人学习