目录
一、数据传输方式
1.1 阻塞传输
1.2 流式传输
二、大模型流式传输
2.1 大模型为什么采用流式传输?
2.2 流式传输协议-SSE
2.3 SSE 协议格式
2.3 实例
三、总结
当下,人工智能领域正掀起一场以大模型为核心的技术浪潮,从智能客服以自然流畅的交互为用户答疑解惑,到智能问答系统凭借强大知识储备快速给出精准回应,大模型已在众多领域大显身手。而在这一过程中,有一项关键技术宛如神奇的魔法棒,能够极大地提升用户体验,它就是流式传输。
那么,大模型流式传输究竟有着怎样的奥秘?又为何能成为增强用户体验的“秘密武器”?
接下来,就让我们一同走进本篇文章,深入探寻大模型流式传输的魅力。
一、数据传输方式
常见的传输模式大致划分为两种类型:流式传输与阻塞式传输。流式传输,顾名思义,数据以连续、不间断的流水式方式依次传输,实现高效且持续的数据流动;而阻塞式传输则采取截然不同的策略,它倾向于一次性完成所需数据的整体传输,类似于一次性搬运大批货物的操作模式。
下面通过两个例子来加深理解。
1.1 阻塞传输
想象一下,你去了一家网红餐厅,点了 5 道招牌菜。服务员告诉你:“这 5 道菜必须全做完一块给你端上来,总共需要 30 分钟才能做好。” 于是你只能干等着,盯着厨房的门,望眼欲穿,直到全部 5 道菜做完一起端上来。这就是阻塞传输:数据发送方(厨房)在准备好全部数据之前,接收方(你)必须一直等待,直到所有菜(数据)都做好。
1.2 流式传输
想象一下,你换了一家更聪明的餐厅。这次你点了同样的 5 道招牌菜,但服务员说:“每做完一道菜,就给你上一道菜,你可以边吃边等后面的菜。” 这就是流式传输:数据发送方(厨房)不需要一次性准备好所有数据(菜),而是可以分批次发送数据(菜)。
二、大模型流式传输
2.1 大模型为什么采用流式传输?
流式传输对于增强基于 LLM 构建的应用程序的响应性至关重要。用流式输出的方式调用大模型 API,能够实时返回中间结果,减少用户的阅读等待时间,并降低请求的超时风险。
2.2 流式传输协议-SSE
当前大模型流式传输普遍采用 Server-Sent Events(SSE)协议进行传输。SSE 是一种基于 HTTP 的服务器到客户端的单向实时通信技术,允许服务器主动向客户端推送数据。它通过持久的 HTTP 连接实现数据流的持续传输,主要特点如下所示。
事项 | 内容 |
协议 | 基于HTTP协议实现,长连接 |
通信方向 | 单向(服务端->客户端) |
数据格式 | 纯文本 |
适用场景 | 服务器主动推送,实时性高的场景 |
2.3 SSE 协议格式
header 中 Content-Type 如下。
Content-Type: text/event-stream
Body体的格式:
1. 只有数据的情况
data:传输内容 # 每次传输的内容
2. 添加事件的情况
event: 事件名称 # 单独一行
data: 传输内容 # 每次传输的内容
如果添加事件,可以在客户端监听对应的事件。 在大模型流式传输中,通常使用 data: [DONE] 作为结束标志。
以下是访问Qwen模型流式返回结果。
2.3 实例
下面通过 python 实现了 SSE 流式传输实例,执行如下命令安装依赖。
pip install flask
实例代码如下所示。
import timefrom flask import Flask, Responseapp = Flask(__name__)@app.route('/')
def index():return "Welcome to the SSE Example!"# 返回10次数据
def event_stream():num = 1while num < 10:time.sleep(1)num = num + 1yield f"data: The current time is {time.strftime('%Y-%m-%d %H:%M:%S')}\n\n"@app.route('/events')
def sse():return Response(event_stream(), content_type='text/event-stream')if __name__ == '__main__':app.run(debug=True)
运行程序后,在浏览器输入 http://127.0.0.1:5000/events,即可看到流式输出结果,如下所示。
三、总结
SSE非常适合于大模型流式传输,其独特优势在于能够以流式传输的方式实时推送中间结果。这种机制巧妙地打破了传统请求-响应模式的局限,让用户在对话或内容生成过程中无需长时间等待完整结果,而是能以“即见即得”的方式逐步获取模型推理的阶段性成果,既提升了交互效率,又显著优化了用户体验,真正实现了“边思考边呈现”的智能交互新范式。
然而,在特定应用场景下,流式传输机制却可能面临一定局限性,尤其是当业务逻辑需要针对模型输出的具体内容进行实时检测或校验时,其逐步呈现的输出特性会带来额外的处理挑战。
参考链接:
[1] https://python.langchain.ac.cn/docs/concepts/streaming/
[2] 通义千问模型的流式输出_大模型服务平台百炼(Model Studio)-阿里云帮助中心
[3] 使用 Python 实现 Server-Sent Events (SSE) 的详细步骤_python server-sent events-CSDN博客
[4] Server-Sent Events(SSE)了解 - 天涯明月夜 - 博客园