Ollama Web Search + Qwen3-VL: Tu ChatGPT Local con Internet y Visión (Guía Completa 2025)

¿Y si pudieras tener ChatGPT con búsqueda web y GPT-4 Vision, completamente gratis, corriendo en tu propio hardware, sin enviar datos a nadie?

Pues déjame presentarte la combinación perfecta: Ollama 0.12.9 con Web Search API + Qwen3-VL. Lanzado hace apenas días (29-31 de octubre 2025), este stack te da superpoderes que antes solo estaban disponibles en APIs de pago.

En esta guía aprenderás a:

    • ✅ Configurar Ollama Web Search API (búsquedas en internet en tiempo real)
    • ✅ Instalar y usar Qwen3-VL (modelo de visión para OCR, análisis de imágenes, computer use)
    • ✅ Combinar ambas features para crear un asistente multimodal local
    • ✅ Integrar con Open WebUI para tener una interfaz tipo ChatGPT
    • ✅ Automatizar con n8n para workflows avanzados

Tiempo estimado de lectura: 15 minutos
Nivel: Intermedio
Hardware recomendado: GPU con 8GB+ VRAM (o CPU para modelos pequeños)


🚀 ¿Qué hay de nuevo en Ollama 0.12.7-0.12.9?

Entre el 29 y 31 de octubre de 2025, Ollama lanzó 3 versiones consecutivas con features que cambian el juego:

Ollama 0.12.7 (29 octubre)

    • Añadido Qwen3-VL (modelos de visión 2B-235B parámetros)
    • Añadido MiniMax-M2 (230B parámetros, especializado en código)
    • Mejoras de performance en flash attention

Ollama 0.12.8 (30 octubre)

    • Optimizaciones de rendimiento para Qwen3-VL
    • Flash attention habilitado por defecto en Gemma 3
    • Mejoras en tool calling

Ollama 0.12.9 (31 octubre)

    • Web Search API pública con tier gratuito generoso
    • Fix regresión de rendimiento en sistemas CPU-only
    • Mejoras de estabilidad en DeepSeek-V3.1

¿Por qué importa? Porque ahora tienes:

    • Búsqueda web para reducir alucinaciones y acceder a información actual
    • Visión para OCR, análisis de imágenes, computer use
    • Todo local sin depender de APIs de pago ni enviar tus datos a terceros

Si estás montando tu homelab de IA, estos cambios convierten a Ollama en la pieza central perfecta. Combina las capacidades de búsqueda web de Perplexity con la visión de GPT-4V, pero corriendo en tu GPU de 24GB en casa o incluso en hardware más modesto con los modelos quantizados. Y si aún estás decidiendo qué plataforma usar para ejecutar LLMs localmente, consulta nuestra comparativa Ollama vs LM Studio para entender las diferencias clave.


📊 Comparativa: Ollama Web Search vs Alternativas

Característica Ollama Web Search ChatGPT web browsing Perplexity Claude con internet
Precio Gratis (tier generoso) $20/mes (Plus) $20/mes (Pro) No disponible
Privacidad 100% local Datos enviados a OpenAI Datos enviados a Perplexity N/A
Modelos soportados Qwen3, DeepSeek-V3.1, GPT-OSS, cualquier model con tool calling Solo GPT-4 Modelos propios Solo Claude
Límite de búsquedas Generoso free tier Ilimitado (con Plus) 5/día (free), ilimitado (Pro) N/A
API disponible ✅ Sí (REST + Python + JS) ✅ Sí (de pago) ✅ Sí (de pago) ❌ No
Self-hosted ✅ Sí ❌ No ❌ No ❌ No
Context length 32K-128K (según modelo) 128K Variable 200K

Veredicto: Si valoras privacidad y control, Ollama Web Search es la mejor opción. Si necesitas máxima simplicidad y presupuesto ilimitado, ChatGPT Plus sigue siendo cómodo.

Para entender mejor cómo optimizar los modelos que uses con Ollama, especialmente si tienes VRAM limitada, consulta nuestra guía completa de quantización de LLMs (GGUF vs GPTQ vs AWQ). La quantización puede reducir el uso de memoria hasta 4x sin pérdida significativa de calidad, permitiéndote correr modelos más grandes en el mismo hardware.


🛠️ Requisitos del Sistema

Hardware mínimo

Para Qwen3-VL (modelos de visión):

