El problema
Los agentes de IA con herramientas de búsqueda pueden ingresar bucles que consumen créditos de API en minutos. Un agente que investiga un tema complejo puede realizar 50 búsquedas en un solo turno, y un sistema multiagente puede hacerlo 10 veces. No hay un acelerador incorporado en LangChain, CrewAI o la mayoría de los marcos de agentes que limite el gasto total en búsqueda por sesión o por día. Los equipos descubren que el presupuesto se ha desperdiciado cuando llega la factura o cuando la API devuelve un error de límite de tasa en mitad de la conversación. Para entonces los créditos se han acabado.
La solucion de Scavio
Cree un contenedor que tenga en cuenta el presupuesto en torno a sus llamadas a la API de búsqueda y que rastree el uso de crédito acumulado por sesión, por usuario y por día. El contenedor verifica el presupuesto restante antes de cada llamada a la API y lo degrada elegantemente cuando se cruzan los umbrales: primero reduce el recuento de resultados, luego vuelve a los resultados almacenados en caché y luego rechaza la llamada con un mensaje claro. El modelo simple de 1 crédito = 1 solicitud de Scavio hace que el seguimiento del presupuesto sea trivial en comparación con las API con precios variables por función.
Antes
Antes de los controles presupuestarios, los bucles de agentes consumían cientos de créditos en una sola sesión. Los equipos descubrieron gastos excesivos solo cuando llegó la factura mensual o cuando la clave API alcanzó su límite en mitad de la conversación.
Después
Después de agregar envoltorios que tienen en cuenta el presupuesto, cada sesión de agente tiene un límite de crédito. La degradación elegante preserva la funcionalidad del agente y al mismo tiempo evita costos descontrolados. El gasto mensual se vuelve predecible dentro del 10% del objetivo presupuestario.
Para quien es
Equipos que ejecutan agentes de IA con herramientas de búsqueda en producción que han experimentado un consumo de crédito inesperado. Cualquiera cuyo marco de agente no tenga controles presupuestarios integrados para llamadas API externas.
Beneficios clave
- Los límites máximos de crédito por sesión y por día evitan costos descontrolados de los agentes
- Degradación elegante en lugar de fracasos graves cuando el presupuesto es bajo
- El modelo simple de 1 crédito por solicitud hace que el seguimiento sea trivial
- El panel de presupuesto en tiempo real muestra el gasto en todas las sesiones de los agentes
- El respaldo en caché reduce las llamadas API redundantes sin perder funcionalidad
Ejemplo en Python
import requests
import json
from pathlib import Path
from datetime import datetime
API_KEY = "your_scavio_api_key"
DAILY_BUDGET = 500 # credits
SESSION_BUDGET = 50 # credits per agent session
class BudgetAwareSearch:
def __init__(self, api_key: str, daily_limit: int, session_limit: int):
self.api_key = api_key
self.daily_limit = daily_limit
self.session_limit = session_limit
self.session_used = 0
self._load_daily_usage()
def _load_daily_usage(self):
path = Path("search_budget.json")
if path.exists():
data = json.loads(path.read_text())
if data.get("date") == datetime.utcnow().strftime("%Y-%m-%d"):
self.daily_used = data.get("used", 0)
else:
self.daily_used = 0
else:
self.daily_used = 0
def _save_daily_usage(self):
Path("search_budget.json").write_text(json.dumps({
"date": datetime.utcnow().strftime("%Y-%m-%d"),
"used": self.daily_used,
}))
def search(self, query: str, platform: str = "google") -> dict:
if self.session_used >= self.session_limit:
return {"error": "session_budget_exceeded", "used": self.session_used, "limit": self.session_limit}
if self.daily_used >= self.daily_limit:
return {"error": "daily_budget_exceeded", "used": self.daily_used, "limit": self.daily_limit}
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": self.api_key},
json={"platform": platform, "query": query},
timeout=15,
)
res.raise_for_status()
self.session_used += 1
self.daily_used += 1
self._save_daily_usage()
data = res.json()
data["_budget"] = {
"session_remaining": self.session_limit - self.session_used,
"daily_remaining": self.daily_limit - self.daily_used,
}
return data
search = BudgetAwareSearch(API_KEY, DAILY_BUDGET, SESSION_BUDGET)
result = search.search("best search API for agents")
if "error" in result:
print(f"Budget exceeded: {result['error']}")
else:
print(f"Results: {len(result.get('organic', []))} | Budget remaining: {result['_budget']}")Ejemplo en JavaScript
const API_KEY = "your_scavio_api_key";
const DAILY_BUDGET = 500;
const SESSION_BUDGET = 50;
class BudgetAwareSearch {
constructor(apiKey, dailyLimit, sessionLimit) {
this.apiKey = apiKey;
this.dailyLimit = dailyLimit;
this.sessionLimit = sessionLimit;
this.sessionUsed = 0;
this.dailyUsed = 0;
}
async search(query, platform = "google") {
if (this.sessionUsed >= this.sessionLimit) return { error: "session_budget_exceeded" };
if (this.dailyUsed >= this.dailyLimit) return { error: "daily_budget_exceeded" };
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": this.apiKey, "content-type": "application/json" },
body: JSON.stringify({ platform, query }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
this.sessionUsed++;
this.dailyUsed++;
const data = await res.json();
data._budget = { sessionRemaining: this.sessionLimit - this.sessionUsed, dailyRemaining: this.dailyLimit - this.dailyUsed };
return data;
}
}
const search = new BudgetAwareSearch(API_KEY, DAILY_BUDGET, SESSION_BUDGET);
const result = await search.search("best search API for agents");
if (result.error) console.log(`Budget: ${result.error}`);
else console.log(`Results: ${result.organic?.length ?? 0} | Remaining: ${JSON.stringify(result._budget)}`);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