回退链(稳定)

定义模型/提供商的有序列表。在错误或策略匹配时,前进到下一个。伪代码:

// 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()))
}

下一步

Build: 3de64ed · 2025-09-09T12:50:59.775Z · v0.21