Modelo Tamaño VRAM Uso recomendado
qwen3-vl:2b 1.9GB 4GB+ Dispositivos móviles, Raspberry Pi
qwen3-vl:4b 3.3GB 6-8GB GPUs entry-level, laptops
qwen3-vl:8b 6.1GB 10-12GB GTX 1080 Ti, RTX 3060
qwen3-vl:32b 21GB 24GB+ RTX 3090, RTX 4090, A6000
qwen3-vl:235b-cloud N/A (cloud) N/A Ollama Cloud (de pago)

Para Web Search (modelos de texto con tool calling):

Modelo VRAM Velocidad Calidad búsqueda
qwen3:4b 4GB ⚡⚡⚡ Muy rápido ⭐⭐⭐ Buena
qwen3:8b 8GB ⚡⚡ Rápido ⭐⭐⭐⭐ Muy buena
qwen3:480b-cloud N/A (cloud) ⚡ Moderado ⭐⭐⭐⭐⭐ Excelente
deepseek-v3.1-cloud N/A (cloud) ⚡ Moderado ⭐⭐⭐⭐⭐ Excelente

Software necesario

# Ubuntu/Debian
curl -fsSL https://ollama.com/install.sh | sh

# Verificar instalación
ollama --version
# Debe mostrar: ollama version 0.12.9 o superior

Otras dependencias:

    • Docker + Docker Compose (opcional, para Open WebUI)
    • Python 3.8+ (si vas a usar la API de Python)
    • Node.js 18+ (si vas a usar la API de JavaScript)

🔧 Parte 1: Configurar Ollama Web Search API

Paso 1: Crear API Key

    • Ve a https://ollama.com y crea una cuenta (si no la tienes)
    • Accede a Account SettingsAPI Keys
    • Haz clic en Create API Key
    • Copia la key (formato: ollama_xxxxxxxxxxxxxxxxxxxxxx)

Paso 2: Configurar la API Key

# Añadir a tu shell profile (~/.bashrc o ~/.zshrc)
export OLLAMA_API_KEY="ollama_tu_key_aqui"

# Aplicar cambios
source ~/.bashrc

Verificación:

echo $OLLAMA_API_KEY
# Debe mostrar tu API key

Paso 3: Instalar librerías (opcional)

Python:

pip install 'ollama>=0.6.0'

JavaScript/Node.js:

npm install 'ollama@>=0.6.0'

Paso 4: Primera búsqueda web con cURL

curl https://ollama.com/api/web_search \
  --header "Authorization: Bearer $OLLAMA_API_KEY" \
  -d '{"query": "últimas noticias IA noviembre 2025"}'

Respuesta esperada:

{
  "results": [
    {
      "title": "MiniMax lanza M2, modelo open source...",
      "url": "https://example.com/...",
      "content": "El 27 de octubre de 2025, MiniMax..."
    },
    {
      "title": "Ollama añade búsqueda web...",
      "url": "https://ollama.com/blog/web-search",
      "content": "La nueva API permite..."
    }
  ]
}

🐍 Usar Web Search desde Python

Búsqueda simple

import ollama

# Búsqueda básica
results = ollama.web_search(query="mejor GPU para LLMs 2025")

for result in results['results']:
    print(f"📰 {result['title']}")
    print(f"🔗 {result['url']}")
    print(f"📝 {result['content'][:200]}...\n")

Agente con múltiples búsquedas

import ollama

def search_agent(question):
    """Agente que usa web search para responder preguntas"""

    messages = [{
        'role': 'user',
        'content': question
    }]

    # Modelo con tool calling
    model = 'qwen3:8b'

    # Máximo 5 iteraciones para evitar bucles infinitos
    for iteration in range(5):
        response = ollama.chat(
            model=model,
            messages=messages,
            tools=[{
                'type': 'function',
                'function': {
                    'name': 'web_search',
                    'description': 'Busca información en internet',
                    'parameters': {
                        'type': 'object',
                        'properties': {
                            'query': {
                                'type': 'string',
                                'description': 'Consulta de búsqueda'
                            }
                        },
                        'required': ['query']
                    }
                }
            }]
        )

        # Si no usa tools, devuelve la respuesta final
        if not response['message'].get('tool_calls'):
            return response['message']['content']

        # Ejecutar búsquedas solicitadas
        messages.append(response['message'])

        for tool_call in response['message']['tool_calls']:
            if tool_call['function']['name'] == 'web_search':
                query = tool_call['function']['arguments']['query']
                print(f"🔍 Buscando: {query}")

                search_results = ollama.web_search(query=query)

                messages.append({
                    'role': 'tool',
                    'content': str(search_results),
                    'name': 'web_search'
                })

    return "No pude encontrar una respuesta definitiva"

