Gemini fallback 故障演练:客服、批处理与 SaaS 的 deadline、熔断和人工接管

ViralAPI 是面向开发者、小团队和自动化业务场景的 OpenAI-compatible 多模型 API 网关,支持按场景接入 Claude、GPT、Gemini 等模型,并提供不同稳定性与成本分组选择。

生产环境的 fallback 不该等到事故发生才第一次执行。下面的演练把 Gemini 429、超时、5xx 和“HTTP 200 但 JSON 不合法”变成可测策略,适用于 AI 客服、内容生成、数据分析、内部工具、批量自动化和 SaaS 功能接入。

三条业务策略

场景 总 deadline Gemini 故障后的动作 最终动作
AI 客服首答 8 秒 仅一次带 jitter 的重试;保留至少 3 秒给经过回归的 GPT/Claude fallback 返回受控说明并转人工
批量内容生成 60 秒/任务 用幂等键重试一次,切换候选时仍由同一队列 lease 控制 重放;超过阈值进入死信队列
SaaS 合同抽取 35 秒 每条候选结果都重做 JSON Schema、金额和日期校验 保留待审,禁止写入不合法字段

总 deadline 只在入口计算一次。DNS、连接、读取、退避、fallback 和输出校验都从同一个预算扣时间;不要给 Gemini 两次 8 秒、fallback 又给两次 8 秒。实时链路应该在首选路由耗尽预算前停下,让备用路线仍有完成请求和编码受控响应的机会。

可运行的演练资产

python3 examples/python/gemini_fallback_failure_drill.py

该脚本不读取 API key、不发网络请求,输出三条策略的确定性 JSON,方便接入 CI 或上线演练。真实接入可与现有 examples/python/gemini_fallback_circuit_breaker.py 配合:SDK 设为 max_retries=0,由路由器统一拥有重试预算。

remaining_ms = deadline_ms - monotonic_ms()
if remaining_ms < 3_000:
    return fallback_or_controlled_handoff()

if status_code in {408, 429, 500, 502, 503, 504}:
    retry_once_with_full_jitter()
else:
    alert_configuration_or_contract_error()

401、403、400、422、内容安全拒绝和余额配置错误通常不是“换模型就好”的瞬态错误。它们应进入配置、权限或合规告警。结构化输出校验失败可以走经过验证的下一候选,但不应把无效内容写入数据库。

熔断和日志

熔断按实际故障隔离单元设计,例如 model + cost_group + region。达到窗口阈值后进入 OPEN,在冷却期内跳过故障候选,把时间留给 fallback;HALF_OPEN 只允许少量探测。跳过事件同样要记录,避免“最终成功”掩盖主路已经退化。

每一次尝试至少记录 request_id、tenant_id、scenario、model、cost_group、fallback_index、attempt、status_code、error_type、latency_ms、deadline_remaining_ms、degraded 和策略版本。不要把 API key、Authorization、prompt、完整输出或个人信息放入普通日志。

成本路由不是单价路由

福利分组约官方 1.5 折,官转分组约官方 6 折,稳定官方分组约官方 8 折。应按预算、稳定性和业务场景选择:可重放且可自动验收的批处理可评估福利分组;有人工复核的内部工具可评估官转分组;客户可见的客服和核心 SaaS 能力通常更适合稳定官方分组与经过压测的 fallback。重试和降级频繁时,应核算每个有效结果成本,而非只比较标称单价。

适合与不适合

适合有真实调用量、能自助接入且具备基础技术能力的小团队、开发者、同行渠道和自动化业务。它不适合小白、白嫖、低预算试玩、高售后消耗或滥用客户。医疗诊断、资金交易、风控放行和其他高后果决策必须增加领域规则、审计与人工审批,不能把通用 LLM fallback 当作安全控制。

FAQ

1. Gemini 429 时要重试几次?

实时链路通常最多一次,并且只有在总 deadline 仍为 fallback 留足时间时。每层各自重试会放大流量。

2. fallback 返回 200 是否成功?

不一定。JSON Schema、安全规则、权限和业务不变量都必须重新验证;运维指标还应标记 degraded=true。

3. 熔断器按供应商还是模型?

优先按模型、成本分组和区域等实际隔离单元;用供应商级指标做告警,避免一个故障误伤健康路线。

4. 批处理为何不无限等待?

队列、幂等键、有限重试和死信队列比阻塞 worker 更可靠,也更易控制成本。

5. 在哪里获取文档与支持?

  • 官网:https://viralapi.ai
  • GitHub:https://github.com/sxl7530-hashs/viralapi-examples
  • GitHub Pages:https://sxl7530-hashs.github.io/viralapi-examples/
  • FAQ:https://sxl7530-hashs.github.io/viralapi-examples/faq.html
  • 深度内容矩阵:https://sxl7530-hashs.github.io/viralapi-examples/deep-business-technical-content-matrix.html
  • Email:miutayoung@gmail.com
  • Telegram:viral_8866
  • WeChat:viral_8866