ScavioScavio
ProduitTarifsDocumentation
ConnexionCommencer
  1. Accueil
  2. Tutoriels
  3. Comment ancrer un LLM local avec des données de recherche multi-plateformes
Tutoriel

Comment ancrer un LLM local avec des données de recherche multi-plateformes

Alimentez Ollama ou llama.cpp avec les données Google, Reddit et YouTube pour ancrer les réponses du LLM local avec un contexte multi-plateformes en temps réel. Guide étape par étape.

Obtenez une clé API gratuiteDocumentation API

Les LLM locaux comme Llama 3 et Mistral fonctionnent sans envoyer de données vers le cloud mais manquent de connaissances en temps réel. Les ancrer avec des données de recherche multi-plateformes résout ce problème : votre LLM obtient les résultats Google pour les réponses factuelles, les publications Reddit pour les opinions de la communauté, et les métadonnées YouTube pour le contexte vidéo. Scavio fournit les trois plateformes via un seul endpoint POST à 0,005 $ par requête. Ce tutoriel construit une couche d'ancrage qui achemine les requêtes vers les bonnes plateformes en fonction de l'intention.

Prérequis

  • Ollama ou llama.cpp fonctionnant localement
  • Python 3.9+ installé
  • bibliothèque requests installée
  • Une clé API Scavio depuis scavio.dev

Parcours

Étape 1: Configurer des fonctions de recherche spécifiques à chaque plateforme

Créez des fonctions de recherche pour Google, Reddit et YouTube. Chacune normalise les résultats dans un format commun avec des métadonnées spécifiques à la plateforme.

Python
import os, requests

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
URL = 'https://api.scavio.dev/api/v1/search'
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}

def search_google(query: str, num: int = 5) -> list:
    resp = requests.post(URL, headers=H,
        json={'query': query, 'country_code': 'us', 'num_results': num})
    return [{'source': 'google', 'title': r['title'], 'snippet': r.get('snippet', ''),
             'url': r['link']} for r in resp.json().get('organic_results', [])]

def search_reddit(query: str, num: int = 5) -> list:
    resp = requests.post(URL, headers=H,
        json={'query': f'site:reddit.com {query}', 'country_code': 'us', 'num_results': num})
    return [{'source': 'reddit', 'title': r['title'], 'snippet': r.get('snippet', ''),
             'url': r['link']} for r in resp.json().get('organic_results', [])]

def search_youtube(query: str, num: int = 3) -> list:
    resp = requests.post(URL, headers=H,
        json={'query': f'site:youtube.com {query}', 'country_code': 'us', 'num_results': num})
    return [{'source': 'youtube', 'title': r['title'].replace(' - YouTube', ''),
             'snippet': r.get('snippet', ''), 'url': r['link']}
            for r in resp.json().get('organic_results', [])]

print('Multi-platform search ready')

Étape 2: Construire le routeur d'intention

Classez les requêtes par intention pour choisir les plateformes à rechercher. Les questions factuelles vont sur Google, les questions d'opinion sur Reddit, les requêtes pratiques sur YouTube.

Python
def classify_intent(query: str) -> list[str]:
    q = query.lower()
    platforms = []
    # Always include Google for factual grounding
    platforms.append('google')
    # Opinion and discussion queries -> Reddit
    opinion_words = ['best', 'worst', 'recommend', 'opinion', 'experience',
                     'worth it', 'vs', 'alternative', 'should i']
    if any(w in q for w in opinion_words):
        platforms.append('reddit')
    # Tutorial and how-to queries -> YouTube
    howto_words = ['how to', 'tutorial', 'guide', 'setup', 'install',
                   'configure', 'build', 'demo', 'walkthrough']
    if any(w in q for w in howto_words):
        platforms.append('youtube')
    return platforms

# Test intent classification
for q in ['what is the capital of France',
          'best laptop for programming 2026',
          'how to deploy fastapi on railway']:
    print(f'{q} -> {classify_intent(q)}')

Étape 3: Créer le constructeur de contexte multi-plateforme