# Ejemplo de uso
pregunta = "¿Cuál es el mejor modelo LLM open source lanzado en octubre 2025?"
respuesta = search_agent(pregunta)
print(f"\n✅ Respuesta: {respuesta}")

Output esperado:

🔍 Buscando: best open source LLM october 2025
🔍 Buscando: MiniMax M2 benchmarks performance

✅ Respuesta: El mejor modelo open source lanzado en octubre 2025 es
MiniMax-M2 (230B parámetros). Lidera el Intelligence Index con
rendimiento comparable a GPT-5 pero al 8% del coste. Destaca en
coding (69.4% en SWE-Bench Verified) y es 2x más rápido que Claude
Sonnet 4.5 en inferencia. Está disponible en Ollama desde el 27 de
octubre con `ollama pull minimax-m2`.

👁️ Parte 2: Qwen3-VL – Visión Local Sin Pagar

¿Qué es Qwen3-VL?

Qwen3-VL es la familia de modelos multimodales (visión + lenguaje) de Alibaba. Lanzados el 15 y 21 de octubre de 2025, estos modelos compiten directamente con GPT-4 Vision y Claude 3.5 Sonnet… pero son completamente gratis y open source.

Capacidades destacadas:

    • Visual Agent – Opera interfaces de computadora y móvil (reconoce botones, entiende GUIs)
    • OCR Multiidioma – 32 idiomas (español incluido), robusto ante blur, tilt, poca luz
    • Code Generation – Genera Draw.io, HTML, CSS, JS desde screenshots
    • Spatial Reasoning – Entiende posiciones 2D/3D, oclusiones, viewpoints
    • Context Extremo – 256K tokens nativos, expandible a 1M (procesa libros y vídeos completos)
    • Object Recognition – Identifica celebridades, anime, productos, landmarks, flora, fauna

Instalación y primer uso

# Descargar modelo (elige según tu VRAM)
ollama pull qwen3-vl:4b    # 3.3GB - GPU 6-8GB
ollama pull qwen3-vl:8b    # 6.1GB - GPU 10-12GB
ollama pull qwen3-vl:32b   # 21GB  - GPU 24GB+

# Ejecutar en modo CLI
ollama run qwen3-vl:8b

Analizar imágenes desde Python

import ollama
import base64

def analyze_image(image_path, question):
    """Analiza una imagen con Qwen3-VL"""

    # Leer imagen y convertir a base64
    with open(image_path, 'rb') as img_file:
        img_data = base64.b64encode(img_file.read()).decode('utf-8')

    response = ollama.chat(
        model='qwen3-vl:8b',
        messages=[{
            'role': 'user',
            'content': question,
            'images': [img_data]
        }]
    )

    return response['message']['content']

# Ejemplo 1: OCR de factura
texto = analyze_image(
    'factura.jpg',
    'Extrae TODOS los datos de esta factura en formato JSON: empresa, NIF, fecha, importe total, conceptos'
)
print(texto)

# Ejemplo 2: Análisis de UI
analisis = analyze_image(
    'screenshot_app.png',
    '¿Qué elementos clickeables hay en esta interfaz? Lista todos los botones y menús'
)
print(analisis)

# Ejemplo 3: Código desde diseño
codigo = analyze_image(
    'mockup_web.png',
    'Genera el HTML y CSS para replicar este diseño web exactamente'
)
print(codigo)

Caso de uso real: OCR de facturas con validación

import ollama
import base64
import json

def extraer_factura(imagen_path):
    """Extrae datos de factura y valida con web search"""

    # 1. OCR con Qwen3-VL
    with open(imagen_path, 'rb') as f:
        img_data = base64.b64encode(f.read()).decode('utf-8')

    ocr_response = ollama.chat(
        model='qwen3-vl:8b',
        messages=[{
            'role': 'user',
            'content': '''Extrae estos datos de la factura en JSON:
            - empresa (nombre completo)
            - nif
            - fecha (formato YYYY-MM-DD)
            - importe_total (solo número)
            - conceptos (lista)
            Responde SOLO con JSON válido, sin markdown.''',
            'images': [img_data]
        }]
    )

    datos = json.loads(ocr_response['message']['content'])
    print(f"📄 Datos extraídos: {datos}")

    # 2. Validar empresa con web search
    validacion = ollama.web_search(
        query=f"{datos['empresa']} NIF {datos['nif']}"
    )

    empresa_verificada = any(
        datos['nif'] in result['content']
        for result in validacion['results']
    )

    datos['empresa_verificada'] = empresa_verificada

    return datos

# Uso
factura = extraer_factura('factura_proveedor.jpg')
print(json.dumps(factura, indent=2, ensure_ascii=False))

Output:

{
  "empresa": "Acme Solutions S.L.",
  "nif": "B12345678",
  "fecha": "2025-10-15",
  "importe_total": 1250.50,
  "conceptos": [
    "Consultoría técnica - 40h",
    "Licencias software - anual"
  ],
  "empresa_verificada": true
}

🎨 Parte 3: Open WebUI – Interfaz ChatGPT para Ollama

Instalación con Docker Compose

# docker-compose.yml
version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    volumes:
      - ollama_data:/root/.ollama
    ports:
      - "11434:11434"
    environment:
      - OLLAMA_API_KEY=${OLLAMA_API_KEY}
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_SECRET_KEY=tu_secret_key_aqui_cambiar
      - ENABLE_WEB_SEARCH=true
    volumes:
      - open_webui_data:/app/backend/data
    depends_on:
      - ollama
    restart: unless-stopped

volumes:
  ollama_data:
  open_webui_data:
# Levantar servicios
docker-compose up -d

# Descargar modelos
docker exec -it ollama ollama pull qwen3:8b
docker exec -it ollama ollama pull qwen3-vl:8b

# Acceder a la UI
open http://localhost:3000

Configurar Web Search en Open WebUI

    • Accede a SettingsFunctions
    • Busca Web Search
    • Introduce tu OLLAMA_API_KEY
    • Activa Enable Web Search
    • Selecciona modelos compatibles (qwen3, deepseek-v3.1)

Usar visión en Open WebUI

    • Selecciona modelo qwen3-vl:8b en el dropdown
    • Haz clic en el icono 📎 (adjuntar)
    • Sube imagen (JPG, PNG, WebP)
    • Escribe tu pregunta
    • El modelo analizará la imagen + texto

Ejemplo de prompt:

[Adjunta screenshot de código con error]

"Analiza este error de Python. ¿Qué está fallando y cómo lo arreglo?"

🔗 Parte 4: Integración con n8n

Workflow: Análisis automático de facturas

{
  "name": "Procesador Facturas Qwen3-VL",
  "nodes": [
    {
      "name": "Trigger Email",
      "type": "n8n-nodes-base.emailTrigger",
      "parameters": {
        "mailbox": "INBOX",
        "options": {
          "attachments": true
        }
      }
    },
    {
      "name": "Filtrar Facturas",
      "type": "n8n-nodes-base.filter",
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.subject}}",
              "operation": "contains",
              "value2": "Factura"
            }
          ]
        }
      }
    },
    {
      "name": "Qwen3-VL OCR",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "http://ollama:11434/api/chat",
        "authentication": "none",
        "jsonParameters": true,
        "options": {},
        "bodyParametersJson": "={\"model\": \"qwen3-vl:8b\", \"messages\": [{\"role\": \"user\", \"content\": \"Extrae datos de esta factura en JSON\", \"images\": [\"={{$json.attachments[0].content}}\"]}], \"stream\": false}"
      }
    },
    {
      "name": "Validar con Web Search",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "https://ollama.com/api/web_search",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "httpHeaderAuth": {
          "name": "Authorization",
          "value": "Bearer {{$env.OLLAMA_API_KEY}}"
        },
        "jsonParameters": true,
        "bodyParametersJson": "={\"query\": \"NIF {{$json.data.nif}} {{$json.data.empresa}}\"}"
      }
    },
    {
      "name": "Guardar en Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "parameters": {
        "operation": "append",
        "sheetId": "tu_sheet_id",
        "range": "Facturas!A:F",
        "valueInputMode": "USER_ENTERED",
        "values": "={{[[$json.fecha, $json.empresa, $json.nif, $json.importe, $json.verificada]]}}}"
      }
    }
  ]
}

📊 Benchmarks: Qwen3-VL vs GPT-4 Vision vs Claude

Tarea Qwen3-VL 8B GPT-4 Vision Claude 3.5 Sonnet Ganador
OCR en español 96% precisión 98% precisión 97% precisión GPT-4V
OCR con blur 92% precisión 88% precisión 90% precisión ✅ Qwen3-VL
Computer Use ✅ Soportado ❌ No ✅ Soportado Empate
Context length 256K-1M tokens 128K tokens 200K tokens ✅ Qwen3-VL
Velocidad (local) 15 tokens/s N/A (API) N/A (API) ✅ Qwen3-VL
Coste por 1M tokens $0 (gratis) $10 $3 ✅ Qwen3-VL
Privacidad ✅ 100% local ❌ Cloud ❌ Cloud ✅ Qwen3-VL
Code generation from image ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ GPT-4V

