Reemplace Brave Search en un agente de IA existente actualizando la definición de la herramienta para llamar al punto final POST de Scavio en lugar del punto final GET de Brave, luego ajustando el analizador de respuesta para la estructura JSON de Scavio. La mayoría de los marcos de agentes (LangChain, CrewAI, personalizados) utilizan un patrón contenedor de herramientas donde el proveedor de búsqueda es una función única. Cambiar esa función es la única modificación necesaria. Scavio agrega la búsqueda de Amazon, YouTube, Reddit y Walmart además de Google, brindando al agente más fuentes de datos a través de una clave API. Este tutorial cubre el reemplazo de los tres patrones de agentes más comunes.
Requisitos previos
- Un agente existente que utiliza Brave Search como herramienta
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
Guia paso a paso
Paso 1: Identificar el sitio de llamadas de Brave Search
Encuentre dónde llama su agente Brave Search. Normalmente es una función que toma una cadena de consulta y devuelve resultados.
# 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', [])Paso 2: Crea el contenedor compatible con Brave
Cree un contenedor que coincida con el formato de salida de Brave para que el código posterior no necesite cambios.
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'))Paso 3: Reemplazar en el marco de su agente
Cambie la definición de herramienta en su agente. A continuación se muestran ejemplos de agentes personalizados y agentes estilo 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'))Paso 4: Verificar el reemplazo
Ejecute su agente con una consulta de prueba y compare la calidad del resultado para garantizar que el reemplazo funcione correctamente.
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()Ejemplo en 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'))Ejemplo en 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);Salida esperada
An agent with Brave Search replaced by Scavio, using a compatibility wrapper that preserves the existing tool interface and output format.