ScavioScavio
ProduitTarifsDocumentation
ConnexionCommencer
  1. Accueil
  2. Tutoriels
  3. Comment optimiser le budget de recherche de votre agent IA
Tutoriel

Comment optimiser le budget de recherche de votre agent IA

Réduisez les coûts de l'API de recherche pour les agents IA de 60 à 80 % grâce à la mise en cache, à la déduplication des requêtes, au routage de plateforme et aux limites budgétaires. Implémentation Python fonctionnelle.

Obtenez une clé API gratuiteDocumentation API

Les agents IA qui effectuent une recherche à chaque tour épuisent rapidement les crédits. Un agent de recherche effectuant 50 recherches par session à 0,005 $ chacune coûte 0,25 $ par conversation. Ce tutoriel met en œuvre quatre optimisations : la mise en cache des résultats, la déduplication des requêtes, le routage adapté à la plateforme et des limites budgétaires strictes. Ensemble, elles réduisent les coûts de 60 à 80 % sans dégrader les résultats.

Prérequis

  • Python 3.8+ installé
  • bibliothèque requests installée
  • Une clé API Scavio provenant de scavio.dev
  • Un agent existant qui utilise la recherche

Parcours

Étape 1: Ajouter un cache TTL pour les résultats de recherche

Mettez en cache les résultats pendant une fenêtre configurable. La plupart des données SERP restent valides pendant 1 à 24 heures.

Python
import os, requests, hashlib, time

API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

class SearchCache:
    def __init__(self, ttl=3600):
        self.cache = {}
        self.ttl = ttl
        self.hits = self.misses = 0

    def _key(self, query, platform):
        return hashlib.md5(f'{query}:{platform}'.encode()).hexdigest()

    def get(self, query, platform='google'):
        key = self._key(query, platform)
        if key in self.cache and time.time() - self.cache[key]['ts'] < self.ttl:
            self.hits += 1
            return self.cache[key]['data']
        self.misses += 1
        return None

    def set(self, query, platform, data):
        self.cache[self._key(query, platform)] = {'data': data, 'ts': time.time()}

    def stats(self):
        total = self.hits + self.misses
        rate = self.hits / total * 100 if total else 0
        return f'{self.hits} hits, {self.misses} misses ({rate:.0f}%)'

Étape 2: Implémenter la déduplication des requêtes

Normalisez les requêtes pour détecter les quasi-doublons avant qu'ils n'atteignent l'API.

Python
import re

def normalize_query(query):
    q = re.sub(r'[^a-z0-9\s]', '', query.lower().strip())
    stop = {'the', 'a', 'an', 'is', 'are', 'what', 'how', 'do', 'does'}
    return ' '.join(sorted(w for w in q.split() if w not in stop))

class SmartSearch:
    def __init__(self):
        self.cache = SearchCache()
        self.norm_map = {}
        self.api_calls = 0

    def search(self, query, platform=None):
        if platform is None:
            platform = self._route(query)
        norm = normalize_query(query)
        if norm in self.norm_map:
            cached = self.cache.get(self.norm_map[norm], platform)
            if cached: return cached
        cached = self.cache.get(query, platform)
        if cached: return cached
        resp = requests.post('https://api.scavio.dev/api/v1/search',
            headers=H, json={'query': query, 'platform': platform, 'country_code': 'us'})
        data = resp.json()
        self.cache.set(query, platform, data)
        self.norm_map[norm] = query
        self.api_calls += 1
        return data

    def _route(self, query):
        q = query.lower()
        if any(w in q for w in ['price', 'buy', 'amazon', 'product']): return 'amazon'
        if any(w in q for w in ['reddit', 'opinion', 'recommend']): return 'reddit'
        if any(w in q for w in ['video', 'youtube', 'tutorial']): return 'youtube'
        return 'google'

Étape 3: Ajouter des limites budgétaires

Empêchez les agents de dépasser un seuil de coût par session.

Python
class BudgetSearch(SmartSearch):
    def __init__(self, max_budget=0.50):
        super().__init__()
        self.max_budget = max_budget

    def search(self, query, platform=None):
        if self.api_calls * 0.005 >= self.max_budget:
            return {'error': 'Budget exceeded', 'organic_results': []}
        return super().search(query, platform)

    def stats(self):
        cost = self.api_calls * 0.005
        print(f'API calls: {self.api_calls} (${cost:.3f} / ${self.max_budget:.3f} budget)')
        print(f'Cache: {self.cache.stats()}')

Étape 4: Testez les économies avec une session d'agent simulée

Exécutez une charge de travail réaliste et mesurez les économies par rapport à l'approche naïve.

Python
smart = BudgetSearch(max_budget=0.50)

queries = [
    'best SERP API pricing 2026',
    'SERP API pricing comparison 2026',  # near-duplicate
    'best serp api pricing 2026',        # case duplicate
    'amazon price tracking API',          # -> amazon
    'reddit opinions on tavily',          # -> reddit
    'youtube tutorial web scraping',      # -> youtube
    'SERP API pricing comparison 2026',   # cached
    'web scraping API for beginners',
    'web scraping api beginners',         # near-duplicate
]

