Stream Fake Plugin 配置指南
概述
Stream Fake Plugin 是一个专门用于解决非流式请求超时问题的插件。当 AI 模型响应时间较长时,非流式请求可能会因为等待完整响应而导致超时。该插件通过在内部将非流式请求转换为流式请求来避免超时问题,然后将流式响应重新组装为非流式格式返回给客户端,从而在保持客户端兼容性的同时解决超时问题。
功能特性
- 超时避免:通过流式传输避免长时间等待导致的请求超时
- 透明转换:自动将非流式请求转换为流式格式,客户端无感知
- 响应重构:收集所有流式数据块并重构为完整的非流式响应
- 内容完整性:确保所有内容类型都被正确处理和聚合:
- 常规内容
- 推理内容(适用于支持思考过程的模型)
- 工具调用及其正确合并
- 对数概率
- 连接保持:通过流式传输保持连接活跃,避免网络超时
解决的问题
主要问题:上游请求超时
- 长响应超时:AI 模型生成长文本或复杂响应时,非流式请求容易超时
- 网络超时:在网络不稳定环境下,长时间等待完整响应导致连接超时
- 代理超时:通过代理服务器时,代理可能因为长时间无数据而断开连接
解决方案
通过内部流式传输,连接始终保持活跃状态,避免各种超时问题,同时客户端仍然接收到期望的非流式响应格式。
使用场景
- 长文本生成:生成长篇文章、报告或代码时避免超时
- 复杂推理任务:需要较长思考时间的复杂问题处理
- 不稳定网络环境:网络延迟较高或不稳定的环境
- 严格超时限制:客户端或中间件有严格的超时限制
- 遗留系统兼容:无法修改客户端超时设置的遗留系统
工作原理
问题识别
- 检测到非流式聊天完成请求(
"stream": false 或未设置)
- 识别可能导致超时的长响应场景
内部转换
- 将请求修改为流式格式(
"stream": true)
- 转发修改后的请求到上游 API
- 开始接收流式响应数据
响应处理
- 实时接收流式数据块,保持连接活跃
- 聚合所有响应内容
- 处理不同类型的内容片段
- 重构完整的非流式响应格式
- 设置正确的响应头并返回给客户端
超时避免机制
- 持续数据流:流式响应确保连接始终有数据传输
- 连接保活:避免因长时间无响应导致的连接断开
- 渐进式处理:边接收边处理,减少总体等待时间
配置示例
{
"model": "gpt-4",
"type": 1,
"plugin": {
"stream-fake": {
"enable": true
}
}
}
配置字段说明
| 字段 |
类型 |
必填 |
默认值 |
说明 |
enable |
bool |
是 |
false |
是否启用 Stream Fake 插件以避免超时问题 |
超时场景示例
场景1:长文本生成超时
问题:请求生成 5000 字的技术文档,非流式请求在 60 秒后超时
原始请求:
{
"model": "gpt-4",
"messages": [
{
"role": "user",
"content": "请写一份详细的 5000 字技术文档,介绍微服务架构的设计原则和最佳实践"
}
],
"stream": false,
"max_tokens": 4000
}
插件处理:
- 自动转换为
"stream": true
- 实时接收响应片段,避免超时
- 重构为完整的非流式响应返回
场景2:复杂推理任务超时
问题:复杂数学问题需要长时间思考,导致请求超时
解决方案:
- 插件确保在模型思考过程中连接保持活跃
- 即使推理时间很长也不会导致超时
- 客户端最终收到完整的推理结果
性能优势
超时避免
- 消除连接超时:流式传输保持连接活跃
- 避免代理超时:中间代理不会因长时间无数据而断开
- 减少重试次数:避免因超时导致的请求重试
响应时间
- 感知响应更快:虽然总时间基本相同,但避免了超时重试
- 更好的用户体验:避免请求失败和重新发起请求
- 资源利用率提升:减少因超时导致的资源浪费