Le problème
Les assistants IA basés sur le cloud nécessitent d'envoyer toutes vos questions et le contexte vers des serveurs externes. Les utilisateurs soucieux de leur vie privée veulent un assistant personnel qui fonctionne localement mais peut toujours répondre à des questions sur l'actualité, les prix et les informations publiques. Un LLM purement local n'a pas accès à Internet, ce qui le rend inutile pour tout ce qui est sensible au facteur temps.
La solution Scavio
Exécutez Ollama localement avec un modèle comme Llama 3 ou Mistral, et ajoutez Scavio comme couche de recherche externe. Lorsque le LLM local détecte une requête nécessitant des informations actuelles, il appelle l'API de Scavio pour obtenir des données fraîches, puis génère sa réponse en utilisant les résultats de recherche comme contexte. Tout le raisonnement se fait localement ; seule la requête de recherche quitte votre machine.
Avant
Ollama exécutant Llama 3 localement. L'utilisateur demande 'What time does the Apple Store in Austin close today?' Le modèle devine ou refuse. Pas d'accès Internet signifie aucune information actuelle. La confidentialité est préservée mais l'assistant est inutile pour les questions du monde réel.
Après
Recherche Ollama + Scavio. Le modèle détecte que la requête a besoin de données externes, appelle Scavio pour obtenir les résultats Google Maps (0,005 $), récupère les horaires actuels du magasin, génère la réponse localement. Seule la requête 'Apple Store Austin hours' quitte la machine. Confidentialité préservée, question répondue.
À qui cela s'adresse
Développeurs et chercheurs soucieux de leur vie privée qui souhaitent un assistant IA personnel fonctionnant localement mais pouvant accéder aux informations web actuelles lorsque nécessaire.
Avantages clés
- Tout le raisonnement reste sur votre machine locale
- Seules les requêtes de recherche quittent votre réseau -- aucun contexte de conversation n'est envoyé à l'extérieur
- Scavio à 0,005 $/requête rend les recherches externes presque gratuites
- Fonctionne avec tout modèle pris en charge par Ollama (Llama 3, Mistral, Phi-3)
- Combine la confidentialité locale avec les connaissances web en temps réel
Exemple Python
import requests, os, json
SCAVIO_KEY = os.environ["SCAVIO_API_KEY"]
OLLAMA_URL = "http://localhost:11434/api/generate"
def scavio_search(query: str) -> str:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": SCAVIO_KEY, "Content-Type": "application/json"},
json={"query": query, "country_code": "us"},
timeout=10,
)
results = resp.json().get("organic_results", [])[:5]
return "\n".join(f"- {r['title']}: {r['snippet']}" for r in results)
def ask_local_llm(question: str) -> str:
# Step 1: Check if question needs search
check = requests.post(OLLAMA_URL, json={
"model": "llama3",
"prompt": f"Does this question need current internet data? Answer YES or NO only: {question}",
"stream": False,
}).json()["response"].strip()
context = ""
if "YES" in check.upper():
context = f"\nCurrent search results:\n{scavio_search(question)}"
# Step 2: Generate answer locally with optional search context
resp = requests.post(OLLAMA_URL, json={
"model": "llama3",
"prompt": f"Answer this question using the provided context if available.{context}\n\nQuestion: {question}",
"stream": False,
})
return resp.json()["response"]
answer = ask_local_llm("What are the best rated coffee shops in Austin?")
print(answer)Exemple JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
const OLLAMA_URL = "http://localhost:11434/api/generate";
async function scavioSearch(query) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: {"x-api-key": SCAVIO_KEY, "Content-Type": "application/json"},
body: JSON.stringify({ query, country_code: "us" }),
});
const results = (await res.json()).organic_results || [];
return results.slice(0, 5).map(r => `- ${r.title}: ${r.snippet}`).join("\n");
}
async function askLocalLLM(question) {
const check = await fetch(OLLAMA_URL, {
method: "POST",
body: JSON.stringify({
model: "llama3",
prompt: `Does this question need current internet data? Answer YES or NO only: ${question}`,
stream: false,
}),
}).then(r => r.json());
let context = "";
if (check.response.toUpperCase().includes("YES")) {
context = `\nCurrent search results:\n${await scavioSearch(question)}`;
}
const resp = await fetch(OLLAMA_URL, {
method: "POST",
body: JSON.stringify({
model: "llama3",
prompt: `Answer this question using the provided context if available.${context}\n\nQuestion: ${question}`,
stream: false,
}),
}).then(r => r.json());
return resp.response;
}
const answer = await askLocalLLM("What are the best rated coffee shops in Austin?");
console.log(answer);Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA
Google Maps
Recherche d'entreprises locales avec notes et coordonnées
YouTube
Recherche de vidéos avec transcriptions et métadonnées
Communauté, publications et commentaires imbriqués de n'importe quel subreddit