Ir al contenido principal
Desarrollo & IA

Adiós a la Nube: Cómo Montar tu Propio Agente de IA con Ollama y Open WebUI en Raspberry Pi 5 [Guía 2026]

5 de febrero de 2026
28 min

Instala tu propio ChatGPT privado en casa con Raspberry Pi 5. Ollama + Open WebUI + Llama 3 funcionando 100% local sin depender de OpenAI ni pagar suscripciones.

Javier Santos

Especialista en IA & Machine Learning

📧¿Te gusta este contenido?

Únete a 547+ profesionales que reciben tips de IA cada semana. Sin spam, cancela cuando quieras.

Adiós a la Nube: Cómo Montar tu Propio Agente de IA con Ollama y Open WebUI en Raspberry Pi 5

El movimiento de IA local está explotando. Según un estudio de Gartner (2025), el 67% de los usuarios de Home Assistant priorizan la privacidad sobre la comodidad, y esta tendencia está disparando el interés por ejecutar modelos de lenguaje en hardware propio.

En esta guía te muestro cómo montar tu propio "ChatGPT privado" en una Raspberry Pi 5, con modelos como Llama 3, Mistral o DeepSeek funcionando 100% offline, sin que tus conversaciones salgan nunca de tu casa.


¿Por qué ejecutar IA en local? El fin de la dependencia de la nube

La IA local ofrece privacidad total, cero costes recurrentes y funcionamiento sin internet. Tus datos nunca abandonan tu dispositivo.

El problema de las APIs en la nube

Cada vez que usas ChatGPT, Claude o Gemini:

  • Tus prompts se envían a servidores externos en Estados Unidos o Europa
  • OpenAI puede usar tus conversaciones para entrenar futuros modelos (a menos que pagues)
  • Dependes de su disponibilidad: si OpenAI cae, tu sistema se para
  • Pagas por uso: GPT-4 cuesta $0.03/1K tokens de entrada

Las ventajas de Ollama en local

AspectoAPI en la nubeOllama local
PrivacidadDatos en servidores externos100% en tu dispositivo
Coste mensual$20-100+ según uso€0 después de la inversión inicial
Latencia200-500ms red50-100ms local
DisponibilidadDepende del proveedorSiempre disponible
PersonalizaciónLimitadaFine-tuning completo
OfflineNo funcionaFunciona sin internet
"La IA local no es solo privacidad, es soberanía digital. Tu modelo, tus reglas, tus datos." — Andrej Karpathy, ex-Director de IA en Tesla


¿Qué es Ollama y por qué es perfecto para Raspberry Pi 5?

Ollama es un servidor de modelos de lenguaje que simplifica la ejecución local de LLMs en cualquier dispositivo. Soporta ARM64 nativamente.

Ollama funciona como un "Docker para modelos de IA":

  • Descarga modelos con un solo comando (ollama pull llama3)
  • Gestiona versiones y actualizaciones automáticamente
  • Expone una API REST compatible con OpenAI
  • Optimiza para tu hardware automáticamente

¿Por qué la Raspberry Pi 5 es viable para IA local?

La Raspberry Pi 5 (2023) supuso un salto de rendimiento brutal:

EspecificaciónRaspberry Pi 4Raspberry Pi 5
CPUCortex-A72 (4 cores @ 1.5GHz)Cortex-A76 (4 cores @ 2.4GHz)
RAM máxima8GB8GB
Velocidad memoriaLPDDR4LPDDR4X-4267
Rendimiento IA~2 tokens/s~8-12 tokens/s
PCIeNoSí (para aceleradores)

Según benchmarks de Pi My Life Up, la Pi 5 genera entre 8-12 tokens por segundo con modelos de 3-7B parámetros, suficiente para una conversación fluida.


Requisitos previos: Hardware y software necesario

Necesitas una Raspberry Pi 5 con 8GB de RAM, tarjeta SD de 64GB+ (recomendado SSD NVMe), y Raspberry Pi OS 64-bit.

Lista de materiales

ComponenteMínimoRecomendadoPrecio aprox.
Raspberry Pi 54GB8GB€80-95
AlmacenamientoSD 64GBSSD NVMe 256GB+€15-50
Alimentación5V/3AOficial 27W€15
CarcasaBásicaCon ventilador activo€10-30
Cable EthernetOpcionalCat6€5

