- 后端
- API网关
- LLM 网关
- 大模型
【免费下载链接】gemini-business2api
OpenAI-compatible API for Gemini Business with multi-account load balancing and multimodal capabilities (image/video generation, file parsing) | 将 Gemini Business 转为 OpenAI 兼容接口,支持多账户负载均衡及多模态能力(图像生成、视频生成、解析文件)
gemini-business2api 是一款把 Gemini Business 转为 OpenAI 兼容接口的网关项目,支持多账号负载均衡与多模态能力。本文带你彻底搞懂它的流式输出:SSE(Server-Sent Events)实时返回的原理、一条命令开启流式的使用方法,以及在管理面板中验证流式性能的技巧 🚀
为什么需要流式输出
非流式调用时,客户端必须等模型把完整回答生成完才能收到第一个字节。对于gemini-3.1-pro-preview这类深度思考模型,等待时间可能长达几十秒,体验非常糟糕。
开启流式输出后,gemini-business2api 会以 SSE 协议边生成边推送:模型每产出一小段文本,服务端立即转发给客户端。你只需在请求里加一个参数stream: true,就能让长回答"打字机式"地实时显现。
快速开启流式:请求只加一个参数
第一步:向 /v1/chat/completions 发起流式请求
流式入口是标准的 OpenAI 兼容端点POST /v1/chat/completions(路由定义见 app/api/routers/chat.py)。请求体中的stream字段默认是false(见 app/api/schemas/openai.py),将其设为true即进入流式模式。
用 curl 验证时,记得加-N参数禁用缓冲,否则数据块会被终端攒着不显示:
curl -N -X POST http://localhost:7860/v1/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"gemini-2.5-pro","messages":[{"role":"user","content":"讲个笑话"}],"stream":true}'第二步:逐块读取返回的 SSE 数据
服务端返回的是一串以data:开头、以空行分隔的数据块,客户端每收到一块就解析一块、渲染一块:
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk",... "delta":{"role":"assistant"},"finish_reason":null} data: {...,"delta":{"content":"哈哈,"}}"...} data: {...,"delta":{},"finish_reason":"stop"} data: [DONE]如果对接 OpenAI 生态,无需手写解析逻辑,直接把base_url指向 gemini-business2api 即可:
from openai import OpenAI client = OpenAI(base_url="http://localhost:7860/v1", api_key="YOUR_API_KEY") stream = client.chat.completions.create( model="gemini-2.5-pro", messages=[{"role": "user", "content": "写一首关于秋天的诗"}], stream=True, ) for chunk in stream: print(chunk.choices[0].delta.content or "", end="")SSE 实时返回的三层原理
理解了下面这条"接收 → 转换 → 推送"流水线,就完全掌握了 gemini-business2api 流式输出的核心(主流程见 app/services/chat_service.py)。
1️⃣ 上游接收:逐字符解析 JSON 数组流
Gemini Business 的上游接口并非标准 SSE,而是持续吐出一个"格式化 JSON 数组"。gemini-business2api 用独立的流式解析器 util/streaming_parser.py 逐行、逐字符地追踪{}括号层级与字符串转义状态,每拼完一个完整对象就立即产出(yield),全程不缓存整个响应,内存占用极低。
2️⃣ 中间转换:包装成 OpenAI chunk 格式
每个上游对象被解析后,服务端按 OpenAI 的chat.completion.chunk规范重新封装,关键行为有:
- 首块只带角色:流开始先推送
{"role": "assistant"}的角色块(chat_service.py#L797-L799),让客户端立即建立对话上下文; - 正文逐段推送:模型每产出一段文本,就封装成一个
delta.content块推给下游; - 思考内容单独通道:深度思考模型的"思考过程"会映射到
delta.reasoning_content字段(chat_service.py#L1169-L1178),与正文分开,支持展示推理过程的客户端可以直接渲染; - 收尾标记:全部完成后依次推送
finish_reason: "stop"块和data: [DONE]结束标记(chat_service.py#L1274-L1275),客户端见[DONE]即关闭连接。
3️⃣ 下游推送:StreamingResponse 实时写出
当stream: true时,服务直接返回StreamingResponse并指定media_type="text/event-stream"(chat_service.py#L1623-L1624)。生成器每产出一个data: ...块,就立刻写进 TCP 连接,实现真正的实时性。
💡小知识:非流式模式(stream: false)内部走的也是同一条流水线,服务端会把所有 chunk 悄悄收集拼装成一个完整的chat.completion对象再一次性返回(见 chat_service.py 中的 collect_non_stream_chat_response)。也就是说,流式与非流式共用一套核心链路,行为天然一致。
流式场景下的容错与多账号负载均衡
流式传输途中若某账号报错(如额度耗尽、网络中断),gemini-business2api 会自动切换账号重建会话并重试,对客户端表现为流继续或一条明确的错误数据块,而无需你手动处理。账号池状态可在管理后台的账号管理页查看:
常见流式错误及含义:
| 场景 | 表现 |
|---|---|
| 上游返回 429(配额耗尽) | 流中断并提示,账号进入冷却,自动切换其他账号 |
| 内容违反安全策略 | 流中推送一段"违反政策"的提示文本 |
| 思考模型只输出思考、无正文 | 返回 502 错误,日志记录首个响应结构便于排查 |
| 达到最大重试次数 | 推送错误数据块后结束流 |
在管理面板中验证流式性能
流式输出好不好,面板里一眼可见 📊
运行日志中的 stream=True 标记
后台日志会为每条请求记录stream=True/False,方便你确认流式链路是否生效,还能看到"新会话创建并绑定账户"等调度细节:
关注 TTFB 首响应延迟指标
服务端会精确记录首个数据块的到达时间(TTFB),并写入监控统计。成功率趋势与平均响应时间曲线都能直接反映流式输出的健康度——流式请求的"响应时间"正是你从发出请求到看到第一个字所经历的时长:
常见问题 FAQ
Q1:为什么 curl 看不到内容实时刷新?没加-N参数,curl 默认会缓冲输出;或代理/中间件缓冲了响应,需确保链路不压缩不缓冲 SSE 数据。
Q2:SSE 和 WebSocket 有什么区别?SSE 是基于 HTTP 的单向长连接(服务器 → 客户端),浏览器原生支持、断线易重连,正适合"模型持续输出文本"这种单向推送场景;gemini-business2api 选择了更轻量、与 OpenAI 生态一致的标准 SSE。
Q3:图片/视频生成也能走流式吗?可以。生成类请求同样走流式链路,文本块可能为空但流会携带生成文件信息,产物可在后台图片画廊中查看,模型与能力总览参见 README.md。
掌握以上内容后,你就可以用任意 OpenAI 兼容客户端(ChatBox、NextChat、自研服务等)无缝接入 gemini-business2api,享受实时流式输出的体验了 ✨
- 后端
- API网关
- LLM 网关
- 大模型
【免费下载链接】gemini-business2api
OpenAI-compatible API for Gemini Business with multi-account load balancing and multimodal capabilities (image/video generation, file parsing) | 将 Gemini Business 转为 OpenAI 兼容接口,支持多账户负载均衡及多模态能力(图像生成、视频生成、解析文件)
相关推荐
DLSS Swapper:3 步切换任意游戏的 DLSS 版本,不用等官方更新
DLSS Swapper:3 步切换任意游戏的 DLSS 版本,不用等官方更新 你打开一款支持 DLSS 的游戏,画质菜单里却还停留在 DLSS 2.2,开发商
桌面应用VoltAgent 实时流式输出指南:SSE 与 WebSocket 端点全解析
VoltAgent 实时流式输出指南:SSE 与 WebSocket 端点全解析 VoltAgent 提供了基于 Server Sent Events(SSE)
人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆Agent 工作流AI 评测MCP 服务MCP Clients语音Awesome Claude Skills 完整指南:4 个场景让 AI 快速上手干活
Awesome Claude Skills 完整指南:4 个场景让 AI 快速上手干活 Awesome Claude Skills 是一个精选了 1000 多个
AI 技能AI 插件人工智能工作流自动化
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考