Después de que Nebius adquiriera Tavily por 275 millones de dólares en febrero de 2026, los equipos que utilizan TavilySearchResults en LangChain se enfrentan a la incertidumbre del proveedor. Reemplazar Tavily con Scavio requiere una clase de herramienta personalizada que envuelve la API de Scavio en la interfaz de herramientas de LangChain. El intercambio le ofrece búsquedas multiplataforma (Google, Reddit, YouTube, Amazon) en lugar de los resultados exclusivos de la web de Tavily, sin riesgo de adquisición.
Requisitos previos
- Python 3.10+
- langchain y solicitudes instaladas
- Una clave API de Scavio de scavio.dev
- Un agente de LangChain existente que utiliza Tavily
Guia paso a paso
Paso 1: Crea la herramienta de búsqueda Scavio para LangChain
Cree una herramienta LangChain personalizada que llame a la API de Scavio como reemplazo directo de TavilySearchResults.
import os, requests
from langchain.tools import Tool
API_KEY = os.environ['SCAVIO_API_KEY']
def scavio_search(query: str) -> str:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us'})
results = resp.json().get('organic_results', [])[:5]
if not results: return 'No results found.'
return '\n\n'.join(f"{r['title']}\n{r.get('snippet', '')}\nURL: {r['link']}" for r in results)
scavio_tool = Tool(name='web_search',
description='Search the web for current information.',
func=scavio_search)Paso 2: Agregar variantes de búsqueda multiplataforma
Cree herramientas de Reddit y YouTube que Tavily nunca ofreció.
def scavio_reddit(query: str) -> str:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'platform': 'reddit', 'country_code': 'us'})
results = resp.json().get('organic_results', [])[:5]
if not results: return 'No Reddit discussions found.'
return '\n\n'.join(f"{r['title']}\n{r.get('snippet', '')}\nURL: {r['link']}" for r in results)
def scavio_youtube(query: str) -> str:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'platform': 'youtube', 'country_code': 'us'})
results = resp.json().get('organic_results', [])[:5]
if not results: return 'No YouTube videos found.'
return '\n\n'.join(f"{r['title']}\n{r.get('snippet', '')}\nURL: {r['link']}" for r in results)
reddit_tool = Tool(name='reddit_search', description='Search Reddit for discussions.', func=scavio_reddit)
youtube_tool = Tool(name='youtube_search', description='Search YouTube for videos.', func=scavio_youtube)Paso 3: Intercambia herramientas en tu agente existente
Reemplace TavilySearchResults con las herramientas Scavio.
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
# BEFORE: tools = [TavilySearchResults(max_results=5)]
# AFTER:
tools = [scavio_tool, reddit_tool, youtube_tool]
llm = ChatOpenAI(model='gpt-4o', temperature=0)
prompt = ChatPromptTemplate.from_messages([
('system', 'Use web_search for general queries, reddit_search for opinions, youtube_search for videos.'),
('human', '{input}'),
('placeholder', '{agent_scratchpad}'),
])
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = executor.invoke({'input': 'What are developers saying about Tavily alternatives?'})
print(result['output'])Paso 4: Probar la migración
Ejecute consultas de comparación para verificar la calidad de los resultados.
queries = ['best SERP API 2026', 'TikTok API for brands', 'how to build SEO dashboard']
for q in queries:
print(f'\nQuery: {q}')
g = scavio_search(q)
r = scavio_reddit(q)
print(f' Google: {len(g.split(chr(10)+chr(10)))} results')
print(f' Reddit: {len(r.split(chr(10)+chr(10)))} results')
print(f' Cost: $0.01 (2 credits)')Ejemplo en Python
import os, requests
from langchain.tools import Tool
API_KEY = os.environ['SCAVIO_API_KEY']
def search(query, platform='google'):
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'platform': platform, 'country_code': 'us'})
results = resp.json().get('organic_results', [])[:5]
return '\n\n'.join(f"{r['title']}\n{r.get('snippet', '')}" for r in results) or 'No results.'
tools = [
Tool(name='web_search', description='Search the web.', func=lambda q: search(q)),
Tool(name='reddit_search', description='Search Reddit.', func=lambda q: search(q, 'reddit')),
]
print(search('tavily alternatives 2026'))Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
async function search(query, platform = 'google') {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({ query, platform, country_code: 'us' })
}).then(r => r.json());
return (data.organic_results || []).slice(0, 5)
.map(r => `${r.title}\n${r.snippet || ''}`).join('\n\n') || 'No results.';
}
async function main() {
console.log(await search('tavily alternatives 2026'));
console.log(await search('tavily alternatives', 'reddit'));
}
main().catch(console.error);Salida esperada
Query: What are developers saying about Tavily alternatives?
> Calling: reddit_search("Tavily alternatives developer opinions 2026")
Tavily acquired by Nebius - what are you switching to?
Several devs switching to Scavio and Exa...
> Final answer: Developers on Reddit discuss several Tavily alternatives...