Rassemblez les résultats de toutes les plateformes pertinentes et formatez-les en tant que contexte LLM. Chaque source est clairement étiquetée afin que le LLM puisse citer les plateformes dans sa réponse.

Python
import time

def build_context(query: str) -> str:
    platforms = classify_intent(query)
    all_results = []
    for p in platforms:
        if p == 'google':
            all_results.extend(search_google(query))
        elif p == 'reddit':
            all_results.extend(search_reddit(query))
        elif p == 'youtube':
            all_results.extend(search_youtube(query))
        time.sleep(0.2)
    # Format for LLM consumption
    lines = [f'Search results for: {query}', f'Platforms searched: {", ".join(platforms)}', '']
    for i, r in enumerate(all_results, 1):
        lines.append(f'[{i}] ({r["source"].upper()}) {r["title"]}')
        if r['snippet']:
            lines.append(f'    {r["snippet"][:200]}')
        lines.append(f'    URL: {r["url"]}')
        lines.append('')
    context = '\n'.join(lines)
    print(f'Built context: {len(all_results)} results from {len(platforms)} platforms')
    return context

ctx = build_context('best python web framework 2026')
print(ctx[:500])

Étape 4: Connecter au LLM local

Envoyez le contexte de recherche et la question de l'utilisateur à Ollama. L'invite système ordonne au LLM de répondre uniquement à partir des résultats de recherche et de citer les sources par numéro et plateforme.

Python
LLM_URL = 'http://localhost:11434/v1/chat/completions'

def ask_local_llm(context: str, question: str) -> str:
    messages = [
        {'role': 'system', 'content': (
            'You are a helpful assistant. Answer based on the search results provided. '
            'Cite sources as [1], [2] etc. Mention which platform (Google, Reddit, YouTube) '
            'the information comes from. If results are insufficient, say so.'
        )},
        {'role': 'user', 'content': f'{context}\n\nQuestion: {question}'}
    ]
    resp = requests.post(LLM_URL, json={
        'model': 'llama3', 'messages': messages, 'max_tokens': 512
    })
    return resp.json()['choices'][0]['message']['content']

def grounded_answer(question: str) -> dict:
    context = build_context(question)
    answer = ask_local_llm(context, question)
    platforms = classify_intent(question)
    return {'question': question, 'answer': answer,
            'platforms': platforms, 'cost': len(platforms) * 0.005}

result = grounded_answer('best python web framework 2026')
print(f'Q: {result["question"]}')
print(f'A: {result["answer"]}')
print(f'Platforms: {result["platforms"]}, Cost: ${result["cost"]}')

Exemple Python

Python
import os, requests, time

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
URL = 'https://api.scavio.dev/api/v1/search'
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
LLM = 'http://localhost:11434/v1/chat/completions'

def multi_search(query):
    results = []
    for prefix in ['', 'site:reddit.com ', 'site:youtube.com ']:
        resp = requests.post(URL, headers=H,
            json={'query': f'{prefix}{query}', 'country_code': 'us', 'num_results': 3})
        results.extend(resp.json().get('organic_results', []))
        time.sleep(0.2)
    return results

def grounded_ask(question):
    results = multi_search(question)
    ctx = '\n'.join(f'[{i+1}] {r["title"]}: {r.get("snippet","")}' for i, r in enumerate(results))
    resp = requests.post(LLM, json={'model': 'llama3', 'messages': [
        {'role': 'system', 'content': 'Answer from search results. Cite [1],[2] etc.'},
        {'role': 'user', 'content': f'{ctx}\n\nQ: {question}'}], 'max_tokens': 512})
    return resp.json()['choices'][0]['message']['content']

print(grounded_ask('best python framework for APIs 2026'))

Exemple JavaScript

JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
const URL = 'https://api.scavio.dev/api/v1/search';

