Remplacez Brave Search dans un agent OpenClaw en échangeant l'appel HTTP de l'endpoint de l'API Brave Search vers l'endpoint de l'API Scavio. La migration nécessite de changer l'URL, de passer de l'en-tête de clé API Brave à l'en-tête x-api-key de Scavio, et de mettre à jour l'analyseur de réponse pour gérer la structure JSON de Scavio. L'échange prend moins de 10 minutes et donne à votre agent accès à Google, Amazon, YouTube, Reddit et Walmart via le même endpoint, alors que Brave Search ne renvoie que des résultats web.
Prérequis
- Python 3.8+ installé
- bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
- Un agent OpenClaw existant utilisant Brave Search
Parcours
Étape 1: Identifier les appels Brave Search
Trouvez et documentez tous les appels API Brave Search dans le code de votre agent qui nécessitent une migration.
import os, requests
# BEFORE: Brave Search API call
# resp = requests.get('https://api.search.brave.com/res/v1/web/search',
# headers={'X-Subscription-Token': os.environ['BRAVE_API_KEY']},
# params={'q': query})
# results = resp.json().get('web', {}).get('results', [])
# AFTER: Scavio API call
API_KEY = os.environ['SCAVIO_API_KEY']
def search(query: str, platform: str = 'google') -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': platform, 'query': query}, timeout=15)
return resp.json().get('organic_results', [])
results = search('test query')
print(f'Results: {len(results)}')Étape 2: Mapper les champs de réponse
Mappez les champs de réponse de Brave Search aux champs de réponse de Scavio pour l'analyseur de votre agent.
def brave_to_scavio(brave_result: dict) -> dict:
"""Map a Brave result to Scavio format for reference."""
# Brave fields -> Scavio fields:
# brave.title -> scavio.title (same)
# brave.url -> scavio.link
# brave.description -> scavio.snippet
# brave.age -> not directly available
# brave.extra_snippets -> not available
return {
'title': brave_result.get('title', ''),
'link': brave_result.get('url', ''),
'snippet': brave_result.get('description', ''),
}
def parse_scavio_results(results: list) -> list:
"""Parse Scavio results into agent-friendly format."""
parsed = []
for r in results:
parsed.append({
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', ''),
'source': r.get('source', ''),
})
return parsed
results = search('best python frameworks 2026')
parsed = parse_scavio_results(results)
for p in parsed[:3]:
print(f"{p['title'][:50]}: {p['snippet'][:60]}")Étape 3: Mettre à jour la définition de l'outil de l'agent
Remplacez la définition de l'outil Brave Search dans votre agent par l'outil de recherche Scavio.
class ScavioSearchTool:
"""Drop-in replacement for Brave Search tool in OpenClaw agents."""
def __init__(self):
self.api_key = os.environ['SCAVIO_API_KEY']
self.base_url = 'https://api.scavio.dev/api/v1/search'
def search(self, query: str, platform: str = 'google') -> list:
resp = requests.post(self.base_url,
headers={'x-api-key': self.api_key},
json={'platform': platform, 'query': query}, timeout=15)
resp.raise_for_status()
results = resp.json().get('organic_results', [])
return [{
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', ''),
} for r in results[:10]]
def search_multi(self, query: str, platforms: list = None) -> dict:
platforms = platforms or ['google']
all_results = {}
for p in platforms:
all_results[p] = self.search(query, p)
return all_results
tool = ScavioSearchTool()
results = tool.search('test query')
print(f'Results: {len(results)}')Étape 4: Ajouter une capacité multi-plateforme
Étendez l'agent avec une recherche spécifique à la plateforme que Brave ne supportait pas.
def agent_search(query: str, intent: str = 'general') -> list:
"""Route search to the best platform based on query intent."""
tool = ScavioSearchTool()
platform_map = {
'general': 'google',
'product': 'amazon',
'video': 'youtube',
'community': 'reddit',
'shopping': 'walmart',
}
platform = platform_map.get(intent, 'google')
results = tool.search(query, platform)
return results
# Agent can now route queries:
for intent, query in [
('general', 'best CRM 2026'),
('product', 'wireless earbuds under 100'),
('community', 'best IDE for Python'),
]:
results = agent_search(query, intent)
print(f'[{intent}] {query}: {len(results)} results')Étape 5: Tester la migration
Vérifiez que l'agent migré produit des résultats équivalents ou meilleurs que Brave Search.
def test_migration():
tool = ScavioSearchTool()
test_queries = [
'Python web frameworks comparison',
'how to deploy docker containers',
'best database for small projects',
]
for query in test_queries:
results = tool.search(query)
print(f'Query: {query}')
print(f' Results: {len(results)}')
if results:
print(f' Top: {results[0]["title"][:50]}')
print(f' URL: {results[0]["url"][:60]}')
print()
# Test multi-platform (not possible with Brave)
multi = tool.search_multi('best laptop 2026', ['google', 'amazon'])
for p, r in multi.items():
print(f'{p}: {len(r)} results')
print('\nMigration test passed')
test_migration()Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
# Drop-in Brave Search replacement:
def search(query, platform='google'):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': platform, 'query': query}).json()
return [{'title': r['title'], 'url': r.get('link', ''), 'snippet': r.get('snippet', '')}
for r in data.get('organic_results', [])[:5]]
print(search('test query'))Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
// Drop-in Brave Search replacement:
async function search(query, platform = 'google') {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform, query})
});
return ((await r.json()).organic_results || []).slice(0, 5)
.map(r => ({title: r.title, url: r.link, snippet: r.snippet}));
}
search('test query').then(console.log);Sortie attendue
A fully migrated OpenClaw agent using Scavio instead of Brave Search, with multi-platform search capability and identical result parsing.