ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo agregar búsqueda a un asistente personal de Ollama
Tutorial

Cómo agregar búsqueda a un asistente personal de Ollama

Ofrezca a su asistente personal Ollama una búsqueda web en tiempo real. Responda preguntas sobre eventos actuales, precios y noticias de un LLM local con base de búsqueda.

Obtener clave API gratisDocumentacion API

Ollama es excelente para ejecutar LLM a nivel local y privado, pero los modelos locales tienen un límite de conocimiento. Su asistente personal no puede responder preguntas sobre eventos actuales, precios en vivo o lanzamientos recientes. Agregar una herramienta de búsqueda le da a Ollama acceso a datos en tiempo real mientras mantiene el LLM local. Este tutorial conecta a Ollama con la API de Scavio ($0.005/búsqueda) para que su asistente pueda buscar en Google, Reddit, YouTube y más cuando necesite información actual.

Requisitos previos

  • Ollama instalado con al menos un modelo (se recomienda llama3)
  • Python 3.9+ instalado
  • solicita biblioteca instalada
  • Una clave API de Scavio de scavio.dev

Guia paso a paso

Paso 1: Cree el asistente habilitado para búsqueda

Cree un asistente de Python que incluya a Ollama con una herramienta de búsqueda. El asistente decide cuándo buscar según la pregunta.

Python
import os, requests

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
OLLAMA_URL = 'http://localhost:11434/v1/chat/completions'

def search_web(query: str, num: int = 5) -> 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', 'num_results': num})
    results = resp.json().get('organic_results', [])
    return '\n'.join(f'[{i+1}] {r["title"]}: {r.get("snippet", "")}\nURL: {r["link"]}'
                     for i, r in enumerate(results))

def needs_search(question: str) -> bool:
    triggers = ['latest', 'current', 'today', '2026', '2025', 'now',
                'price', 'cost', 'version', 'release', 'news',
                'best', 'top', 'compare', 'vs', 'weather',
                'who won', 'what happened', 'how much']
    q = question.lower()
    return any(t in q for t in triggers)

def ask_assistant(question: str) -> dict:
    use_search = needs_search(question)
    context = ''
    if use_search:
        context = f'Web search results:\n{search_web(question)}\n\n'
    messages = [
        {'role': 'system', 'content': (
            'You are a helpful personal assistant. '
            + ('Use the web search results to answer accurately. Cite sources [1],[2]. '
               if use_search else 'Answer from your knowledge. Say if you are unsure.')
        )},
        {'role': 'user', 'content': f'{context}Question: {question}'}
    ]
    resp = requests.post(OLLAMA_URL, json={
        'model': 'llama3', 'messages': messages, 'max_tokens': 512
    })
    return {
        'answer': resp.json()['choices'][0]['message']['content'],
        'searched': use_search,
        'cost': 0.005 if use_search else 0,
    }

result = ask_assistant('What is the latest Python version in 2026?')
print(f'[{"SEARCHED" if result["searched"] else "LOCAL"}] ${result["cost"]}')
print(result['answer'])

Paso 2: Agregar comandos de búsqueda específicos de la plataforma

Deje que el asistente busque plataformas específicas. Anteponga preguntas con nombres de plataformas para dirigirse a Reddit para obtener opiniones, YouTube para tutoriales o Amazon para productos.

Python
def search_platform(query: str, platform: str = 'google') -> str:
    site_map = {'reddit': 'site:reddit.com', 'youtube': 'site:youtube.com',
                'amazon': 'site:amazon.com', 'walmart': 'site:walmart.com'}
    prefix = site_map.get(platform, '')
    full_query = f'{prefix} {query}'.strip()
    return search_web(full_query)

def detect_platform(question: str) -> tuple[str, str]:
    """Detect if a platform is mentioned and return (platform, cleaned_question)."""
    q = question.lower()
    if 'on reddit' in q or 'reddit thinks' in q:
        return 'reddit', question.replace('on reddit', '').replace('reddit thinks', '').strip()
    if 'on youtube' in q or 'youtube tutorial' in q:
        return 'youtube', question.replace('on youtube', '').replace('youtube tutorial', '').strip()
    if 'on amazon' in q or 'amazon price' in q:
        return 'amazon', question.replace('on amazon', '').replace('amazon price', '').strip()
    return 'google', question

