Les agents IA de production qui dépendent d'un seul backend de recherche subissent une dégradation complète des sorties en cas de panne. Une chaîne de basculement achemine les requêtes à travers plusieurs plateformes de recherche par ordre de priorité, en revenant automatiquement au prochain lorsque le principal renvoie des erreurs ou des résultats vides. Ce tutoriel construit une chaîne de basculement en utilisant l'API multiplateforme de Scavio, où une seule clé couvre Google, Reddit, YouTube, Amazon et Walmart. Le même modèle fonctionne pour la redondance au niveau du fournisseur en ajoutant un fournisseur secondaire comme dernier recours.
Prérequis
- Python 3.8+ ou Node.js 18+ installé
- bibliothèque requests (Python) ou fetch intégré (JS)
- Une clé API Scavio depuis scavio.dev
- Compréhension de base de la gestion des erreurs try-catch
Parcours
Étape 1: Définissez votre priorité de plateforme
Listez les plateformes de recherche par ordre de préférence pour votre cas d'utilisation. Google couvre la plupart des requêtes ; Reddit et YouTube offrent de la profondeur pour les discussions et les sujets vidéo.
PLATFORMS = ['google', 'reddit', 'youtube']
API_KEY = os.environ['SCAVIO_API_KEY']Étape 2: Construisez la fonction de basculement
Parcourez les plateformes en renvoyant les résultats de la première qui réussit avec des résultats non vides.
import requests, os
def failover_search(query: str, min_results: int = 1) -> dict:
for platform in PLATFORMS:
try:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': platform, 'query': query}, timeout=10)
resp.raise_for_status()
data = resp.json()
results = data.get('organic', [])
if len(results) >= min_results:
return {'platform': platform, 'results': results}
except (requests.RequestException, ValueError):
continue
return {'platform': 'none', 'results': []}Étape 3: Ajoutez la journalisation pour l'observabilité
Enregistrez quelle plateforme a servi chaque requête afin de suivre la fréquence de basculement et d'identifier les backends dégradés.
import logging
logger = logging.getLogger('search_failover')
def logged_failover_search(query: str) -> dict:
for platform in PLATFORMS:
try:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': platform, 'query': query}, timeout=10)
data = resp.json()
results = data.get('organic', [])
if results:
logger.info(f'Query "{query}" served by {platform} ({len(results)} results)')
return {'platform': platform, 'results': results}
logger.warning(f'{platform} returned 0 results for "{query}"')
except Exception as e:
logger.error(f'{platform} failed for "{query}": {e}')
logger.error(f'All platforms failed for "{query}"')
return {'platform': 'none', 'results': []}Étape 4: Normalisez la sortie
Assurez-vous que le LLM en aval reçoive le même format, quel que soit la plateforme qui a répondu.
def normalize_result(result: dict, platform: str) -> dict:
return {
'title': result.get('title', ''),
'snippet': result.get('snippet', result.get('description', '')),
'url': result.get('link', result.get('url', '')),
'source_platform': platform
}
def search_for_agent(query: str) -> list:
data = logged_failover_search(query)
return [normalize_result(r, data['platform']) for r in data['results'][:5]]Exemple Python
import requests, os
PLATFORMS = ['google', 'reddit', 'youtube']
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def failover_search(query):
for p in PLATFORMS:
try:
r = requests.post('https://api.scavio.dev/api/v1/search',
headers=H, json={'platform': p, 'query': query}, timeout=10)
results = r.json().get('organic', [])
if results: return {'platform': p, 'results': results[:5]}
except: continue
return {'platform': 'none', 'results': []}
print(failover_search('best crm for startups'))Exemple JavaScript
const PLATFORMS = ['google', 'reddit', 'youtube'];
async function failoverSearch(query) {
for (const p of PLATFORMS) {
try {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: p, query})
});
const data = await r.json();
if (data.organic?.length) return {platform: p, results: data.organic.slice(0, 5)};
} catch { continue; }
}
return {platform: 'none', results: []};
}Sortie attendue
A failover search function that automatically routes through Google, Reddit, and YouTube in order, returning normalized results from the first platform that succeeds.