1.前言
在大模型API开发中,流式与非流式输出对应着两种不同的数据交互,在代码中stream中通过参数true与false来进行设定。
2.流式输出与非流式输出的原理
2.1.非流式输出-请求一次响应返回完整数据
非流式输出,传统的请求-响应模式,发起请求-等待完整内容生成后一次性返回给客户端。
- 完整性:返回经过处理和验证的完整响应。
- 单次传输:采用标准HTTP请求与响应模式,一次传输所有数据。
- 等待时间:用户客户端需要等待模型服务响应生成完成(需要一定的等待时间,页面为空白或加载状态)
非流式代码实例如下文章中
AI-Ollama本地大语言模型运行框架与Ollama javascript接入-CSDN博客文章浏览阅读825次,点赞21次,收藏9次。AI-Ollama本地大语言模型运行框架与Ollama javascript接入https://blog.csdn.net/2301_76671906/article/details/146019584?fromshare=blogdetail&sharetype=blogdetail&sharerId=146019584&sharerefer=PC&sharesource=2301_76671906&sharefrom=from_link
2.2.流式输出-逐步生成实时交互
流式输出,增量式的数据传输方式,允许大模型生成内容的同时,将已经生成的部分立即发送给客户端,而不必等待响应完成。
- 实时性:模型生成一小段内容就立即传输,用户几乎无需等待可实时看到生成的过程。
- 增量传输:通过SSE或WebSocket协议实现服务器到客户端的持续数据流。
- 低感知延迟:用户通常在100ms内就能看到首批内容,大幅降低等待感。
流式代码实例如下文章
AI-Ollama使用llama模型vue2中流式响应,模仿AI提问逐字渲染,呈现打印机效果_vue ollama 流试接收-CSDN博客文章浏览阅读532次,点赞13次,收藏8次。Ollama使用llama模型vue2中流式响应,模仿AI提问逐字渲染,呈现打印机效果_vue ollama 流试接收https://blog.csdn.net/2301_76671906/article/details/146074796?fromshare=blogdetail&sharetype=blogdetail&sharerId=146074796&sharerefer=PC&sharesource=2301_76671906&sharefrom=from_link
3.流式与非流式的对比
3.1技术实现对比
维度 | 流式输出 | 非流式输出 |
传输协议 | SSE/WebSocket(长连接) | HTTP/1.1(短连接) |
连接状态 | 保持长连接直到生成完成 | 请求发起-响应等待-完成断开 |
数据格式 | 分块传输,每块包含增量内容 | JSON格式完整响应体 |
服务器资源 | 维持连接状态,内存占用较高 | 生成完成-释放资源-节省内存 |
网络要求 | 网络稳定性要求高 | 网络稳定性要求相对低 |
错误处理 | 中间状态可能导致部分内容丢失 | 全量结果校验,容错性更强 |
3.2性能对比
性能指标 | 流式输出 | 非流式输出 |
首字节延迟 | 极低(通常100ms内) | 较高(需等待全部生成) |
总完成时间 | 与非流式相近或稍长 | 与流式相近或稍短 |
服务器负载 | 连接维护成本较高 | 单次处理负载高但短暂 |
网络流量 | 较高(协议开销) | 较低(单次传输) |
客户端复杂度 | 较高(需处理流式数据) | 较低(简单请求-响应) |
容错能力 | 较低(中断风险高) | 较强(完整性保证) |
3.3应用场景
流式应用场景
实时对话系统 | 渐进式内容生成 | 长文本生成 |
聊天机器人或助手 | 代码补全编程辅助工具 | 文章与报告生成工具 |
客服系统 | 实时文档协作编辑系统 | 故事与剧本创作应用 |
实时问答与教育系统 | 在线写作内容创作 | 大量内容总结与提炼 |
非流式应用场景
批量处理任务 | 高精度要求场景 | 需要完整性验证的场景 |
数据处理与报表生成 | 法律文档与合同生成 | 需要进行内容审核的应用 |
大规模文档分析 | 金融分析与风险评估 | 格式严格的文档生成 |
4.总结
流式输出:的优势在于提供及时的反馈和更好的用户体验,适合使用于对话系统,实时协作和长文本生成等。
非流式输出:在于确保内容的完整性和简化实现,适合批量处理,生成报表,请求-一次性返完整返回响应,高精度要求和资源受限的环境。
参考博主文章
大模型 API 调用中的流式输出与非流式输出全面对比:原理、场景与最佳实践 - API易-帮助中心https://help.apiyi.com/stream-vs-nonstream-api-comparison.html