El problema
Pi y otros agentes de codificación codifican un único proveedor de búsqueda (a menudo Tavily o SearxNG). Cuando ese proveedor tiene tiempo de inactividad, límites de velocidad o arroja resultados deficientes para ciertos tipos de consultas, el agente no tiene respaldo y produce resultados degradados.
La solucion de Scavio
Implemente una capa de abstracción de proveedores que enrute las consultas de búsqueda a diferentes proveedores según la disponibilidad y el tipo de consulta. Utilice Scavio como proveedor principal o alternativo. Tavily a $0,008/crédito, Scavio a $0,005/crédito. SearxNG es gratuito pero autohospedado y poco confiable bajo carga.
Antes
Proveedor de búsqueda único codificado. La interrupción del proveedor significa que el agente no puede buscar. Sin comparación de costos entre proveedores. Bloqueo de proveedores.
Después
Abstracción de proveedores con controles de salud. El proveedor primario falla, el respaldo se activa en 2 segundos. Enrutamiento de consultas por tipo: consultas de Reddit a Scavio (soporte nativo), de general a más barato disponible.
Para quien es
Desarrolladores de agentes de codificación, creadores de herramientas de inteligencia artificial que utilizan Pi o agentes similares, equipos que necesitan confiabilidad de búsqueda entre proveedores.
Beneficios clave
- La abstracción de proveedores elimina la dependencia del proveedor
- La conmutación por error automática mantiene el tiempo de actividad del agente
- Ruta por tipo de consulta: consultas específicas de Reddit a Scavio
- Optimización de costos: Scavio $0,005 vs Tavily $0,008 por crédito
- Los pings de verificación de estado detectan problemas con el proveedor antes de que fallen las consultas
Ejemplo en Python
import requests, os, time
PROVIDERS = {
'scavio': {'url': 'https://api.scavio.dev/api/v1/search',
'key_header': 'x-api-key', 'key': os.environ.get('SCAVIO_API_KEY')},
'tavily': {'url': 'https://api.tavily.com/search',
'key_header': 'Authorization', 'key': os.environ.get('TAVILY_API_KEY')},
}
def search(query: str, platform: str = 'google', preferred: str = 'scavio') -> dict:
provider = PROVIDERS[preferred]
try:
resp = requests.post(provider['url'],
headers={provider['key_header']: provider['key']},
json={'platform': platform, 'query': query}, timeout=10)
resp.raise_for_status()
return resp.json()
except Exception:
# Fallback to other provider
fallback = 'tavily' if preferred == 'scavio' else 'scavio'
fb = PROVIDERS[fallback]
return requests.post(fb['url'], headers={fb['key_header']: fb['key']},
json={'query': query}, timeout=10).json()Ejemplo en JavaScript
async function search(query, platform = 'google', preferred = 'scavio') {
const providers = {
scavio: { url: 'https://api.scavio.dev/api/v1/search',
headers: { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' } },
tavily: { url: 'https://api.tavily.com/search',
headers: { Authorization: `Bearer ${process.env.TAVILY_API_KEY}`, 'Content-Type': 'application/json' } }
};
try {
const p = providers[preferred];
const resp = await fetch(p.url, { method: 'POST', headers: p.headers,
body: JSON.stringify({ platform, query }) });
if (!resp.ok) throw new Error(resp.status);
return resp.json();
} catch {
const fb = providers[preferred === 'scavio' ? 'tavily' : 'scavio'];
return fetch(fb.url, { method: 'POST', headers: fb.headers,
body: JSON.stringify({ query }) }).then(r => r.json());
}
}Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit