Le problème
Pi et d'autres agents de codage codent en dur un seul fournisseur de recherche (souvent Tavily ou SearxNG). Lorsque ce fournisseur a des temps d'arrêt, des limites de débit ou renvoie des résultats médiocres pour certains types de requêtes, l'agent n'a pas de basculement et produit une sortie dégradée.
La solution Scavio
Implémentez une couche d'abstraction de fournisseur qui achemine les requêtes de recherche vers différents fournisseurs en fonction de la disponibilité et du type de requête. Utilisez Scavio comme fournisseur principal ou de basculement. Tavily à $0.008/crédit, Scavio à $0.005/crédit. SearxNG est gratuit mais auto-hébergé et peu fiable sous charge.
Avant
Fournisseur de recherche unique codé en dur. Une panne du fournisseur signifie que l'agent ne peut pas chercher. Aucune comparaison de coût entre les fournisseurs. Dépendance au fournisseur.
Après
Abstraction de fournisseur avec vérifications de santé. Le fournisseur principal échoue, le basculement se déclenche en moins de 2 secondes. Routage des requêtes par type : les requêtes Reddit vers Scavio (support natif), les générales vers le moins cher disponible.
À qui cela s'adresse
Développeurs d'agents de codage, constructeurs d'outils d'IA utilisant Pi ou des agents similaires, équipes ayant besoin de fiabilité de recherche entre les fournisseurs.
Avantages clés
- L'abstraction de fournisseur élimine la dépendance au fournisseur
- Le basculement automatique maintient la disponibilité de l'agent
- Routage par type de requête : les requêtes spécifiques à Reddit vers Scavio
- Optimisation des coûts : Scavio $0.005 contre Tavily $0.008 par crédit
- Les pings de vérification de santé détectent les problèmes de fournisseur avant que les requêtes n'échouent
Exemple Python
import requests, os, time
PROVIDERS = {
'scavio': {'url': 'https://api.scavio.dev/api/v1/search',
'key_header': 'x-api-key', 'key': os.environ.get('SCAVIO_API_KEY')},
'tavily': {'url': 'https://api.tavily.com/search',
'key_header': 'Authorization', 'key': os.environ.get('TAVILY_API_KEY')},
}
def search(query: str, platform: str = 'google', preferred: str = 'scavio') -> dict:
provider = PROVIDERS[preferred]
try:
resp = requests.post(provider['url'],
headers={provider['key_header']: provider['key']},
json={'platform': platform, 'query': query}, timeout=10)
resp.raise_for_status()
return resp.json()
except Exception:
# Fallback to other provider
fallback = 'tavily' if preferred == 'scavio' else 'scavio'
fb = PROVIDERS[fallback]
return requests.post(fb['url'], headers={fb['key_header']: fb['key']},
json={'query': query}, timeout=10).json()Exemple JavaScript
async function search(query, platform = 'google', preferred = 'scavio') {
const providers = {
scavio: { url: 'https://api.scavio.dev/api/v1/search',
headers: { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' } },
tavily: { url: 'https://api.tavily.com/search',
headers: { Authorization: `Bearer ${process.env.TAVILY_API_KEY}`, 'Content-Type': 'application/json' } }
};
try {
const p = providers[preferred];
const resp = await fetch(p.url, { method: 'POST', headers: p.headers,
body: JSON.stringify({ platform, query }) });
if (!resp.ok) throw new Error(resp.status);
return resp.json();
} catch {
const fb = providers[preferred === 'scavio' ? 'tavily' : 'scavio'];
return fetch(fb.url, { method: 'POST', headers: fb.headers,
body: JSON.stringify({ query }) }).then(r => r.json());
}
}Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA
Communauté, publications et commentaires imbriqués de n'importe quel subreddit