for q in queries:
    data = smart.search(q)
    n = len(data.get('organic_results', data.get('products', [])))
    print(f'  "{q[:45]}" -> {n} results')

print()
smart.stats()
naive = len(queries) * 0.005
actual = smart.api_calls * 0.005
print(f'Naive: ${naive:.3f}, Actual: ${actual:.3f}, Saved: {(1-actual/naive)*100:.0f}%')

Exemple Python

Python
import os, requests, hashlib, time

API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
cache = {}
hits = misses = 0

def search(query, platform='google', ttl=3600):
    global hits, misses
    key = hashlib.md5(f'{query.lower()}:{platform}'.encode()).hexdigest()
    if key in cache and time.time() - cache[key]['ts'] < ttl:
        hits += 1; return cache[key]['data']
    misses += 1
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H, json={'query': query, 'platform': platform, 'country_code': 'us'}).json()
    cache[key] = {'data': data, 'ts': time.time()}
    return data

for q in ['serp api', 'serp api', 'SERP API']:
    search(q.lower())
print(f'Hits: {hits}, Misses: {misses}, Saved: ${hits * 0.005:.3f}')

Exemple JavaScript

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
const cache = new Map();
let hits = 0, misses = 0;

async function search(query, platform = 'google', ttl = 3600) {
  const key = `${query.toLowerCase()}:${platform}`;
  const c = cache.get(key);
  if (c && Date.now() - c.ts < ttl * 1000) { hits++; return c.data; }
  misses++;
  const data = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST', headers: H,
    body: JSON.stringify({ query, platform, country_code: 'us' })
  }).then(r => r.json());
  cache.set(key, { data, ts: Date.now() });
  return data;
}

async function main() {
  for (const q of ['serp api', 'serp api', 'SERP API']) await search(q);
  console.log(`Hits: ${hits}, Misses: ${misses}`);
}
main().catch(console.error);

Sortie attendue

JSON
  "best SERP API pricing 2026" -> 5 results
  "SERP API pricing comparison 2026" -> 5 results
  "best serp api pricing 2026" -> 5 results (cached)
  "amazon price tracking API" -> 5 results
  "reddit opinions on tavily" -> 5 results
  "youtube tutorial web scraping" -> 5 results
  "SERP API pricing comparison 2026" -> 5 results (cached)
  "web scraping API for beginners" -> 5 results
  "web scraping api beginners" -> 5 results (cached)

API calls: 6 ($0.030 / $0.500 budget)
Cache: 3 hits, 6 misses (33%)
Naive: $0.045, Actual: $0.030, Saved: 33%

Tutoriels associés

  • Comment ajouter la recherche à un agent de recherche approfondie
  • Comment comparer les modèles de tarification des API SERP de manière programmatique
  • Comment choisir entre les modes file d'attente et SERP en direct

Questions fréquentes

La plupart des développeurs terminent ce tutoriel en 15 à 30 minutes. Vous aurez besoin d'une clé API Scavio (l'offre gratuite suffit) et d'un environnement Python ou JavaScript fonctionnel.

Python 3.8+ installé. bibliothèque requests installée. Une clé API Scavio provenant de scavio.dev. Un agent existant qui utilise la recherche. Une clé API Scavio vous donne 50 crédits gratuits à l'inscription.

Oui. L'offre gratuite comprend 50 crédits à l'inscription, ce qui est largement suffisant pour terminer ce tutoriel et prototyper une solution fonctionnelle.

Scavio dispose d'un package natif LangChain (langchain-scavio), d'un serveur MCP et d'une API REST simple qui fonctionne avec tout client HTTP. Ce tutoriel utilise the raw REST API, mais vous pouvez l'adapter à votre framework de prédilection.

Ressources connexes

Best Of

Meilleures API de recherche économiques pour agents IA sous 10 $/mois (2026)

Read more
Use Case

Passerelle de recherche MCP pour systèmes multi-agents

Read more
Best Of

Meilleures API de recherche pour les développeurs d'agents à petit budget en 2026

Read more
Solution

Optimisation des coûts de recherche des agents

Read more
Workflow

Workflow de suivi des coûts de recherche et du budget par agent

Read more
Glossary

Coût de l'API de recherche par fenêtre de contexte

Read more

Commencer

Réduisez les coûts de l'API de recherche pour les agents IA de 60 à 80 % grâce à la mise en cache, à la déduplication des requêtes, au routage de plateforme et aux limites budgétaires. Implémentation Python fonctionnelle.

Obtenez une clé API gratuiteLire la documentation
ScavioScavio

API de recherche en temps réel pour agents IA. Recherchez sur toutes les plateformes, pas seulement Google.

Produit

  • Fonctionnalités
  • Tarifs
  • Tableau de bord
  • Affiliés

Développeurs

  • Documentation
  • Référence API
  • Démarrage rapide
  • Intégration MCP
  • SDK Python

Alternatives

  • Alternative à Tavily
  • Alternative à SerpAPI
  • Alternative à Firecrawl
  • Alternative à Exa

Outils

  • Formateur JSON
  • cURL vers code
  • Compteur de jetons
  • Tous les outils

© 2026 Scavio. Tous droits réservés.

Featured on TAAFT
Conditions d'utilisationPolitique de confidentialité