Le problème
Les projets LangChain qui utilisent des outils de scraping web (chargeurs BeautifulSoup, scrapers Playwright ou extracteurs basés sur Selenium) font face à une maintenance constante : la détection anti-bot casse les scrapers, les mises en page HTML changent sans préavis et les coûts proxy augmentent. Chaque scraper dans la chaîne est un point fragile qui nécessite une surveillance et des correctifs. La communauté LangChain s'est tournée vers les API structurées plutôt que le scraping brut, mais les chemins de migration ne sont pas bien documentés.
La solution Scavio
Remplacez les outils de scraping LangChain par l'API de recherche de Scavio en tant qu'outil personnalisé. La migration est simple : supprimez la définition de l'outil scraper, ajoutez un nouvel outil qui appelle le point de terminaison REST de Scavio, et mettez à jour le prompt pour référencer le nouveau nom d'outil. La réponse est déjà du JSON structuré, vous n'avez donc pas besoin d'une étape d'analyse. Pour les agents LangChain, définissez l'outil avec une description claire afin que le LLM sache quand l'utiliser. Pour les chaînes LangChain, remplacez le nœud scraper par un nœud d'appel API.
Avant
Avant la migration, un agent de recherche LangChain utilisait un scraper Google basé sur Playwright qui nécessitait 150 lignes de Python, un runtime de navigateur sans tête et un abonnement proxy. Le scraper tombait en panne toutes les 2-3 semaines lorsque Google mettait à jour sa mise en page, nécessitant des correctifs d'urgence.
Après
Après avoir migré vers l'API de recherche de Scavio, la définition de l'outil est de 20 lignes de Python. Pas de runtime de navigateur, pas d'abonnement proxy, pas d'analyse HTML. L'agent reçoit directement du JSON structuré. L'outil n'a nécessité aucun correctif en 4 mois car le contrat API est stable.
À qui cela s'adresse
Les développeurs LangChain qui maintiennent des outils de scraping web fragiles qui souhaitent migrer vers une API de recherche stable et structurée sans réécrire leur architecture d'agent.
Avantages clés
- Remplacez 150 lignes de code de scraping par 20 lignes d'appels API
- Éliminez les dépendances au navigateur sans tête et au proxy
- La réponse JSON structurée ne nécessite aucune analyse HTML
- Le contrat API stable élimine les pannes dues aux changements de mise en page
- Couverture multiplateforme à partir d'une seule définition d'outil
Exemple Python
from langchain.tools import tool
import requests, os
@tool
def web_search(query: str) -> str:
"""Search the web for current information. Returns structured results from Google."""
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': 'google', 'query': query}, timeout=10)
results = resp.json().get('organic', [])[:5]
return '\n'.join(f"{r['title']}: {r['snippet']} ({r['link']})" for r in results)
# Use in a LangChain agent:
# from langchain.agents import create_tool_calling_agent
# agent = create_tool_calling_agent(llm, [web_search], prompt)
# agent_executor = AgentExecutor(agent=agent, tools=[web_search])Exemple JavaScript
import { tool } from '@langchain/core/tools';
import { z } from 'zod';
const webSearch = tool(async ({ query }) => {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ platform: 'google', query })
});
const data = await resp.json();
return (data.organic || []).slice(0, 5)
.map(r => `${r.title}: ${r.snippet} (${r.link})`).join('\n');
}, {
name: 'web_search',
description: 'Search the web for current information.',
schema: z.object({ query: z.string().describe('Search query') })
});Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA
Communauté, publications et commentaires imbriqués de n'importe quel subreddit
YouTube
Recherche de vidéos avec transcriptions et métadonnées
Amazon
Recherche de produits avec prix, notes et avis
Walmart
Recherche de produits avec données de prix et d'exécution