Resumen
Routes consultas a traves de ambos un vector base de datos y un live search API basado on consulta classification. Merges resultados de ambos fuentes y feeds combined context to el LLM for grounded, completo respuestas.
Desencadenador
On cada usuario consulta to el RAG agent
Programación
On cada consulta (en tiempo real)
Pasos del flujo de trabajo
Clasificar el consulta
Determine si el consulta necesita internal docs solo, external search solo, o ambos. Palabras clave like 'actual', 'price', 'ultimo' senal external search necesita.
Retrieve de vector DB
Ejecutar similarity search contra el internal document almacenar. Return top-k mas relevante chunks.
Consulta live search if necesario
Si classified as needing external datos, consulta Scavio's endpoint de busqueda for actual public informacion.
Fusionar y re-rank resultados
Combine internal y external resultados. Puntuacion by relevance to el original consulta y fuente authority.
Feed to LLM
Pass el merged context to el LLM con clear fuente attribution (internal doc vs live search resultado).
Generar grounded respuesta
LLM produces un respuesta anchored in ambos internal knowledge y actual public datos, con fuente citaciones.
Implementacion en Python
import requests, os
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
def hybrid_retrieve(query, vector_db, k=5):
needs_external = any(s in query.lower()
for s in ["current", "latest", "price", "2026", "today", "competitor"])
internal = vector_db.similarity_search(query, k=k)
context = [{"source": "internal", "text": doc.page_content} for doc in internal]
if needs_external:
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google", "query": query}, timeout=10).json()
for result in r.get("organic", [])[:3]:
context.append({
"source": "web", "title": result.get("title"),
"text": result.get("snippet"), "url": result.get("link")
})
return contextImplementacion en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function hybridRetrieve(query, vectorDb, k = 5) {
const needsExternal = /current|latest|price|2026|today|competitor/i.test(query);
const internal = await vectorDb.similaritySearch(query, k);
const context = internal.map(d => ({source: "internal", text: d.pageContent}));
if (needsExternal) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query})
}).then(r => r.json());
(r.organic || []).slice(0, 3).forEach(result =>
context.push({source: "web", title: result.title,
text: result.snippet, url: result.link}));
}
return context;
}Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit
YouTube
Búsqueda de videos con transcripciones y metadatos
Amazon
Búsqueda de productos con precios, calificaciones y reseñas