Le problème
Les agents IA avec des outils de recherche peuvent entrer dans des boucles qui brûlent des crédits API en quelques minutes. Un agent recherchant un sujet complexe peut lancer 50 recherches en un seul tour, et un système multi-agents peut le faire 10 fois. Il n'y a pas de limitation intégrée dans LangChain, CrewAI ou la plupart des frameworks d'agents qui limite les dépenses totales de recherche par session ou par jour. Les équipes découvrent que le budget est dépassé lorsque la facture arrive ou lorsque l'API renvoie une erreur de limite de débit en milieu de conversation. À ce moment-là, les crédits sont épuisés.
La solution Scavio
Construisez un wrapper sensible au budget autour de vos appels d'API de recherche qui suit l'utilisation cumulative des crédits par session, par utilisateur et par jour. Le wrapper vérifie le budget restant avant chaque appel API et se dégrade progressivement lorsque les seuils sont dépassés : d'abord en réduisant le nombre de résultats, puis en revenant aux résultats mis en cache, puis en refusant l'appel avec un message clair. Le modèle simple de Scavio 1 crédit = 1 requête rend le suivi budgétaire trivial par rapport aux API avec des prix variables par fonctionnalité.
Avant
Avant les contrôles budgétaires, les boucles d'agents consommaient des centaines de crédits en une seule session. Les équipes ne découvraient les dépassements qu'à l'arrivée de la facture mensuelle ou lorsque la clé API atteignait sa limite en milieu de conversation.
Après
Après l'ajout de wrappers sensibles au budget, chaque session d'agent a un plafond de crédits. La dégradation progressive préserve les fonctionnalités de l'agent tout en évitant des coûts incontrôlés. Les dépenses mensuelles deviennent prévisibles à moins de 10 % de l'objectif budgétaire.
À qui cela s'adresse
Les équipes qui exécutent des agents IA avec des outils de recherche en production et qui ont connu une consommation de crédits inattendue. Toute personne dont le framework d'agents ne dispose pas de contrôles budgétaires intégrés pour les appels API externes.
Avantages clés
- Les plafonds de crédits par session et par jour empêchent les coûts d'agents incontrôlés
- Dégradation progressive au lieu d'échecs brusques lorsque le budget est bas
- Le modèle simple de 1 crédit par requête rend le suivi trivial
- Le tableau de bord budgétaire en temps réel affiche les dépenses sur toutes les sessions d'agents
- Le repli sur le cache réduit les appels API redondants sans perdre de fonctionnalités
Exemple 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']}")Exemple 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)}`);Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA
YouTube
Recherche de vidéos avec transcriptions et métadonnées
Amazon
Recherche de produits avec prix, notes et avis
Walmart
Recherche de produits avec données de prix et d'exécution
Communauté, publications et commentaires imbriqués de n'importe quel subreddit