Aperçu
Exécuter toutes les recherches via un seul fournisseur est un point de défaillance unique et conduit souvent à payer trop cher pour les requêtes simples. Ce workflow répartit les requêtes entre Scavio (0,005 $/crédit), Brave (5 $/1 000) et les niveaux gratuits en fonction du type de requête, du budget restant et de l'état des fournisseurs. Basculement automatique en cas de panne d'un fournisseur.
Déclencheur
Chaque requête de recherche provenant de l'agent ou de l'application.
Planification
À la demande
Étapes du workflow
Classer la complexité de la requête
Analyser la requête entrante pour déterminer si elle est simple (recherche de fait), moyenne (comparaison) ou complexe (recherche en plusieurs étapes).
Vérifier l'état des fournisseurs
Tester l'état de chaque fournisseur. Ignorer ceux qui sont hors service ou limités en débit.
Acheminer selon le coût et la complexité
Les requêtes simples vont vers le fournisseur le moins cher disponible. Les requêtes complexes vont vers les fournisseurs offrant le meilleur support de données structurées.
Exécuter la recherche avec basculement
Appeler le fournisseur sélectionné. En cas d'échec ou de résultats médiocres, essayer automatiquement le fournisseur suivant dans la rotation.
Consigner et suivre le budget
Enregistrer le fournisseur utilisé, le coût, la qualité des résultats et mettre à jour le budget mensuel en cours.
Implémentation Python
import requests, os, json, time
from pathlib import Path
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
BUDGET_FILE = Path("rotation_budget.json")
def load_budget() -> dict:
if BUDGET_FILE.exists():
return json.loads(BUDGET_FILE.read_text())
return {"scavio": 0, "total_cost": 0.0}
def save_budget(b: dict):
BUDGET_FILE.write_text(json.dumps(b))
def scavio_search(query: str) -> dict:
start = time.time()
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": query, "country_code": "us"},
timeout=10,
)
latency = time.time() - start
if resp.status_code == 200:
data = resp.json()
return {"provider": "scavio", "cost": 0.005, "latency": round(latency, 2), "results": data.get("organic_results", []), "success": True}
return {"provider": "scavio", "success": False}
def rotate_search(query: str) -> dict:
budget = load_budget()
# Try Scavio first (cheapest at $0.005)
result = scavio_search(query)
if result["success"] and len(result.get("results", [])) >= 3:
budget["scavio"] += 1
budget["total_cost"] += result["cost"]
save_budget(budget)
return result
# Fallback: retry with simplified query
simplified = " ".join(query.split()[:4])
result = scavio_search(simplified)
if result["success"]:
budget["scavio"] += 1
budget["total_cost"] += result["cost"]
save_budget(budget)
return result
return {"provider": "none", "success": False, "results": []}
result = rotate_search("best cloud hosting provider comparison 2026")
print(f"Provider: {result['provider']}, Results: {len(result.get('results', []))}, Cost: ${result.get('cost', 0)}")Implémentation JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const fs = await import('fs');
function loadBudget() { try { return JSON.parse(fs.readFileSync('rotation_budget.json','utf8')); } catch { return {scavio:0, totalCost:0}; } }
function saveBudget(b) { fs.writeFileSync('rotation_budget.json', JSON.stringify(b)); }
async function scavioSearch(query) {
const start = Date.now();
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query, country_code:'us'})});
if (r.ok) { const d = await r.json(); return {provider:'scavio', cost:0.005, latency:Date.now()-start, results:d.organic_results||[], success:true}; }
return {provider:'scavio', success:false};
}
async function rotateSearch(query) {
const budget = loadBudget();
let result = await scavioSearch(query);
if (result.success && result.results.length >= 3) { budget.scavio++; budget.totalCost += result.cost; saveBudget(budget); return result; }
result = await scavioSearch(query.split(' ').slice(0,4).join(' '));
if (result.success) { budget.scavio++; budget.totalCost += result.cost; saveBudget(budget); return result; }
return {provider:'none', success:false, results:[]};
}
const r = await rotateSearch('best cloud hosting provider comparison 2026');
console.log('Provider: '+r.provider+', Results: '+r.results.length+', Cost: $'+r.cost);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
Communauté, publications et commentaires imbriqués de n'importe quel subreddit