Remplacez Brave Search dans un agent IA existant en mettant à jour la définition de l'outil pour appeler le point de terminaison POST de Scavio au lieu du point de terminaison GET de Brave, puis en ajustant l'analyseur de réponse pour la structure JSON de Scavio. La plupart des frameworks d'agents (LangChain, CrewAI, personnalisés) utilisent un modèle d'encapsulation d'outil où le fournisseur de recherche est une seule fonction. Modifier cette fonction est la seule modification nécessaire. Scavio ajoute la recherche Amazon, YouTube, Reddit et Walmart en plus de Google, offrant à l'agent plus de sources de données via une seule clé API. Ce tutoriel couvre le remplacement pour les trois modèles d'agents les plus courants.
Prérequis
- Un agent existant utilisant Brave Search comme outil
- Python 3.8+ installé
- bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
Parcours
Étape 1: Identifier le site d'appel Brave Search
Trouvez où votre agent appelle Brave Search. Il s'agit généralement d'une fonction qui prend une chaîne de requête et renvoie des résultats.
# Common patterns to look for in your codebase:
# Pattern 1: Direct HTTP call
# requests.get('https://api.search.brave.com/res/v1/web/search', ...)
#
# Pattern 2: LangChain BraveSearchWrapper
# from langchain_community.tools import BraveSearch
#
# Pattern 3: Custom tool function
# def web_search(query): ...
# Replacement for all patterns:
import requests, os
def scavio_search(query: str, platform: str = 'google') -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': platform, 'query': query}, timeout=10)
resp.raise_for_status()
return resp.json().get('organic_results', [])Étape 2: Créer l'encapsuleur compatible Brave
Construisez un encapsuleur qui correspond au format de sortie de Brave afin que le code en aval n'ait pas besoin de modifications.
def brave_compatible_wrapper(query: str) -> str:
"""Returns results in the same string format Brave Search tools use."""
results = scavio_search(query)
output_parts = []
for r in results[:5]:
output_parts.append(f"Title: {r.get('title', '')}")
output_parts.append(f"URL: {r.get('link', '')}")
output_parts.append(f"Description: {r.get('snippet', '')}")
output_parts.append('')
return '\n'.join(output_parts)
# Test the wrapper:
print(brave_compatible_wrapper('best crm for startups 2026'))Étape 3: Remplacer dans votre framework d'agent
Échangez la définition de l'outil dans votre agent. Voici des exemples pour les agents personnalisés et les agents de style LangChain.
# Custom agent - just replace the function:
# BEFORE:
# tools = [{'name': 'web_search', 'function': brave_search}]
# AFTER:
tools = [{'name': 'web_search', 'function': brave_compatible_wrapper}]
# LangChain-style replacement:
from typing import Optional
class ScavioSearchTool:
name = 'web_search'
description = 'Search the web for current information'
def run(self, query: str) -> str:
return brave_compatible_wrapper(query)
async def arun(self, query: str) -> str:
return self.run(query)
# Replace: tools = [BraveSearch(api_key=...)]
# With:
tool = ScavioSearchTool()
print(tool.run('python web frameworks 2026'))Étape 4: Vérifier le remplacement
Exécutez votre agent avec une requête de test et comparez la qualité de la sortie pour vous assurer que le remplacement fonctionne correctement.
def verify_replacement():
test_queries = [
'latest python release 2026',
'best project management tools',
'react server components tutorial',
]
for q in test_queries:
results = scavio_search(q)
assert len(results) > 0, f'No results for: {q}'
assert results[0].get('title'), f'Missing title for: {q}'
assert results[0].get('link', '').startswith('http'), f'Invalid URL for: {q}'
print(f'{q}: {len(results)} results, first: {results[0]["title"][:50]}')
print('All checks passed')
verify_replacement()Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def scavio_search(query):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': query}).json()
return data.get('organic_results', [])
# Drop-in replacement for brave_search(query):
def web_search_tool(query):
results = scavio_search(query)
return '\n'.join(f"{r['title']}: {r.get('snippet', '')}" for r in results[:5])
print(web_search_tool('best crm 2026'))Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function scavioSearch(query) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform: 'google', query})
});
return (await r.json()).organic_results || [];
}
// Drop-in replacement for braveSearch(query):
async function webSearchTool(query) {
const results = await scavioSearch(query);
return results.slice(0, 5).map(r => `${r.title}: ${r.snippet || ''}`).join('\n');
}
webSearchTool('best crm 2026').then(console.log);Sortie attendue
An agent with Brave Search replaced by Scavio, using a compatibility wrapper that preserves the existing tool interface and output format.