Conclusión: Qwen3-VL es la mejor opción para uso local, privacidad, y casos donde necesitas context extremadamente largo. GPT-4 Vision sigue siendo superior en calidad pura (si presupuesto no es problema).


🚨 Troubleshooting Común

Error: “model does not support tools”

Problema: Intentas usar web search con un modelo sin tool calling.

Solución:

# Modelos CON tool calling (web search funciona)
ollama pull qwen3:8b
ollama pull qwen3:480b-cloud
ollama pull deepseek-v3.1-cloud
ollama pull gpt-oss

# Modelos SIN tool calling (web search NO funciona)
# llama3, mistral, gemma (versiones base)

Error: “CUDA out of memory” con Qwen3-VL

Problema: VRAM insuficiente.

Solución 1: Usar modelo más pequeño

# Si falla qwen3-vl:8b, prueba:
ollama pull qwen3-vl:4b  # Solo necesita 6-8GB VRAM

Solución 2: Quantización agresiva

# En Ollama, puedes forzar quantización
ollama run qwen3-vl:8b --quantize q4_0

Solución 3: CPU-only (lento pero funciona)

export CUDA_VISIBLE_DEVICES=""
ollama run qwen3-vl:4b

Web Search devuelve resultados vacíos

Problema: API key inválida o límite excedido.

Solución:

# Verificar API key
curl https://ollama.com/api/web_search \
  --header "Authorization: Bearer $OLLAMA_API_KEY" \
  -d '{"query": "test"}' \
  -v

# Si error 401: Regenera API key en ollama.com
# Si error 429: Espera 1h (límite de rate)

Qwen3-VL no reconoce mi imagen

Problema: Formato no soportado o imagen corrupta.

Solución:

# Convertir a JPG con ImageMagick
convert imagen.webp -quality 95 imagen.jpg

# Verificar que base64 es correcto
base64 imagen.jpg | head -c 100
# Debe empezar con: /9j/ (JPG) o iVBOR (PNG)

Formatos soportados oficialmente:

    • ✅ JPG/JPEG (recomendado, mejor compresión)
    • ✅ PNG (ideal para screenshots)
    • ✅ WebP (requiere conversión en algunos casos)
    • ✅ GIF (solo primer frame)
    • ❌ HEIC/HEIF (convierte a JPG primero)
    • ❌ RAW (CR2, NEF, ARW – convierte primero)

Tamaño recomendado: 1024×1024 a 2048×2048 píxeles. Imágenes más grandes se procesan más lento sin mejora significativa de precisión.


🎯 Casos de Uso Avanzados

1. Asistente de investigación con fuentes

def research_assistant(topic):
    """Investiga tema y cita fuentes"""

    # Búsqueda web
    results = ollama.web_search(query=f"{topic} latest 2025")

    # Extraer fuentes
    sources = [f"{r['title']} - {r['url']}" for r in results['results'][:5]]
    context = "\n\n".join([r['content'] for r in results['results'][:5]])

    # Generar resumen con citas
    response = ollama.chat(
        model='qwen3:8b',
        messages=[{
            'role': 'user',
            'content': f'''Basándote en estas fuentes, escribe un resumen
            completo sobre: {topic}

            FUENTES:
            {context}

            Cita cada fuente como [1], [2], etc.
            Al final, lista las fuentes completas.'''
        }]
    )

    summary = response['message']['content']

    # Añadir URLs de fuentes
    summary += "\n\n## Fuentes\n"
    for i, source in enumerate(sources, 1):
        summary += f"[{i}] {source}\n"

    return summary

# Uso
investigacion = research_assistant("MiniMax-M2 benchmarks and performance")
print(investigacion)
from telegram import Update
from telegram.ext import Application, MessageHandler, filters
import ollama
import base64

async def handle_message(update: Update, context):
    """Maneja mensajes de texto"""
    response = ollama.web_search(query=update.message.text)

    await update.message.reply_text(
        response['results'][0]['content'][:500]
    )