def smart_assistant(question: str) -> dict:
    platform, clean_q = detect_platform(question)
    use_search = needs_search(clean_q) or platform != 'google'
    context = ''
    if use_search:
        results = search_platform(clean_q, platform)
        context = f'Search results from {platform.upper()}:\n{results}\n\n'
    messages = [
        {'role': 'system', 'content': f'You are a helpful assistant. '
            f'{"Answer from " + platform + " search results. Cite [1],[2]." if use_search else "Answer from knowledge."}'}
        ,
        {'role': 'user', 'content': f'{context}Question: {question}'}
    ]
    resp = requests.post(OLLAMA_URL, json={'model': 'llama3', 'messages': messages, 'max_tokens': 512})
    return {'answer': resp.json()['choices'][0]['message']['content'],
            'platform': platform, 'searched': use_search, 'cost': 0.005 if use_search else 0}

for q in ['What does reddit think about mechanical keyboards?',
          'What is a Python list comprehension?',
          'Best noise cancelling headphones on amazon']:
    r = smart_assistant(q)
    print(f'[{r["platform"]:8s}] ${r["cost"]} - {q[:50]}')
    print(f'  {r["answer"][:80]}...')
    print()

Paso 3: Cree un circuito de chat interactivo

Cree una interfaz de chat basada en terminal que mantenga el historial de conversaciones y realice búsquedas cuando sea necesario.

Python
def chat_loop():
    """Interactive chat with search-augmented Ollama."""
    history = []
    total_cost = 0
    print('Ollama Assistant with Web Search')
    print('Type "quit" to exit, "cost" for session cost')
    print('-' * 40)
    while True:
        question = input('\nYou: ').strip()
        if not question:
            continue
        if question.lower() == 'quit':
            print(f'\nSession cost: ${total_cost:.3f}')
            break
        if question.lower() == 'cost':
            print(f'Session cost so far: ${total_cost:.3f}')
            continue
        result = smart_assistant(question)
        total_cost += result['cost']
        source = f'{result["platform"]} search' if result['searched'] else 'local knowledge'
        print(f'\nAssistant [{source}, ${result["cost"]}]:')
        print(result['answer'])
        history.append({'question': question, **result})

# Run the chat loop (uncomment to use interactively)
# chat_loop()

# Simulate for the tutorial
for q in ['What is the latest Node.js version?', 'Explain Python decorators']:
    r = smart_assistant(q)
    source = f'{r["platform"]} search' if r['searched'] else 'local'
    print(f'You: {q}')
    print(f'Assistant [{source}]: {r["answer"][:100]}...')
    print()

Paso 4: Agregar memoria de conversación y contexto

Realice un seguimiento del historial de conversaciones para que el asistente recuerde las respuestas anteriores y pueda consultar búsquedas anteriores.

Python
class SearchAssistant:
    def __init__(self, model: str = 'llama3'):
        self.model = model
        self.history = []
        self.total_cost = 0
        self.search_count = 0

    def ask(self, question: str) -> str:
        platform, clean_q = detect_platform(question)
        use_search = needs_search(clean_q) or platform != 'google'
        context = ''
        if use_search:
            context = f'\nWeb results ({platform}):\n{search_platform(clean_q, platform)}\n'
            self.search_count += 1
            self.total_cost += 0.005
        # Build messages with history
        messages = [{'role': 'system', 'content': (
            'You are a helpful personal assistant with web search access. '
            'Cite search results as [1],[2]. Remember previous conversation.'
        )}]
        # Add recent history (last 4 exchanges)
        for h in self.history[-4:]:
            messages.append({'role': 'user', 'content': h['question']})
            messages.append({'role': 'assistant', 'content': h['answer']})
        messages.append({'role': 'user', 'content': f'{context}\n{question}'})
        resp = requests.post(OLLAMA_URL, json={
            'model': self.model, 'messages': messages, 'max_tokens': 512
        })
        answer = resp.json()['choices'][0]['message']['content']
        self.history.append({'question': question, 'answer': answer})
        return answer

    def stats(self):
        print(f'Questions: {len(self.history)}')
        print(f'Searches: {self.search_count}')
        print(f'Total cost: ${self.total_cost:.3f}')

