回退链(稳定)
定义模型/提供商的有序列表。在错误或策略匹配时,前进到下一个。伪代码:
// let chain = FallbackChain::new()
// .primary("gpt-4o")
// .on_timeout("claude-3-haiku")
// .always("mistral-medium");
// let client = AiClientBuilder::new(Provider::OpenAI).fallback(chain).build()?;
第一个成功会短路链。与竞争结合以减少尾延迟。
回退链实现
回退链是一种重要的可靠性模式,当主提供商失败时自动切换到备用提供商。
基本配置
use ai_lib::reliability::FallbackChain;
let chain = FallbackChain::new()
.primary("gpt-4o")
.on_timeout("claude-3-haiku")
.on_error("mistral-medium")
.always("gpt-3.5-turbo");
let client = AiClientBuilder::new(Provider::OpenAI)
.fallback(chain)
.build()?;
条件回退
let chain = FallbackChain::new()
.primary("gpt-4o")
.on_condition(|error| matches!(error, AiLibError::RateLimitExceeded(_)))
.fallback("claude-3-haiku")
.on_condition(|error| matches!(error, AiLibError::TimeoutError(_)))
.fallback("mistral-medium")
.always("gpt-3.5-turbo");
使用示例
use ai_lib::{AiClient, Provider, ChatCompletionRequest, Message, Content};
async fn resilient_chat(
client: &AiClient,
request: ChatCompletionRequest,
) -> Result<String, Box<dyn std::error::Error>> {
let mut last_error = None;
for provider in client.fallback_chain() {
match provider.chat_completion(request.clone()).await {
Ok(response) => return Ok(response.first_text()?),
Err(error) => {
last_error = Some(error);
continue;
}
}
}
Err(last_error.unwrap_or("All providers failed".into()))
}