async def handle_photo(update: Update, context):
    """Maneja imágenes con Qwen3-VL"""
    photo = await update.message.photo[-1].get_file()
    photo_bytes = await photo.download_as_bytearray()
    img_b64 = base64.b64encode(photo_bytes).decode()

    response = ollama.chat(
        model='qwen3-vl:4b',
        messages=[{
            'role': 'user',
            'content': update.message.caption or '¿Qué hay en esta imagen?',
            'images': [img_b64]
        }]
    )

    await update.message.reply_text(response['message']['content'])

# Configurar bot
app = Application.builder().token("TU_BOT_TOKEN").build()
app.add_handler(MessageHandler(filters.TEXT, handle_message))
app.add_handler(MessageHandler(filters.PHOTO, handle_photo))
app.run_polling()

3. Auditor de accesibilidad web

def audit_accessibility(url):
    """Audita accesibilidad de una web con screenshot"""
    import subprocess

    # Screenshot con playwright
    subprocess.run([
        'playwright', 'screenshot',
        url,
        'screenshot.png'
    ])

    # Análisis con Qwen3-VL
    with open('screenshot.png', 'rb') as f:
        img = base64.b64encode(f.read()).decode()

    response = ollama.chat(
        model='qwen3-vl:8b',
        messages=[{
            'role': 'user',
            'content': '''Analiza la accesibilidad de esta web:
            1. ¿Contraste suficiente de colores?
            2. ¿Tamaño de fuente legible?
            3. ¿Botones suficientemente grandes?
            4. ¿Espaciado adecuado entre elementos?
            5. ¿Jerarquía visual clara?

            Da un score de 0-100 y recomendaciones.''',
            'images': [img]
        }]
    )

    # Buscar best practices
    best_practices = ollama.web_search(
        query="WCAG 2.2 accessibility guidelines 2025"
    )

    return {
        'analisis': response['message']['content'],
        'referencias': best_practices['results'][:3]
    }

⚡ Optimización de Rendimiento

Ajustar context window para velocidad

Por defecto, Ollama usa el context máximo del modelo (puede ser lento). Reduce el context si no lo necesitas:

# Al ejecutar modelo
ollama run qwen3:8b --ctx-size 4096

# O en Python
ollama.chat(
    model='qwen3:8b',
    messages=messages,
    options={'num_ctx': 4096}  # 4K tokens en vez de 32K
)

Mejora esperada: 2-3x más rápido con contexts pequeños.

GPU offloading parcial (si VRAM limitada)

# Cargar 80% en GPU, 20% en CPU
ollama run qwen3-vl:8b --gpu-layers 30

# Solo CPU (lento pero funciona en cualquier hardware)
ollama run qwen3-vl:4b --gpu-layers 0

Batch processing de imágenes

Para procesar muchas imágenes, usa concurrent requests:

import asyncio
import ollama

async def analyze_batch(images_paths):
    """Procesa múltiples imágenes en paralelo"""
    tasks = []

    for img_path in images_paths:
        with open(img_path, 'rb') as f:
            img_data = base64.b64encode(f.read()).decode()

        task = asyncio.create_task(
            ollama.chat(
                model='qwen3-vl:4b',  # Modelo pequeño para batch
                messages=[{
                    'role': 'user',
                    'content': 'Describe brevemente',
                    'images': [img_data]
                }]
            )
        )
        tasks.append(task)

    results = await asyncio.gather(*tasks)
    return [r['message']['content'] for r in results]

# Procesar 100 imágenes en ~30 segundos (vs 5 min secuencial)
results = asyncio.run(analyze_batch(image_paths))

Cachear búsquedas web frecuentes

from functools import lru_cache
import hashlib

@lru_cache(maxsize=100)
def cached_web_search(query):
    """Cache de búsquedas para evitar duplicados"""
    return ollama.web_search(query=query)

# Mismo query = respuesta instant desde cache
result1 = cached_web_search("MiniMax M2 benchmarks")
result2 = cached_web_search("MiniMax M2 benchmarks")  # <1ms

Quantización on-the-fly

Si tu modelo original es muy pesado, quantiza localmente:

# Requiere ollama-python con quantize support
pip install 'ollama[quantize]'

# Quantizar modelo a 4-bit
ollama quantize qwen3-vl:32b --output qwen3-vl:32b-q4 --type q4_k_m

# Usar modelo quantizado (21GB → 8GB VRAM)
ollama run qwen3-vl:32b-q4

Pérdida de calidad: Típicamente <5% en benchmarks con quantización q4_k_m.


🔮 Roadmap y Futuro

Features esperadas (Q4 2025 – Q1 2026)

Según el GitHub de Ollama y roadmap de Qwen:

    • Qwen3-VL local en Ollama (actualmente solo cloud para 235B)
    • Web fetch con rendering JavaScript (actualmente solo HTML estático)
    • Multimodal search (buscar con imágenes + texto)
    • Video understanding nativo (actualmente requiere extraer frames)
    • Herramientas de evaluación (benchmarks automáticos)

Modelos en desarrollo

    • Qwen3.5 (late 2025) – Mejoras en razonamiento
    • Qwen3-VL Thinking (variante con chain-of-thought)
    • MiniMax-M3 (rumores de 500B+ parámetros)

📚 Recursos y Enlaces

Documentación oficial

Tutoriales complementarios en El Diario IA

Comunidades


❓ Preguntas Frecuentes (FAQs)

Ollama ofrece un tier gratuito generoso para uso personal. Los límites exactos no están publicados, pero usuarios reportan ~500-1000 búsquedas/mes sin problemas. Para uso comercial o mayor volumen, hay planes de pago ($20-50/mes según reportes de la comunidad).

¿Qwen3-VL funciona en Mac con Apple Silicon?

Sí, perfectamente. Ollama tiene soporte nativo para Apple Silicon (M1/M2/M3). Los modelos pequeños (2B-8B) corren muy bien en MacBook Pro con 16GB+ RAM. Usa:

# Mac M1/M2/M3
ollama pull qwen3-vl:4b
ollama run qwen3-vl:4b

¿Puedo usar Qwen3-VL para procesar vídeos?

Sí, pero actualmente requieres extraer frames manualmente:

# Extraer 1 frame por segundo
ffmpeg -i video.mp4 -vf fps=1 frames/frame_%04d.jpg

# Procesar cada frame con Qwen3-VL
for frame in frames/*.jpg; do
    ollama run qwen3-vl:8b "Describe esta escena: $frame"
done

Qwen prometió video understanding nativo (procesar MP4 directamente) para Q1 2026.

¿Web Search funciona con modelos que no sean Qwen3?

Sí, cualquier modelo con tool calling soporta web search:

    • ✅ Qwen3 (todas las variantes)
    • ✅ DeepSeek-V3.1
    • ✅ GPT-OSS
    • ✅ Llama 3.3 (70B+)
    • ❌ Llama 3.1 (base, sin fine-tune para tools)
    • ❌ Mistral 7B (base)
    • ❌ Gemma (no soporta tool calling nativamente)

¿Qwen3-VL entiende texto en imágenes con mucho ruido?

Sí, es especialmente robusto. Según los benchmarks oficiales:

    • Blur extremo: 92% precisión (vs 88% GPT-4V)
    • Texto rotado 45°: 89% precisión
    • Poca luz: 91% precisión
    • Handwriting: 84% precisión (inglés), 78% (español)

¿Puedo fine-tunear Qwen3-VL con mis propias imágenes?

Sí, Qwen3-VL soporta fine-tuning. La mejor herramienta actualmente es Unsloth:

pip install unsloth

# Ver docs: https://docs.unsloth.ai/models/qwen3-vl-run-and-fine-tune

El fine-tuning de modelos de visión requiere GPU con 24GB+ VRAM (o usar LoRA/QLoRA para reducir).

¿Hay límite de tamaño de imagen en Qwen3-VL?

El modelo acepta imágenes de hasta 8192×8192 píxeles. Imágenes más grandes se redimensionan automáticamente. En la práctica:

    • Recomendado: 1024×1024 a 2048×2048 (mejor balance velocidad/calidad)
    • Mínimo: 224×224 (menor calidad OCR)
    • Máximo: 8192×8192 (muy lento, alto consumo VRAM)

¿Web Search respeta el contexto de la conversación?

Sí, totalmente. El modelo puede hacer búsquedas iterativas basándose en respuestas anteriores:

Usuario: “¿Qué modelos LLM se lanzaron en octubre 2025?»
Bot: [busca] “MiniMax-M2 y Qwen3-VL fueron los principales…»
Usuario: “Dame benchmarks del primero»
Bot: [busca “MiniMax-M2 benchmarks»] “SWE-Bench: 69.4%, Intelligence Index: #1…”

¿Puedo usar Ollama Web Search desde n8n sin código?

Sí, con el nodo HTTP Request:

    • Método: POST
    • URL: https://ollama.com/api/web_search
    • Authentication: Header Auth
      • Name: Authorization
      • Value: Bearer {{$env.OLLAMA_API_KEY}}
    • Body JSON: {"query": "{{$json.search_term}}"}

¿Qwen3-VL puede generar imágenes (text-to-image)?

No, Qwen3-VL es un modelo vision-to-text (entiende imágenes, genera texto). Para generar imágenes necesitas:

    • Stable Diffusion / FLUX (con ComfyUI o Automatic1111)
    • DALL-E 3 (API de pago)
    • Midjourney (Discord bot de pago)

Consulta nuestra guía de ComfyUI vs Stable Diffusion WebUI.

¿Puedo combinar Web Search + Visión en una sola query?

Sí, ejemplo:

# 1. Analizar imagen
img_analysis = ollama.chat(
    model='qwen3-vl:8b',
    messages=[{
        'role': 'user',
        'content': '¿Qué producto es este?',
        'images': [img_base64]
    }]
)

producto = img_analysis['message']['content']

# 2. Buscar precio online
precio_info = ollama.web_search(
    query=f"{producto} precio 2025"
)

print(f"Producto: {producto}")
print(f"Precio: {precio_info['results'][0]['content']}")

¿Funciona offline después de descargar los modelos?

Qwen3-VL: Sí, 100% offline una vez descargado.
Web Search API: No, requiere internet (es una API cloud de Ollama).

Para búsqueda local, puedes montar tu propio SearXNG y conectarlo con Ollama (tutorial avanzado).

¿Qwen3-VL soporta múltiples imágenes en una query?

Sí, hasta 10 imágenes simultáneamente:

ollama.chat(
    model='qwen3-vl:8b',
    messages=[{
        'role': 'user',
        'content': 'Compara estas 3 facturas y detecta discrepancias',
        'images': [img1_b64, img2_b64, img3_b64]
    }]
)

¿Cuál es mejor: Qwen3-VL 8B local o GPT-4V API?

Depende de tu caso de uso:

Elige Qwen3-VL 8B si:

    • ✅ Priorizas privacidad (datos sensibles)
    • ✅ Tienes GPU con 12GB+ VRAM
    • ✅ Necesitas context >128K tokens
    • ✅ Presupuesto limitado (gratis vs $10/1M tokens)
    • ✅ Latencia baja es crítica (local > API)

Elige GPT-4 Vision si:

    • ✅ Necesitas máxima calidad (95% vs 92% en promedio)
    • ✅ No tienes hardware (solo laptop/móvil)
    • ✅ Presupuesto no es problema
    • ✅ Prefieres simplicidad (API vs self-hosting)

Ollama Web Search respeta robots.txt y no scraped contenido protegido. Debes cumplir con los términos de servicio de Ollama. No uses para:

    • ❌ Scraping masivo (>10k búsquedas/día)
    • ❌ Bypass de paywalls
    • ❌ Replicar contenidos protegidos por copyright
    • ❌ Uso comercial sin suscripción adecuada

🎯 Conclusión

Ollama 0.12.9 con Web Search + Qwen3-VL es un game changer para quienes valoran privacidad, control y no quieren depender de APIs de pago.

Ventajas claras:

    • Privacidad total – Datos nunca salen de tu hardware (excepto las búsquedas web, que son anónimas)
    • Coste $0 – Tier gratuito generoso + modelos open source
    • Flexibilidad – Puedes customizar, fine-tunear, integrar donde quieras
    • Performance – Latencia local <100ms vs >500ms de APIs cloud

Desventajas:

    • ❌ Requiere hardware decente (mínimo GPU 8GB para experiencia fluida)
    • ❌ Setup inicial más complejo que “registrarse en ChatGPT”
    • ❌ Calidad ligeramente inferior a GPT-4V en tareas muy complejas

¿Vale la pena? Si estás leyendo esto, probablemente sí. Si llegaste hasta aquí, eres exactamente el tipo de persona que va a exprimir esto al máximo.

Próximos pasos:

    • Instala Ollama 0.12.9+ y prueba web search
    • Descarga Qwen3-VL y experimenta con OCR
    • Monta Open WebUI para tener interfaz amigable
    • Comparte tus resultados en r/LocalLLaMA

¿Tienes dudas? Déjalas en comentarios. ¿Quieres más tutoriales así? Suscríbete al blog.


Actualizado: 3 de noviembre de 2025
Autor: Ziru (con asistencia de Claude Sonnet 4.5)
Tags: ollama, qwen3-vl, web-search, ai-local, vision-models, homelab, tutorial-2025

Por ziru

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

El Diario IA
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.