async function multiSearch(query) {
  const results = [];
  for (const prefix of ['', 'site:reddit.com ', 'site:youtube.com ']) {
    const resp = await fetch(URL, {
      method: 'POST',
      headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
      body: JSON.stringify({ query: `${prefix}${query}`, country_code: 'us', num_results: 3 })
    });
    results.push(...((await resp.json()).organic_results || []));
  }
  return results;
}

async function groundedAsk(question) {
  const results = await multiSearch(question);
  const ctx = results.map((r, i) => `[${i+1}] ${r.title}: ${r.snippet || ''}`).join('\n');
  const resp = await fetch('http://localhost:11434/v1/chat/completions', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ model: 'llama3', messages: [
      { role: 'system', content: 'Answer from search results. Cite [1],[2].' },
      { role: 'user', content: `${ctx}\n\nQ: ${question}` }], max_tokens: 512 })
  });
  return (await resp.json()).choices[0].message.content;
}

groundedAsk('best python framework for APIs 2026').then(console.log);

Sortie attendue

JSON
Built context: 9 results from 3 platforms

Q: best python web framework 2026
A: Based on the search results across multiple platforms:

Google sources indicate FastAPI and Django remain the top choices [1][2].
Reddit discussions show strong community preference for FastAPI for new
API projects [4][5]. YouTube tutorials are heavily focused on FastAPI
deployment [7][8].

Platforms: ['google', 'reddit', 'youtube'], Cost: $0.015

Tutoriels associés

  • Comment ajouter une recherche à un assistant personnel Ollama
  • Comment construire une base de connaissances personnelle avec un LLM local et une recherche
  • Comment ajouter un ancrage de recherche à un pipeline RAG LangChain en 2026
  • Comment construire un agent RAG avec LangChain et Scavio

Questions fréquentes

La plupart des développeurs terminent ce tutoriel en 15 à 30 minutes. Vous aurez besoin d'une clé API Scavio (l'offre gratuite suffit) et d'un environnement Python ou JavaScript fonctionnel.

Ollama ou llama.cpp fonctionnant localement. Python 3.9+ installé. bibliothèque requests installée. Une clé API Scavio depuis scavio.dev. Une clé API Scavio vous donne 50 crédits gratuits à l'inscription.

Oui. L'offre gratuite comprend 50 crédits à l'inscription, ce qui est largement suffisant pour terminer ce tutoriel et prototyper une solution fonctionnelle.

Scavio dispose d'un package natif LangChain (langchain-scavio), d'un serveur MCP et d'une API REST simple qui fonctionne avec tout client HTTP. Ce tutoriel utilise the raw REST API, mais vous pouvez l'adapter à votre framework de prédilection.

Ressources connexes

Use Case

Ancrage de recherche pour LLM local via API

Read more
Best Of

Meilleures API de recherche pour l'ancrage des LLM open source en 2026

Read more
Best Of

Meilleures API de données multi-plateformes pour le grounding des agents en mai 2026

Read more
Solution

Ancrez les réponses du LLM avec des données de recherche en temps réel

Read more
Use Case

Actualités LLM locales et ancrage de recherche

Read more
Workflow

Pipeline quotidien d'ancrage de recherche LLM local

Read more

Commencer

Alimentez Ollama ou llama.cpp avec les données Google, Reddit et YouTube pour ancrer les réponses du LLM local avec un contexte multi-plateformes en temps réel. Guide étape par étape.

Obtenez une clé API gratuiteLire la documentation
ScavioScavio

API de recherche en temps réel pour agents IA. Recherchez sur toutes les plateformes, pas seulement Google.

Produit

  • Fonctionnalités
  • Tarifs
  • Tableau de bord
  • Affiliés

Développeurs

  • Documentation
  • Référence API
  • Démarrage rapide
  • Intégration MCP
  • SDK Python

Alternatives

  • Alternative à Tavily
  • Alternative à SerpAPI
  • Alternative à Firecrawl
  • Alternative à Exa

Outils

  • Formateur JSON
  • cURL vers code
  • Compteur de jetons
  • Tous les outils

© 2026 Scavio. Tous droits réservés.

Featured on TAAFT
Conditions d'utilisationPolitique de confidentialité