Fallback Strategy
Fallback Strategy 是当主 LLM Provider 不可用时自动切换到备用 Provider 的策略。它是 AI Service 高可用的关键保障。
#type / concept
#status / evergreen
#tech / ai
#tech / architecture
[!info] related notes
- 所属 MOC: AI Agent Application MOC
- 相关: Model Gateway, Retry Policy
Fallback Strategy
一句话定义
Fallback Strategy 是当主 LLM Provider 不可用时自动切换到备用 Provider 的策略。OpenAI 限流了?切 Anthropic。Anthropic 超时了?切本地模型。
它解决什么问题
LLM Provider 不是 100% 可靠的:
- API 限流(429)
- 服务故障(500)
- 网络超时
- 区域性中断
没有 Fallback,一个 Provider 挂了整个服务就不可用。
核心原理
Fallback 链
请求 → OpenAI (主)
│ 失败
▼
Anthropic (备1)
│ 失败
▼
本地模型 (备2)
│ 失败
▼
返回错误
Python 实现
class FallbackChain:
def __init__(self, providers: list[LLMProvider]):
self.providers = providers
async def chat(self, messages, model, **kwargs) -> ChatResponse:
errors = []
for provider in self.providers:
try:
return await provider.chat(messages, model, **kwargs)
except RateLimitError as e:
errors.append((provider.name, "rate_limit"))
continue
except TimeoutError as e:
errors.append((provider.name, "timeout"))
continue
except Exception as e:
errors.append((provider.name, str(e)))
continue
raise AllProvidersFailedError(errors)
带优先级的 Fallback
class PrioritizedFallback:
def __init__(self):
self.chains = {
"high_quality": [OpenAIProvider("gpt-4"), AnthropicProvider("claude-sonnet")],
"balanced": [OpenAIProvider("gpt-4-mini"), AnthropicProvider("claude-haiku")],
"cheap": [OpenAIProvider("gpt-4-mini")],
}
async def chat(self, messages, quality_tier="balanced", **kwargs):
chain = self.chains[quality_tier]
for provider in chain:
try:
return await provider.chat(messages, **kwargs)
except Exception:
continue
raise AllProvidersFailedError()
常见设计模式
1. 同模型 Fallback
OpenAI 的 GPT-4 → OpenAI 的 GPT-4-mini(降级但不换 Provider)
2. 跨 Provider Fallback
OpenAI → Anthropic(换 Provider)
3. 本地 Fallback
云端 API → 本地模型(兜底)
常见坑
- 不做 Fallback: 单 Provider 依赖
- Fallback 链太长: 每个 Provider 都试一遍,延迟累积
- 不做错误区分: 限流和认证失败的处理方式不同
- Fallback 后不记录: 不知道哪个 Provider 经常失败