El problema
Los agentes de producción de IA que dependen de un único proveedor de API de búsqueda enfrentan tiempos de inactividad cuando ese proveedor sufre interrupciones, límites de velocidad o rendimiento degradado. Un único punto de falla en la capa de búsqueda significa que toda la canalización del agente deja de producir resultados fundamentados.
La solucion de Scavio
Implemente un clúster de conmutación por error con Scavio como backend de búsqueda principal y un patrón de disyuntor que enruta a un proveedor de respaldo después de fallas consecutivas. Realice un seguimiento de los tiempos de respuesta y las tasas de error por proveedor, active el disyuntor después de 3 errores consecutivos o una latencia p95 superior a 5 segundos y restaure automáticamente el primario cuando se vuelvan a pasar las comprobaciones de estado.
Antes
Antes de la conmutación por error, el agente utilizaba una única API SERP. Durante una interrupción del proveedor de 45 minutos, el agente recurrió a respuestas infundadas de LLM, lo que produjo datos de precios alucinados que un cliente notó e informó.
Después
Después de implementar la conmutación por error, el disyuntor detectó la interrupción en 15 segundos (3 fallas consecutivas). El tráfico cambió al proveedor secundario automáticamente. El agente continuó produciendo resultados sólidos sin impacto visible para el cliente. Cuando la primaria se recuperó, el tráfico se restableció en 2 minutos.
Para quien es
Ingenieros de DevOps y desarrolladores backend que crean canales de producción de agentes de IA que requieren una base de búsqueda de alta disponibilidad.
Beneficios clave
- Búsqueda sin tiempo de inactividad de agentes de producción
- Detección automática y enrutamiento de fallas del proveedor
- La restauración del control de estado evita la intervención manual
- El monitoreo del tiempo de respuesta detecta la degradación antes de que falle por completo
- Normalización de la respuesta independiente del proveedor
Ejemplo en Python
import requests, os, time
from collections import deque
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
FAILURES = deque(maxlen=3)
CIRCUIT_OPEN = False
CIRCUIT_OPENED_AT = 0
COOLDOWN = 60 # seconds before retrying primary
def search_with_failover(query: str, platform: str = 'google') -> dict:
global CIRCUIT_OPEN, CIRCUIT_OPENED_AT
if CIRCUIT_OPEN and time.time() - CIRCUIT_OPENED_AT < COOLDOWN:
return _fallback_search(query, platform)
if CIRCUIT_OPEN:
CIRCUIT_OPEN = False
FAILURES.clear()
try:
start = time.time()
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': platform, 'query': query}, timeout=10)
r.raise_for_status()
latency = time.time() - start
if latency > 5:
FAILURES.append('slow')
else:
FAILURES.clear()
return r.json()
except Exception:
FAILURES.append('error')
if len(FAILURES) >= 3:
CIRCUIT_OPEN = True
CIRCUIT_OPENED_AT = time.time()
return _fallback_search(query, platform)
raise
def _fallback_search(query: str, platform: str) -> dict:
# Replace with your fallback provider
return {'source': 'fallback', 'query': query, 'results': []}Ejemplo en JavaScript
const failures = [];
let circuitOpen = false;
let circuitOpenedAt = 0;
const COOLDOWN = 60_000;
async function searchWithFailover(query, platform = 'google') {
if (circuitOpen && Date.now() - circuitOpenedAt < COOLDOWN) {
return fallbackSearch(query, platform);
}
if (circuitOpen) { circuitOpen = false; failures.length = 0; }
try {
const start = Date.now();
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, query })
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
const latency = Date.now() - start;
if (latency > 5000) failures.push('slow');
else failures.length = 0;
return r.json();
} catch (e) {
failures.push('error');
if (failures.length >= 3) {
circuitOpen = true;
circuitOpenedAt = Date.now();
return fallbackSearch(query, platform);
}
throw e;
}
}
async function fallbackSearch(query, platform) {
return { source: 'fallback', query, results: [] };
}Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
Amazon
Búsqueda de productos con precios, calificaciones y reseñas
YouTube
Búsqueda de videos con transcripciones y metadatos
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit