Tavily a popularisé la recherche agent-first en 2023-2024, mais d'ici 2026, les équipes migrent pour une couverture de plateforme plus large et un prix par appel plus bas. Ce tutoriel est un guide de migration directe : correspondance des endpoints, adaptateur de format de réponse et un wrapper compatible Tavily pour les utilisateurs de LangChain.
Prérequis
- Intégration Tavily existante
- Python 3.10+ ou Node 20+
- Une clé API Scavio
Parcours
Étape 1: Correspondance des endpoints
Tavily /search correspond à Scavio /search. Tavily /extract correspond à Scavio /extract.
# Tavily
POST https://api.tavily.com/search
# Scavio
POST https://api.scavio.dev/api/v1/searchÉtape 2: Correspondance du corps de la requête
Le champ query de Tavily est le même. api_key passe dans l'en-tête x-api-key.
# Tavily: {"api_key": "...", "query": "foo"}
# Scavio: headers={'x-api-key': '...'}, body={'query': 'foo'}Étape 3: Écrire un adaptateur
Normalisez la réponse de Scavio au format de Tavily si vous voulez zéro modification de code en aval.
def tavily_shape(scavio_json):
return {
'results': [
{'url': r['link'], 'title': r['title'], 'content': r.get('snippet', '')}
for r in scavio_json.get('organic_results', [])
]
}Étape 4: Remplacement direct
Une seule fonction préserve vos points d'appel.
import requests, os
def tavily_search(query):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'query': query})
return tavily_shape(r.json())Étape 5: Échanger l'outil LangChain
Remplacez TavilySearchResults par un outil Scavio personnalisé.
from langchain.tools import Tool
scavio_tool = Tool.from_function(tavily_search, name='web_search', description='Web search')Exemple Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def tavily_search(query):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': query})
d = r.json()
return {'results': [{'url': x['link'], 'title': x['title'], 'content': x.get('snippet', '')} for x in d.get('organic_results', [])]}
print(tavily_search('anthropic sonnet 4.7 release'))Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function tavilySearch(query) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query })
});
const d = await r.json();
return { results: (d.organic_results || []).map(x => ({ url: x.link, title: x.title, content: x.snippet })) };
}Sortie attendue
Zero code changes downstream. Typical migration: 30-60 minutes. Cost reduction reported by users: 40-70% at same call volume.