assistant = SearchAssistant()
print(assistant.ask('What is the latest Python version?'))
print(assistant.ask('Tell me more about its new features'))
assistant.stats()

Ejemplo en Python

Python
import os, requests

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']

def search(query, num=5):
    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', 'num_results': num})
    return '\n'.join(f'[{i+1}] {r["title"]}: {r.get("snippet","")}'
                     for i, r in enumerate(resp.json().get('organic_results', [])))

def ask(question):
    triggers = ['latest', 'current', '2026', 'price', 'best', 'news', 'vs']
    use_search = any(t in question.lower() for t in triggers)
    ctx = f'Search results:\n{search(question)}\n\n' if use_search else ''
    resp = requests.post('http://localhost:11434/v1/chat/completions', json={
        'model': 'llama3', 'messages': [
            {'role': 'system', 'content': 'Helpful assistant. Cite search results [1],[2] when available.'},
            {'role': 'user', 'content': f'{ctx}Q: {question}'}], 'max_tokens': 512})
    return resp.json()['choices'][0]['message']['content']

print(ask('What is the latest Python version in 2026?'))

Ejemplo en JavaScript

JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;

async function search(query, num = 5) {
  const resp = 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', num_results: num })
  });
  return ((await resp.json()).organic_results || []).map((r, i) => `[${i+1}] ${r.title}: ${r.snippet || ''}`).join('\n');
}

async function ask(question) {
  const needsSearch = /latest|current|2026|price|best|news|vs/i.test(question);
  const ctx = needsSearch ? `Search results:\n${await search(question)}\n\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: 'Helpful assistant. Cite [1],[2] from search results.' },
      { role: 'user', content: `${ctx}Q: ${question}` }], max_tokens: 512 })
  });
  return (await resp.json()).choices[0].message.content;
}

ask('latest Python version 2026').then(console.log);

Salida esperada

JSON
[SEARCHED] $0.005
Based on the search results, the latest Python version as of 2026 is
Python 3.15, released in October 2025 [1]. The 3.15 release includes
performance improvements and new syntax features [2].

[reddit  ] $0.005 - What does reddit think about mechanical keyboards?
  According to Reddit discussions, r/MechanicalKeyboards recomm...

[google  ] $0.000 - What is a Python list comprehension?
  A list comprehension is a concise way to create lists in Pyth...

Questions: 2
Searches: 1
Total cost: $0.005

Tutoriales relacionados

  • Cómo construir una base de conocimientos personal con LLM local y búsqueda
  • Cómo fundamentar un LLM local con datos de búsqueda multiplataforma
  • Cómo agregar una API de búsqueda a OpenWebUI
  • Cómo construir un agente RAG con LangChain y Scavio

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Ollama instalado con al menos un modelo (se recomienda llama3). Python 3.9+ instalado. solicita biblioteca instalada. Una clave API de Scavio de scavio.dev. Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Las mejores herramientas de base de conocimientos personales para LLM locales en mayo de 2026

Read more
Use Case

Recuperación de búsqueda web local LLM 2026

Read more
Use Case

Búsqueda web de agentes para LLM local

Read more
Best Of

Las mejores herramientas de búsqueda web para LLM locales en mayo de 2026

Read more
Solution

Búsqueda local de LLM después de Google Paywall

Read more
Solution

Cree un asistente personal con Ollama y Search

Read more

Empieza a construir

Ofrezca a su asistente personal Ollama una búsqueda web en tiempo real. Responda preguntas sobre eventos actuales, precios y noticias de un LLM local con base de búsqueda.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad