Un post sur r/Rag demandait quel scraper utiliser pour d'énormes données RAG. Le recadrage : pour le contenu public indexé, les API de recherche remplacent les scrapers. Pas de gestion de proxy, pas de lutte anti-bot, du JSON structuré dès le départ.
Prérequis
- Clé API Scavio
- Base de données vectorielle (Chroma, Pinecone ou Weaviate)
- Clé API LLM
Parcours
Étape 1: Générer des requêtes initiales
Créez 50 à 200 requêtes initiales pour votre domaine de connaissances.
seed_queries = [
'AI agent architecture patterns 2026',
'multi-agent orchestration frameworks',
'LLM tool calling best practices',
# ... 50-200 queries covering your domain
]Étape 2: Récupérez les résultats structurés depuis Scavio
Recherchez sur Google + Reddit pour chaque requête.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def fetch_sources(query):
google = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': query}).json()
reddit = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'reddit', 'query': query}).json()
return {'google': google, 'reddit': reddit}Étape 3: Extrayez et dédupliquez le contenu
Récupérez les URLs uniques, utilisez /extract pour le contenu complet si nécessaire.
seen_urls = set()
def extract_unique(results):
docs = []
for r in results.get('organic_results', []):
if r['link'] not in seen_urls:
seen_urls.add(r['link'])
docs.append({'url': r['link'], 'title': r['title'], 'snippet': r['snippet']})
return docsÉtape 4: Découpez en segments et générez des embeddings
Divisez le contenu en segments et générez des embeddings.
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
embeddings = OpenAIEmbeddings()
def process_doc(doc):
chunks = splitter.split_text(doc['snippet'])
return [(c, embeddings.embed_query(c)) for c in chunks]Étape 5: Interrogez le pipeline RAG
Intégrez la requête, récupérez les segments pertinents, générez une réponse.
def rag_query(question):
q_emb = embeddings.embed_query(question)
# Retrieve top-5 chunks from vector DB
# Feed to LLM with: 'Answer based on these sources: {chunks}'
# Return answer with source URLsExemple Python
# Cost math: 200 seed queries × 2 platforms = 400 API calls = $2
# Each call returns 10 results = 4,000 unique sources
# Top 2,000 via /extract = ~$10 additional
# Total corpus build: ~$12 for 2,000 high-quality documentsExemple JavaScript
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: seedQuery})
});Sortie attendue
RAG pipeline sourcing documents from Google + Reddit via Scavio. No scraping infrastructure, no proxy costs, structured JSON throughout.