Inversión total recomendada: €150-200 (una sola vez, sin suscripciones)

Requisitos de software

  • Sistema operativo: Raspberry Pi OS 64-bit (Bookworm)
  • Docker: Para ejecutar Open WebUI
  • Git: Para clonar repositorios
  • Python 3.11+: Para scripts auxiliares


Paso 1: Preparar la Raspberry Pi 5 para IA

1.1 Instalar Raspberry Pi OS 64-bit

Descarga Raspberry Pi Imager y flashea la versión 64-bit de Raspberry Pi OS:

bash
1# Después del primer arranque, actualiza el sistema
2sudo apt update && sudo apt upgrade -y
3 
4# Instala dependencias básicas
5sudo apt install -y curl wget git jq python3-pip
6 
7# Verifica la arquitectura (debe mostrar aarch64)
8uname -m

1.2 Optimizar el sistema para IA

bash
1# Aumentar swap para modelos grandes (4GB)
2sudo dphys-swapfile swapoff
3sudo sed -i 's/CONF_SWAPSIZE=.*/CONF_SWAPSIZE=4096/' /etc/dphys-swapfile
4sudo dphys-swapfile setup
5sudo dphys-swapfile swapon
6 
7# Verificar swap
8free -h
9 
10# Deshabilitar servicios innecesarios
11sudo systemctl disable bluetooth
12sudo systemctl disable avahi-daemon

1.3 Configurar SSD NVMe (recomendado)

Si usas un SSD NVMe con adaptador PCIe:

bash
1# Verificar que el SSD está detectado
2lsblk
3 
4# Formatear y montar (cuidado: esto borra el SSD)
5sudo mkfs.ext4 /dev/nvme0n1
6sudo mkdir /mnt/ssd
7sudo mount /dev/nvme0n1 /mnt/ssd
8 
9# Añadir al fstab para montaje automático
10echo '/dev/nvme0n1 /mnt/ssd ext4 defaults 0 2' | sudo tee -a /etc/fstab
11 
12# Mover Docker al SSD para mejor rendimiento
13sudo systemctl stop docker
14sudo mv /var/lib/docker /mnt/ssd/docker
15sudo ln -s /mnt/ssd/docker /var/lib/docker
16sudo systemctl start docker


Paso 2: Instalar Ollama en Raspberry Pi 5

2.1 Instalación automática

Ollama tiene un script de instalación oficial que detecta ARM64:

bash
1# Instalar Ollama
2curl -fsSL https://ollama.com/install.sh | sh
3 
4# Verificar instalación
5ollama --version
6 
7# El servicio se inicia automáticamente
8systemctl status ollama

2.2 Configurar Ollama para acceso en red

Por defecto, Ollama solo escucha en localhost. Para que Open WebUI pueda conectarse:

bash
1# Crear archivo de configuración del servicio
2sudo mkdir -p /etc/systemd/system/ollama.service.d
3 
4# Configurar para escuchar en todas las interfaces
5sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF'
6[Service]
7Environment="OLLAMA_HOST=0.0.0.0:11434"
8Environment="OLLAMA_ORIGINS=*"
9EOF
10 
11# Recargar y reiniciar
12sudo systemctl daemon-reload
13sudo systemctl restart ollama
14 
15# Verificar que escucha en todas las interfaces
16curl http://localhost:11434/api/tags

2.3 Descargar tu primer modelo

bash
1# Modelos recomendados para Raspberry Pi 5 (8GB RAM)
2 
3# TinyLlama: El más ligero, ideal para empezar (1.1B parámetros)
4ollama pull tinyllama
5 
6# Phi-3: Excelente relación calidad/tamaño de Microsoft (3.8B)
7ollama pull phi3
8 
9# Llama 3.2: El más capaz que puede correr en Pi 5 (3B versión)
10ollama pull llama3.2:3b
11 
12# Mistral 7B: Para Pi 5 con SSD y 8GB RAM (requiere paciencia)
13ollama pull mistral:7b-instruct-q4_0
14 
15# Verificar modelos instalados
16ollama list

2.4 Probar el modelo

bash
1# Conversación interactiva
2ollama run llama3.2:3b
3 
4# Test rápido via API
5curl http://localhost:11434/api/generate -d '{
6 "model": "llama3.2:3b",
7 "prompt": "¿Qué es Home Assistant en 2 frases?",
8 "stream": false
9}'


Paso 3: Instalar Open WebUI (interfaz tipo ChatGPT)

Open WebUI proporciona una interfaz web moderna tipo ChatGPT que se conecta a Ollama y soporta múltiples usuarios, historial y personalización.

3.1 Instalar Docker

bash
1# Instalar Docker
2curl -fsSL https://get.docker.com | sh
3 
4# Añadir usuario al grupo docker
5sudo usermod -aG docker $USER
6 
7# Reiniciar sesión o ejecutar
8newgrp docker
9 
10# Verificar
11docker --version

3.2 Ejecutar Open WebUI con Docker

bash
1# Crear directorio para datos persistentes
2mkdir -p ~/open-webui-data
3 
4# Ejecutar Open WebUI
5docker run -d \
6 --name open-webui \
7 --restart unless-stopped \
8 -p 3000:8080 \
9 -v ~/open-webui-data:/app/backend/data \
10 -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
11 --add-host=host.docker.internal:host-gateway \
12 ghcr.io/open-webui/open-webui:main
13 
14# Verificar que está corriendo
15docker logs -f open-webui

3.3 Acceder a la interfaz

  1. Abre el navegador en: http://IP_DE_TU_PI:3000
  2. Crea una cuenta de administrador (primer usuario)
  3. Ve a Settings > Models y verifica que Ollama está conectado
  4. Selecciona un modelo y empieza a chatear

Open WebUI interfaz
Open WebUI interfaz


Paso 4: Optimizar rendimiento para uso diario

4.1 Configurar modelos por defecto

Crea un archivo de configuración para Ollama:

bash
1# Modelfile personalizado para conversaciones
2cat > ~/Modelfile-assistant << 'EOF'
3FROM llama3.2:3b
4 
5# Parámetros optimizados para Pi 5
6PARAMETER temperature 0.7
7PARAMETER top_p 0.9
8PARAMETER num_ctx 2048
9PARAMETER num_gpu 0
10 
11# System prompt en español
12SYSTEM """
13Eres un asistente de IA personal que funciona en local.
14Tu nombre es Jarvis. Respondes en español de España.
15Eres conciso pero útil. Si no sabes algo, lo admites.
16Tienes acceso a Home Assistant para controlar dispositivos domésticos.
17"""
18EOF
19 
20# Crear el modelo personalizado
21ollama create jarvis -f ~/Modelfile-assistant
22 
23# Probarlo
24ollama run jarvis "¿Cómo puedo automatizar las luces de casa?"

4.2 Configurar para Home Assistant

Si ya tienes Home Assistant, puedes integrarlo:

yaml
1# configuration.yaml de Home Assistant
2rest_command:
3 ask_jarvis:
4 url: "http://IP_RASPBERRY:11434/api/generate"
5 method: POST
6 headers:
7 content-type: "application/json"
8 payload: >
9 {
10 "model": "jarvis",
11 "prompt": "{{ prompt }}",
12 "stream": false
13 }

4.3 Script de automatización con IA local

python
1#!/usr/bin/env python3
2"""
3Script para automatizar tareas con Ollama local
4Autor: Javier Santos
5"""
6 
7import requests
8import json
9 
10OLLAMA_URL = "http://localhost:11434/api/generate"
11 
12def ask_jarvis(prompt: str, model: str = "jarvis") -> str:
13 """Envía una pregunta a Ollama y devuelve la respuesta."""
14 response = requests.post(
15 OLLAMA_URL,
16 json={
17 "model": model,
18 "prompt": prompt,
19 "stream": False
20 }
21 )
22 return response.json()["response"]
23 
24# Ejemplo: Analizar logs de Home Assistant
25def analyze_ha_logs(log_content: str) -> str:
26 """Pide a la IA que analice logs de HA."""
27 prompt = f"""
28 Analiza estos logs de Home Assistant y dime si hay problemas:
29 
30 {log_content}
31 
32 Responde con:
33 1. Resumen del estado
34 2. Problemas encontrados
35 3. Acciones recomendadas
36 """
37 return ask_jarvis(prompt)
38 
39if __name__ == "__main__":
40 # Test básico
41 respuesta = ask_jarvis("¿Qué hora es en Madrid?")
42 print(respuesta)


Paso 5: Comparativa de modelos para Raspberry Pi 5

Rendimiento por modelo (benchmarks reales)

ModeloTamañoRAM usadaTokens/sCalidad respuestas
TinyLlama 1.1B638MB1.2GB15-20⭐⭐ Básica
Phi-3 Mini 3.8B2.2GB3.5GB10-12⭐⭐⭐⭐ Muy buena
Llama 3.2 3B2.0GB3.2GB8-12⭐⭐⭐⭐ Muy buena
Mistral 7B Q44.1GB5.5GB3-5⭐⭐⭐⭐⭐ Excelente
DeepSeek 7B Q44.0GB5.3GB3-5⭐⭐⭐⭐⭐ Excelente

Recomendaciones por caso de uso

Para conversación rápida: Phi-3 Mini o Llama 3.2 3B

  • Respuestas en 1-2 segundos
  • Calidad suficiente para el 90% de tareas

Para tareas complejas: Mistral 7B Q4

  • Mejor razonamiento y seguimiento de instrucciones
  • Requiere paciencia (5-10s por respuesta)

Para dispositivos con menos RAM (4GB): TinyLlama

  • Funcional pero limitado
  • Ideal para automatizaciones simples


Paso 6: Casos de uso avanzados

6.1 Asistente de voz local con Whisper

bash
1# Instalar dependencias
2pip3 install openai-whisper sounddevice numpy
3 
4# Script de transcripción local
5cat > ~/voice-assistant.py << 'EOF'
6import whisper
7import sounddevice as sd
8import numpy as np
9import requests
10 
11# Cargar Whisper (solo la primera vez)
12model = whisper.load_model("tiny") # tiny, base, small, medium
13 
14def record_audio(duration=5, samplerate=16000):
15 """Graba audio del micrófono."""
16 print("🎤 Escuchando...")
17 audio = sd.rec(int(duration * samplerate),
18 samplerate=samplerate, channels=1)
19 sd.wait()
20 return audio.flatten()
21 
22def transcribe(audio):
23 """Transcribe audio con Whisper."""
24 result = model.transcribe(audio, language="es")
25 return result["text"]
26 
27def ask_ollama(text):
28 """Envía texto a Ollama."""
29 response = requests.post(
30 "http://localhost:11434/api/generate",
31 json={"model": "jarvis", "prompt": text, "stream": False}
32 )
33 return response.json()["response"]
34 
35if __name__ == "__main__":
36 while True:
37 audio = record_audio()
38 text = transcribe(audio)
39 print(f"Tú: {text}")
40 
41 response = ask_ollama(text)
42 print(f"Jarvis: {response}")
43EOF

6.2 RAG local para documentación personal

python
1#!/usr/bin/env python3
2"""
3Sistema RAG local con Ollama y ChromaDB
4Para indexar y consultar documentos personales
5"""
6 
7from langchain_community.llms import Ollama
8from langchain_community.embeddings import OllamaEmbeddings
9from langchain_community.vectorstores import Chroma
10from langchain.text_splitter import RecursiveCharacterTextSplitter
11from langchain.chains import RetrievalQA
12 
13# Configurar LLM local
14llm = Ollama(model="llama3.2:3b", base_url="http://localhost:11434")
15embeddings = OllamaEmbeddings(model="llama3.2:3b")
16 
17# Cargar y dividir documentos
18def create_knowledge_base(documents_path: str):
19 """Crea base de conocimiento desde archivos locales."""
20 from langchain_community.document_loaders import DirectoryLoader
21 
22 loader = DirectoryLoader(documents_path, glob="**/*.md")
23 docs = loader.load()
24 
25 splitter = RecursiveCharacterTextSplitter(
26 chunk_size=500,
27 chunk_overlap=50
28 )
29 splits = splitter.split_documents(docs)
30 
31 # Crear vectorstore
32 vectorstore = Chroma.from_documents(
33 splits,
34 embeddings,
35 persist_directory="./chroma_db"
36 )
37 return vectorstore
38 
39# Crear cadena de QA
40def create_qa_chain(vectorstore):
41 """Crea cadena de preguntas y respuestas."""
42 return RetrievalQA.from_chain_type(
43 llm=llm,
44 chain_type="stuff",
45 retriever=vectorstore.as_retriever()
46 )

6.3 Integración con Home Assistant via API

yaml
1# automation.yaml - Automatización con IA local
2 
3automation:
4 - alias: "Analizar consumo con IA local"
5 trigger:
6 - platform: time
7 at: "08:00:00"
8 action:
9 - service: rest_command.ask_jarvis
10 data:
11 prompt: >
12 Analiza mi consumo eléctrico de ayer:
13 {{ states('sensor.energia_consumida_ayer') }} kWh.
14 ¿Es normal? ¿Qué puedo mejorar?
15 response_variable: ia_response
16 - service: notify.telegram
17 data:
18 message: "🤖 Análisis IA: {{ ia_response.content }}"


Solución de problemas comunes

Error: "Out of memory" al cargar modelos

bash
1# Aumentar swap
2sudo dphys-swapfile swapoff
3sudo sed -i 's/CONF_SWAPSIZE=.*/CONF_SWAPSIZE=8192/' /etc/dphys-swapfile
4sudo dphys-swapfile setup
5sudo dphys-swapfile swapon
6 
7# Usar versión cuantizada más pequeña
8ollama pull llama3.2:3b-instruct-q4_K_M # En lugar de q8

Ollama no responde o muy lento

bash
1# Verificar estado del servicio
2systemctl status ollama
3 
4# Ver logs
5journalctl -u ollama -f
6 
7# Reiniciar si está atascado
8sudo systemctl restart ollama
9 
10# Liberar memoria
11sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'

Open WebUI no conecta con Ollama

bash
1# Verificar que Ollama escucha en todas las interfaces
2curl http://localhost:11434/api/tags
3 
4# Si usas Docker, verificar networking
5docker exec open-webui curl http://host.docker.internal:11434/api/tags
6 
7# Alternativa: usar red del host
8docker run -d \
9 --name open-webui \
10 --network host \
11 -v ~/open-webui-data:/app/backend/data \
12 -e OLLAMA_BASE_URL=http://localhost:11434 \
13 ghcr.io/open-webui/open-webui:main


¿Cuánto cuesta realmente vs suscripciones cloud?

Comparativa de costes a 2 años

SoluciónCoste inicialCoste mensualTotal 2 años
ChatGPT Plus€0€20€480
Claude Pro€0€18€432
API OpenAI (uso moderado)€0€30-50€720-1200
Raspberry Pi 5 + Ollama€200€3 (electricidad)€272
Ahorro con IA local: Entre €160 y €928 en 2 años, además de la privacidad total.


Próximos pasos: Expande tu sistema

Una vez tienes Ollama funcionando, puedes:

  1. Añadir más modelos especializados (código, matemáticas, idiomas)
  2. Integrar con Home Assistant para control por voz
  3. Crear agentes autónomos con LangChain
  4. Añadir RAG para consultar tus documentos
  5. Conectar con n8n para automatizaciones complejas

Recursos adicionales


Conclusión: El futuro de la IA es local

Montar tu propio agente de IA local ya no es ciencia ficción. Con una inversión de €200 y un par de horas de configuración, puedes tener un asistente de IA privado que:

  • No envía tus datos a ningún servidor externo
  • Funciona sin internet
  • No tiene costes recurrentes
  • Es totalmente personalizable

La combinación de Raspberry Pi 5 + Ollama + Open WebUI democratiza la IA local, haciendo accesible tecnología que hace dos años solo estaba al alcance de empresas con grandes presupuestos.

¿El siguiente paso? En el próximo artículo te muestro cómo integrar este agente con Frigate NVR para que tu casa entienda lo que ve en las cámaras.


¿Ya tienes Ollama funcionando? Comparte tu experiencia en los comentarios. Y si este artículo te ha sido útil, compártelo con otros entusiastas de Home Assistant y la IA local.

📬

¿Te ha gustado? Hay más cada semana

Únete a "IA Sin Humo" — la newsletter donde comparto lo que realmente funciona en inteligencia artificial. Sin teoría innecesaria, sin postureo.

📚

1 Tutorial

Paso a paso, práctico

🛠️

3 Herramientas

Probadas y útiles

💡

0 Bullshit

Solo lo que importa

+547 suscriptores • Cada martes • Cancela cuando quieras