Los agentes de producción de IA que dependen de un único backend de búsqueda enfrentan una degradación total de la producción durante las interrupciones. Una cadena de conmutación por error enruta las consultas a través de múltiples plataformas de búsqueda en orden de prioridad, retrocediendo automáticamente cuando la principal devuelve errores o resultados vacíos. Este tutorial crea una cadena de conmutación por error utilizando la API multiplataforma de Scavio, donde una única clave cubre Google, Reddit, YouTube, Amazon y Walmart. El mismo patrón funciona para la redundancia a nivel de proveedor al agregar un proveedor secundario como respaldo final.
Requisitos previos
- Python 3.8+ o Node.js 18+ instalado
- solicita biblioteca (Python) o recuperación integrada (JS)
- Una clave API de Scavio de scavio.dev
- Comprensión básica del manejo de errores try-catch
Guia paso a paso
Paso 1: Defina la prioridad de su plataforma
Enumere las plataformas de búsqueda en orden de preferencia según su caso de uso. Google cubre la mayoría de las consultas; Reddit y YouTube brindan profundidad para temas de discusión y videos.
PLATFORMS = ['google', 'reddit', 'youtube']
API_KEY = os.environ['SCAVIO_API_KEY']Paso 2: Construya la función de conmutación por error
Itere a través de plataformas y devuelva resultados de la primera que tenga éxito con resultados no vacíos.
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': []}Paso 3: Agregar registro para observabilidad
Registre qué plataforma atendió cada consulta para poder realizar un seguimiento de la frecuencia de conmutación por error e identificar backends degradados.
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': []}Paso 4: Normalizar la salida
Asegúrese de que el LLM posterior obtenga el mismo formato independientemente de la plataforma que respondió.
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]]Ejemplo en 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'))Ejemplo en 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: []};
}Salida esperada
A failover search function that automatically routes through Google, Reddit, and YouTube in order, returning normalized results from the first platform that succeeds.