Resumen
Este pipeline proporciona near-100% search disponibilidad for produccion AI agents by enrutamiento consultas a traves de multiples proveedores in priority order. Primary: Scavio ($0.005/consulta, 6 plataformas, AI Overview). Secondary: Brave Search API (~$4-5/1K). Tertiary: cached resultados de anterior successful consultas. Cada proveedor tiene timeout y minimo resultado umbrales. El agent sees un single search function regardless of cual proveedor responds.
Desencadenador
On-demand (llamado by agent herramienta function)
Programación
On-demand (activado by agent herramienta calls)
Pasos del flujo de trabajo
Recibir search solicitud de agent
Agent calls el search herramienta con consulta y optional plataforma parametro.
Try primary proveedor (Scavio)
Enviar consulta to Scavio con 10-segundo timeout. Verificar resultado conteo meets minimo umbral (3+ resultados).
Try secondary proveedor (Brave) on failure
Si Scavio fails o returns insufficient resultados, intentar Brave Search API con 8-segundo timeout.
Fall back to cache on double failure
Si ambos proveedores fail, return cached resultados de el mas reciente successful consulta for el same o similares palabra clave.
Log proveedor y actualizacion cache
Record cual proveedor served el solicitud for cost seguimiento. Actualizar cache con fresh resultados.
Implementacion en Python
import requests
import json
from pathlib import Path
SCAVIO_KEY = "your_scavio_api_key"
BRAVE_KEY = "your_brave_api_key"
CACHE_PATH = Path("search_cache.json")
def load_cache() -> dict:
return json.loads(CACHE_PATH.read_text()) if CACHE_PATH.exists() else {}
def save_cache(cache: dict):
CACHE_PATH.write_text(json.dumps(cache, indent=2))
def fallback_search(query: str, platform: str = "google") -> dict:
cache = load_cache()
# Primary: Scavio
try:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": SCAVIO_KEY},
json={"platform": platform, "query": query, "ai_overview": True},
timeout=10,
)
if res.ok:
data = res.json()
if len(data.get("organic", [])) >= 3:
cache[query] = data
save_cache(cache)
return {"provider": "scavio", "data": data}
except Exception:
pass
# Secondary: Brave
try:
res = requests.get(
"https://api.search.brave.com/res/v1/web/search",
headers={"X-Subscription-Token": BRAVE_KEY},
params={"q": query},
timeout=8,
)
if res.ok:
data = res.json()
return {"provider": "brave", "data": data}
except Exception:
pass
# Tertiary: cache
if query in cache:
return {"provider": "cache", "data": cache[query]}
return {"provider": "none", "data": {}}
result = fallback_search("best search api for ai agents 2026")
print(f"Provider: {result['provider']}, Results: {len(result['data'].get('organic', []))}")Implementacion en JavaScript
const SCAVIO_KEY = "your_scavio_api_key";
const BRAVE_KEY = "your_brave_api_key";
const cache = new Map();
async function fallbackSearch(query, platform = "google") {
// Primary: Scavio
try {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": SCAVIO_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform, query, ai_overview: true }),
});
if (res.ok) {
const data = await res.json();
if ((data.organic ?? []).length >= 3) {
cache.set(query, data);
return { provider: "scavio", data };
}
}
} catch {}
// Secondary: Brave
try {
const res = await fetch(`https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(query)}`, {
headers: { "X-Subscription-Token": BRAVE_KEY },
});
if (res.ok) return { provider: "brave", data: await res.json() };
} catch {}
// Tertiary: cache
if (cache.has(query)) return { provider: "cache", data: cache.get(query) };
return { provider: "none", data: {} };
}
const r = await fallbackSearch("best search api 2026");
console.log(`Provider: ${r.provider}`);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA