El problema
Los límites de tarifas son el asesino silencioso de la confiabilidad de los agentes. Un agente que funciona perfectamente en pruebas choca contra un límite de velocidad en el momento en que se ejecuta en producción con concurrencia de usuarios reales. La mayoría de los proveedores de API de búsqueda imponen límites por segundo o por minuto que están bien para un panel pero catastróficos para un enjambre de agentes. Cuando diez agentes activan cada uno tres llamadas de búsqueda por paso de razonamiento, el limitador de velocidad comienza a devolver errores 429, la lógica de reintento del agente agrega latencia y el usuario ve un control giratorio que nunca se resuelve. Peor aún, algunos proveedores no devuelven respuestas 429 limpias, sino que ofrecen resultados degradados o fallas silenciosas que el agente trata como respuestas reales.
La solucion de Scavio
Los límites de velocidad de Scavio están diseñados para la simultaneidad a escala de agente, no para el sondeo a escala de panel. Los límites por clave son lo suficientemente altos como para que una flota de agentes de producción pueda ejecutarse sin coordinar el tiempo de solicitud entre instancias. Cuando te acercas a un límite, la respuesta es un 429 limpio con un encabezado Retry-After que cualquier cliente HTTP maneja automáticamente. No hay degradaciones silenciosas, ni resultados parciales, ni fracasos misteriosos. También puede solicitar límites más altos actualizando su plan, sin necesidad de realizar una llamada de ventas. El resultado es una flota de agentes que busca en la web en producción simultánea sin una capa de coordinación de límite de velocidad en su arquitectura.
Antes
Antes de Scavio, los equipos de agentes creaban colas de límite de velocidad, middleware de depósito de tokens y capas de coordinación entre instancias solo para evitar que la herramienta de búsqueda hiciera 429 durante el tráfico pico. La lógica de reintento por sí sola tenía cientos de líneas.
Después
Después de Scavio, los límites de velocidad coinciden de forma inmediata con la simultaneidad a escala de agente. El middleware token-bucket se elimina, la capa de coordinación se elimina y la flota de agentes se ejecuta sin cuellos de botella en la búsqueda.
Para quien es
Equipos de infraestructura de agentes que ejecutan flotas de agentes simultáneos en producción. Si sus agentes cometen errores 429 durante el tráfico pico y usted ha creado una coordinación personalizada de límite de velocidad para solucionarlo, esto elimina toda esa capa.
Beneficios clave
- Límites de tarifas diseñados para la concurrencia de agentes, no para el sondeo del panel
- Limpie 429 respuestas con encabezados Retry-After para manejo automático
- Sin degradación silenciosa ni resultados parciales bajo carga.
- Las actualizaciones de planes aumentan los límites sin una llamada de ventas
- No se necesita una capa de coordinación de límite de velocidad entre instancias de agentes
Ejemplo en Python
import requests
import time
from concurrent.futures import ThreadPoolExecutor
API_KEY = "your_scavio_api_key"
URL = "https://api.scavio.dev/api/v1/search"
def resilient_search(query: str, platform: str = "google"):
for attempt in range(3):
r = requests.post(
URL,
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query},
timeout=15,
)
if r.status_code == 429:
wait = int(r.headers.get("Retry-After", 2))
time.sleep(wait)
continue
r.raise_for_status()
return r.json()
raise RuntimeError("rate limit exceeded after retries")
queries = [f"topic {i} latest news" for i in range(20)]
with ThreadPoolExecutor(max_workers=10) as pool:
results = list(pool.map(resilient_search, queries))
print(f"Completed {len(results)} concurrent searches")Ejemplo en JavaScript
const API_KEY = "your_scavio_api_key";
const URL = "https://api.scavio.dev/api/v1/search";
async function resilientSearch(query, platform = "google") {
for (let attempt = 0; attempt < 3; attempt++) {
const r = await fetch(URL, {
method: "POST",
headers: {
"x-api-key": API_KEY,
"content-type": "application/json",
},
body: JSON.stringify({ platform, query }),
});
if (r.status === 429) {
const wait = parseInt(r.headers.get("Retry-After") ?? "2", 10);
await new Promise((res) => setTimeout(res, wait * 1000));
continue;
}
if (!r.ok) throw new Error(`search failed: ${r.status}`);
return r.json();
}
throw new Error("rate limit exceeded after retries");
}
const queries = Array.from({ length: 20 }, (_, i) => `topic ${i} latest news`);
const results = await Promise.all(queries.map((q) => resilientSearch(q)));
console.log(`Completed ${results.length} concurrent searches`);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
YouTube
Búsqueda de videos con transcripciones y metadatos
Amazon
Búsqueda de productos con precios, calificaciones y reseñas
Walmart
Búsqueda de productos con precios y datos de cumplimiento
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit