ScavioScavio
ProduitTarifsDocumentation
ConnexionCommencer
  1. Accueil
  2. Tutoriels
  3. Comment ajouter une recherche Web à un agent LLM local
Tutoriel

Comment ajouter une recherche Web à un agent LLM local

Donnez à votre agent LLM local une recherche Web en temps réel via un simple outil HTTP. Fonctionne avec Ollama, llama.cpp et tout modèle prenant en charge l'appel d'outil.

Obtenez une clé API gratuiteDocumentation API

Les LLM locaux exécutés avec Ollama ou llama.cpp n'ont pas accès à Internet par défaut. Lorsque les utilisateurs posent des questions sur l'actualité, les prix ou tout sujet sensible au temps, le modèle soit hallucine, soit refuse de répondre. Ajouter un outil de recherche Web résout ce problème. L'API Scavio agit comme un point de terminaison de recherche HTTP léger qui renvoie du JSON structuré, suffisamment petit pour tenir dans la fenêtre de contexte de n'importe quel modèle local. Ce tutoriel connecte un outil de recherche à un agent Ollama en utilisant Python, afin que le modèle puisse décider de manière autonome quand chercher et fonder ses réponses sur des données en direct. Pas besoin de LangChain ni de framework lourd.

Prérequis

  • Ollama installé avec un modèle compatible outil (llama3.1, mistral, etc.)
  • Python 3.10+
  • Bibliothèque requests installée
  • Une clé API Scavio depuis scavio.dev

Parcours

Étape 1: Définir le schéma de l'outil de recherche

Créez une définition d'outil qui indique au LLM ce que fait la fonction de recherche et les paramètres qu'elle accepte. Ollama utilise le format d'outil compatible OpenAI.

Python
import os
import requests
import json

API_KEY = os.environ['SCAVIO_API_KEY']

SEARCH_TOOL = {
    'type': 'function',
    'function': {
        'name': 'web_search',
        'description': 'Search the web for current information. Use this when the user asks about recent events, prices, news, or anything you do not have up-to-date knowledge about.',
        'parameters': {
            'type': 'object',
            'properties': {
                'query': {'type': 'string', 'description': 'The search query'}
            },
            'required': ['query']
        }
    }
}

Étape 2: Implémenter la fonction de recherche

La fonction appelle l'API Scavio et renvoie une chaîne condensée de résultats qui tient confortablement dans la fenêtre de contexte du modèle.

Python
def web_search(query):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
        json={'query': query, 'country_code': 'us'})
    results = resp.json().get('organic_results', [])[:5]
    lines = []
    for r in results:
        lines.append(f"{r['title']}: {r.get('snippet', '')} ({r['link']})")
    return '\n'.join(lines) if lines else 'No results found.'

Étape 3: Exécuter la boucle de l'agent avec Ollama

Envoyez le message de l'utilisateur à Ollama avec la définition de l'outil. Si le modèle appelle l'outil, exécutez la recherche et renvoyez le résultat pour la réponse finale.

Python
def chat_with_search(user_message, model='llama3.1'):
    messages = [{'role': 'user', 'content': user_message}]
    resp = requests.post('http://localhost:11434/api/chat', json={
        'model': model, 'messages': messages, 'tools': [SEARCH_TOOL], 'stream': False
    }).json()
    msg = resp['message']
    if msg.get('tool_calls'):
        for tc in msg['tool_calls']:
            if tc['function']['name'] == 'web_search':
                args = tc['function']['arguments']
                result = web_search(args['query'])
                messages.append(msg)
                messages.append({'role': 'tool', 'content': result})
        final = requests.post('http://localhost:11434/api/chat', json={
            'model': model, 'messages': messages, 'stream': False
        }).json()
        return final['message']['content']
    return msg['content']

Étape 4: Tester avec une question en temps réel

Demandez à l'agent quelque chose qu'il ne peut pas répondre uniquement à partir des données d'entraînement. Le modèle devrait appeler web_search et synthétiser les résultats.

Python
answer = chat_with_search('What are the top trending Python libraries released in 2026?')
print(answer)

Exemple Python

Python
import os, requests, json

API_KEY = os.environ['SCAVIO_API_KEY']

SEARCH_TOOL = {
    'type': 'function',
    'function': {
        'name': 'web_search',
        'description': 'Search the web for current information.',
        'parameters': {
            'type': 'object',
            'properties': {'query': {'type': 'string', 'description': 'Search query'}},
            'required': ['query']
        }
    }
}

def web_search(query):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
        json={'query': query, 'country_code': 'us'})
    results = resp.json().get('organic_results', [])[:5]
    return '\n'.join(f"{r['title']}: {r.get('snippet', '')}" for r in results) or 'No results.'

def chat(user_msg, model='llama3.1'):
    messages = [{'role': 'user', 'content': user_msg}]
    resp = requests.post('http://localhost:11434/api/chat', json={
        'model': model, 'messages': messages, 'tools': [SEARCH_TOOL], 'stream': False
    }).json()
    msg = resp['message']
    if msg.get('tool_calls'):
        for tc in msg['tool_calls']:
            result = web_search(tc['function']['arguments']['query'])
            messages.append(msg)
            messages.append({'role': 'tool', 'content': result})
        return requests.post('http://localhost:11434/api/chat', json={
            'model': model, 'messages': messages, 'stream': False
        }).json()['message']['content']
    return msg['content']

print(chat('What Python libraries were released in 2026?'))

Exemple JavaScript

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;

const SEARCH_TOOL = {
  type: 'function',
  function: {
    name: 'web_search',
    description: 'Search the web for current information.',
    parameters: {
      type: 'object',
      properties: { query: { type: 'string', description: 'Search query' } },
      required: ['query']
    }
  }
};

async function webSearch(query) {
  const r = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query, country_code: 'us' })
  }).then(r => r.json());
  return (r.organic_results || []).slice(0, 5)
    .map(r => `${r.title}: ${r.snippet || ''}`).join('\n') || 'No results.';
}

async function chat(userMsg, model = 'llama3.1') {
  const messages = [{ role: 'user', content: userMsg }];
  let resp = await fetch('http://localhost:11434/api/chat', {
    method: 'POST',
    body: JSON.stringify({ model, messages, tools: [SEARCH_TOOL], stream: false })
  }).then(r => r.json());
  if (resp.message.tool_calls) {
    for (const tc of resp.message.tool_calls) {
      const result = await webSearch(tc.function.arguments.query);
      messages.push(resp.message, { role: 'tool', content: result });
    }
    resp = await fetch('http://localhost:11434/api/chat', {
      method: 'POST',
      body: JSON.stringify({ model, messages, stream: false })
    }).then(r => r.json());
  }
  return resp.message.content;
}

chat('Latest AI news in 2026?').then(console.log).catch(console.error);

Sortie attendue

JSON
User: What Python libraries were released in 2026?

[Agent calls web_search("new python libraries released 2026")]
[Search returns 5 results with titles and snippets]

Agent: Based on web search results, several notable Python libraries
launched in 2026 including... The agent synthesizes the search
results into a grounded, accurate answer.

Tutoriels associés

  • Comment construire un agent RAG avec LangChain et Scavio
  • Comment construire un pipeline d'ancrage de contenu IA
  • Comment récupérer les résultats de recherche Google en Python

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 installé avec un modèle compatible outil (llama3.1, mistral, etc.). Python 3.10+. 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

Recherche Web Agent pour LLM local

Read more
Best Of

Meilleure API de recherche pour agents LLM locaux en 2026

Read more
Use Case

Ancrage de recherche pour LLM local via API

Read more
Best Of

Meilleure API de recherche Web pour LLM locaux en 2026

Read more
Solution

Recherche LLM locale après le paywall Google

Read more
Solution

Construire un assistant personnel avec Ollama et la recherche

Read more

Commencer

Donnez à votre agent LLM local une recherche Web en temps réel via un simple outil HTTP. Fonctionne avec Ollama, llama.cpp et tout modèle prenant en charge l'appel d'outil.

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é