Le problème
Les applications RAG qui ne recherchent qu'un index de documents local ne peuvent pas répondre aux questions en dehors de leur corpus. Les utilisateurs posent des questions sur l'actualité, les informations concurrentielles ou des sujets non couverts par les documents indexés, et le système soit hallucine à partir des données d'entraînement du LLM, soit répond 'Je ne sais pas'. Les deux réponses sont insatisfaisantes et poussent les utilisateurs à revenir à une recherche manuelle.
La solution Scavio
Mettez en œuvre une stratégie de récupération hybride : recherchez d'abord dans l'index local, et si le score de pertinence du meilleur résultat est inférieur à un seuil, repliez-vous sur l'API de recherche de Scavio pour obtenir des résultats web en direct. L'index local traite les requêtes de domaine connu avec une haute précision et un coût de latence nul. L'API de recherche gère tout le reste avec des données web actuelles. Fusionnez les deux ensembles de résultats dans le contexte du LLM avec des étiquettes de source claires afin que le modèle puisse attribuer sa réponse correctement.
Avant
Avant l'approche hybride, un bot de connaissances d'entreprise ne pouvait répondre qu'aux questions sur les documents internes. Lorsqu'un client demandait 'comment votre tarification se compare-t-elle au Concurrent X', le bot soit hallucinait une comparaison, soit disait qu'il ne pouvait pas aider. Les utilisateurs ont appris à ne pas faire confiance au bot pour autre chose que des recherches de FAQ de base.
Après
Après avoir ajouté le repli sur l'API de recherche, le bot vérifie d'abord les documents internes. Si la confiance de la recherche locale est faible, il interroge Scavio pour obtenir la page de tarification actuelle du concurrent et génère une comparaison précise. Les utilisateurs font désormais confiance au bot pour les questions internes et externes, et l'utilisation a été multipliée par 3.
À qui cela s'adresse
Développeurs créant des applications RAG qui doivent répondre à des questions au-delà de leur corpus de documents local sans halluciner ni refuser.
Avantages clés
- La recherche locale en priorité maintient la plupart des requêtes rapides et gratuites
- Le repli sur l'API de recherche couvre les questions hors corpus
- Le seuil de pertinence évite les appels API inutiles
- Les étiquettes de source dans le contexte permettent une attribution précise
- Dégradation élégante au lieu d'hallucination ou de refus
Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
CONFIDENCE_THRESHOLD = 0.7
def hybrid_retrieve(query: str, local_index) -> dict:
# Search local index first
local_results = local_index.search(query, top_k=3)
if local_results and local_results[0].score >= CONFIDENCE_THRESHOLD:
return {'source': 'local', 'results': [r.text for r in local_results]}
# Fallback to Scavio
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': query}, timeout=10)
web_results = resp.json().get('organic', [])[:3]
return {'source': 'web', 'results': [f"{r['title']}: {r['snippet']}" for r in web_results]}
# Use in RAG pipeline:
# context = hybrid_retrieve(user_question, my_meilisearch_index)
# prompt = f"Source: {context['source']}\n{chr(10).join(context['results'])}\nQuestion: {user_question}"Exemple JavaScript
const CONFIDENCE_THRESHOLD = 0.7;
async function hybridRetrieve(query, localIndex) {
const localResults = await localIndex.search(query, { limit: 3 });
if (localResults.hits?.length && localResults.hits[0]._rankingScore >= CONFIDENCE_THRESHOLD) {
return { source: 'local', results: localResults.hits.map(h => h.content) };
}
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 { source: 'web', results: (data.organic || []).slice(0, 3).map(r => `${r.title}: ${r.snippet}`) };
}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