Intermedio 18 minn8n

n8n + Ollama: automatizar con una IA 100 % locale

n8n es la herramienta de automatización sin código más convincente como alternativa a Zapier o Make, con una ventaja decisiva: permite el autoalojamiento. Combinado con Ollama, obtienes una cadena completa en la que los datos nunca abandonan tu máquina: correos traducidos, artículos resumidos y leads clasificados, todo sin llamadas a API externas. Esta guía de automatización con n8n y Ollama detalla la instalación, el nodo nativo de Ollama y tres flujos de trabajo concretos listos para copiar.

Por Mohamed Meguedmi·Actualización 2026-08-27·Probado en Windows, macOS y Linux

#¿Por qué combinar n8n y Ollama?

n8n es un orquestador visual: conectas nodos (desencadenador, HTTP, base de datos, LLM…) sin escribir código, y el flujo de trabajo se ejecuta en segundo plano mediante un cron, un webhook o un buzón de correo. Todos los competidores dirigidos al público general (Zapier, Make, Power Automate) cobran por volumen y exigen que tus datos pasen por sus servidores.

Ollama, por su parte, expone un LLM local en http://localhost:11434 con una API HTTP compatible. n8n incorpora desde finales de 2023 un nodo nativo de Ollama (y un nodo compatible con OpenAI que también funciona). Resultado: un flujo de trabajo que resume PDF de clientes o clasifica correos de RR. HH. no hace que salga ni un solo byte de tu infraestructura.

i
El combo en una frase
n8n = el cerebro que coordina. Ollama = la mano que redacta, traduce o clasifica. Ambos funcionan en tu máquina y se comunican mediante HTTP local.

#Prerrequisitos

El kit Agentes Locales

Agentes que actúan en tu máquina: Cline agéntico, MCP, n8n + Ollama, automatizaciones locales.

  • Espacio en línea de por vida
  • PDF + archivos
  • Actualizaciones de por vida
Ollama instalado
Daemon activo en el puerto 11434. Verifica con curl http://localhost:11434. Si empiezas desde cero, sigue primero la guía de instalación de Ollama del sitio.
Un modelo descargado
ollama pull qwen3.5:9b para mayor versatilidad, o qwen3.5:4b si quieres algo más ligero. Para los flujos de trabajo de clasificación, granite4.2:8b es sólido y muy eficiente en tokens.
Docker + Docker Compose
n8n se despliega en unos segundos con Docker. Docker Desktop en Windows/macOS, Docker Engine en Linux.
8 GB de RAM libres
n8n consume ~500 MB y Ollama carga el modelo en la VRAM (~6,6 GB para un 9B Q4). Prevé un margen amplio de memoria si quieres varios flujos de trabajo simultáneos.
Un poco de paciencia para el no-code
n8n es visual pero no mágico: entender JSON y las expresiones {{ $json.field }} sigue siendo útil.
→
Modelo recomendado para comenzar
qwen3.5:9b en Q4_K_M. Bueno en francés, 256k de contexto, admite herramientas (llamadas a funciones) y visión, cabe en 6,6 GB de VRAM. Si tienes 12 GB o más, pasa a qwen3.5:9b-q8_0 (11 GB) para la clasificación: la precisión mejora claramente.

#1. Instalar n8n en modo autoalojado mediante Docker

El método oficial y más sencillo es usar una imagen Docker mantenida por el equipo de n8n. Crea un directorio dedicado y un archivo docker-compose.yml:

docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - GENERIC_TIMEZONE=Europe/Paris
      - N8N_SECURE_COOKIE=false
    volumes:
      - ./n8n_data:/home/node/.n8n
    extra_hosts:
      - "host.docker.internal:host-gateway"

La línea extra_hosts es la clave: desde el contenedor n8n, llamarás a Ollama mediante http://host.docker.internal:11434 en lugar de localhost (que apuntaría al propio contenedor). Solo en Linux, este truco requiere la directiva host-gateway.

Iniciar n8n
docker compose up -d
docker compose logs -f n8n

Abre http://localhost:5678. En el primer acceso, n8n te pide crear una cuenta de propietario: permanece local y no hay telemetría obligatoria. Una vez que inicias sesión, llegas al lienzo vacío.

!
¿Exponer n8n a Internet?
Para uso personal, mantén n8n detrás de tu red local. Si debes exponerlo (webhooks públicos), pasa obligatoriamente por un reverse proxy con HTTPS (Caddy, Traefik) y activa N8N_BASIC_AUTH_ACTIVE=true. Una instancia de n8n expuesta sin autenticación = acceso completo a tus workflows y credenciales.

#2. Configurar el nodo Ollama en n8n

n8n ofrece dos formas de llamar a Ollama: el nodo dedicado "Ollama Chat Model" (integrado en la rama LangChain de n8n) y una llamada HTTP genérica. El nodo dedicado es más limpio para agentes y cadenas; la llamada HTTP ofrece más control. Ambos funcionan.

  1. 01
    Añadir un nodo Ollama
    En el lienzo, escribe "/" y busca "Ollama". Elige "Ollama Chat Model" (bajo AI > Language Models).
  2. 02
    Crear una credencial
    En el campo Credential, haz clic en "Create new". Base URL: http://host.docker.internal:11434 (desde el contenedor Docker) o http://localhost:11434 si n8n se ejecuta de forma nativa. Sin clave API —es local—.
  3. 03
    Probar la conexión
    n8n prueba automáticamente y lista los modelos disponibles. Si la lista está vacía, verifica con docker exec n8n curl http://host.docker.internal:11434/api/tags desde el host.
  4. 04
    Elegir el modelo
    En el menú desplegable Model, selecciona qwen3.5:9b (o el que hayas descargado). Deja Temperature en 0.7 por defecto y redúcela a 0.2 para tareas deterministas (clasificación, extracción).
i
El nodo HTTP Request sigue siendo útil
Para llamadas más inusuales (streaming, formato JSON forzado, parámetros avanzados num_ctx o stop), un nodo HTTP Request que envíe una petición POST a http://host.docker.internal:11434/api/generate ofrece un control del 100 %. El cuerpo usa el mismo JSON que aparece en la documentación de Ollama.

#3. Primer flujo de trabajo: resumir un flujo RSS

Caso típico: sigues 15 blogs de tecnología, quieres un resumen diario en francés sin leerlo todo. n8n recupera los nuevos artículos, Ollama los resume, el resultado se envía por correo o se escribe en un archivo Markdown.

  1. 01
    Trigger: Schedule Trigger
    Ajusta nómina todos los días a las 7 de la mañana. Expresión de Cron: 0 7 * * *.
  2. 02
    Obtener el feed: RSS Feed Trigger o RSS Read
    URL del feed (por ejemplo: https://blog.lemondeinformatique.fr/feed/). Activa "Return only new items" para no volver a resumir los elementos antiguos.
  3. 03
    Dividir si es necesario: Split In Batches
    Si el flujo devuelve 10 artículos, límitalos a 5 para evitar saturar Ollama. Batch size: 1, para procesar artículo por artículo.
  4. 04
    Llamar a Ollama
    Nodo Ollama Chat Model con este prompt de sistema y el artículo como mensaje del usuario.
Contenido del nodo Ollama
{
  "system": "Tu es un assistant éditorial. Résume l'article en 3 puces de 15 mots maximum, en français, ton neutre. Pas d'intro, juste les puces.",
  "prompt": "Titre : {{ $json.title }}\n\nContenu : {{ $json.content }}"
}
  1. 01
    Agregar los resúmenes: Merge o Code
    Combina los resultados de cada artículo en un único cuerpo de correo. Basta con un nodo Code (JavaScript) con items.map(i => `**${i.json.title}**\n${i.json.response}`).join('\n\n').
  2. 02
    Enviar: Send Email o escribir un archivo
    Nodo Email (SMTP) para enviar a tu dirección, o nodo Write Binary File para escribir en /home/node/.n8n/daily-digest.md (guardado de forma persistente en el volumen Docker).
→
Consejo: contexto corto = velocidad
Con un 9B en Q4, un artículo de 800 palabras se resume en 4-6 segundos. Si quieres acelerar el proceso, pide explícitamente "Lee solo las primeras 500 palabras" y trunca el contenido en n8n con una expresión {{ $json.content.slice(0, 2000) }}.

#4. Flujo de trabajo: traducción de correos entrantes

Caso típico: recibes correos de proveedores en inglés, alemán y español. Quieres leerlos en francés sin Google Translate (que recopila el contenido). n8n supervisa tu buzón IMAP, Ollama traduce y el resultado acaba en una etiqueta "Traducido" o en un borrador de respuesta.

  1. 01
    Trigger: IMAP Email
    Configura tus credenciales IMAP (Gmail requiere una contraseña de aplicación). Filtro: todos los correos no leídos de la carpeta INBOX. Consulta periódica cada 10 minutos.
  2. 02
    Detectar el idioma: Ollama #1
    Primera llamada a Ollama con prompt de sistema: "Responde únicamente con el código ISO 639-1 del idioma de este texto (fr, en, de, es...). Sin frase, solo dos letras." Prompt: {{ $json.subject }} {{ $json.textPlain }}.
  3. 03
    Bifurcar: nodo IF
    Condición: {{ $json.response }} ≠ "fr". Si es verdadera → traducir. Si es falsa → ignorar (ya está en francés).
  4. 04
    Traducir: Ollama #2
    Prompt de sistema: "Traduce el siguiente texto a un francés natural. Conserva el formato (párrafos, listas). No hagas comentarios, traduce directamente." Prompt: el cuerpo del correo.
  5. 05
    Acción final
    Dos opciones: nodo de Gmail "Add Label" + escritura de la traducción al principio del mensaje mediante "Reply Draft", o simplemente envío de una notificación por Slack/Telegram con la versión traducida.
!
Trampa clásica: el HTML
Los correos suelen estar en HTML (firmas, imágenes, etiquetas de seguimiento). Usa el campo textPlain en lugar de html, o añade un nodo HTML Extract para limpiar antes de enviar a Ollama. De lo contrario, tu LLM intentará traducir <table>...

#5. Flujo de trabajo: clasificar leads entrantes

Caso típico: un formulario de contacto rellena una base de datos de Airtable / Notion / Postgres. Quieres clasificar automáticamente cada lead: Hot / Warm / Cold, sector de actividad, urgencia. n8n escucha la base de datos, Ollama lee el mensaje de texto libre y escribe las etiquetas estructuradas.

Este flujo utiliza el modo JSON de Ollama, que fuerza la salida a respetar un esquema. Indispensable cada vez que se habla de datos estructurados.

Cuerpo de la petición del nodo HTTP Request a Ollama
{
  "model": "qwen3.5:9b",
  "format": "json",
  "stream": false,
  "options": { "temperature": 0.1 },
  "system": "Tu es un assistant CRM. Réponds uniquement en JSON valide avec les clés : temperature (Hot/Warm/Cold), secteur (string court), urgence (1-5).",
  "prompt": "Message du lead : {{ $json.message }}\n\nEntreprise : {{ $json.company }}"
}
  1. 01
    Trigger: Airtable/Postgres Trigger
    Con "New row in table Leads". Consulta periódica cada 5 minutos, o un webhook si tu fuente lo permite (respuesta más inmediata).
  2. 02
    Llamada a Ollama en modo JSON
    Nodo HTTP Request con método POST a http://host.docker.internal:11434/api/generate y el cuerpo indicado arriba. La respuesta llega en $json.response (cadena JSON).
  3. 03
    Analizar: nodo Code o Set
    JSON.parse($input.first().json.response) extrae temperature, secteur, urgence. Si el análisis falla (el modelo alucina), vuelve a intentarlo con una temperatura de 0.
  4. 04
    Escribir en el CRM
    Nodo Airtable Update / Postgres Update con los tres campos. Opcional: si temperature = Hot y urgence ≥ 4, activar un nodo de Slack que envíe una notificación a commercial@boite.fr.
→
¿Por qué temperature 0.1 aquí?
Para la clasificación, necesitas coherencia: dos leads idénticos deben recibir la misma etiqueta. Una temperatura baja (0 a 0.2) elimina el azar del muestreo. Reserva 0.7+ para tareas creativas (redacción, brainstorming).

#Consejos y solución de problemas

n8n no puede conectarse a Ollama
¿Error ECONNREFUSED en localhost:11434? Estás en Docker: utiliza host.docker.internal. En Linux, verifica que extra_hosts esté incluido en el archivo Compose y que Ollama escuche en 0.0.0.0 (OLLAMA_HOST=0.0.0.0:11434).
Workflow lento
Ollama carga el modelo en frío (5-15 s la primera vez). Para mantenerlo cargado, ejecuta en paralelo un cron que envíe una solicitud a /api/generate cada 4 minutos, o aumenta el tiempo de permanencia con OLLAMA_KEEP_ALIVE=30m.
El modelo produce alucinaciones al clasificar
Usar siempre format: "json" + un prompt de sistema que enumere los valores permitidos. Si el 9B en Q4 sigue dando resultados poco claros, pasar a qwen3.5:9b-q8_0 mejora notablemente la robustez del JSON.
Volúmenes de Docker perdidos
El flujo de trabajo y las credenciales están en ./n8n_data. Nunca elimines esta carpeta sin una copia de seguridad. Exporta tus flujos de trabajo en JSON a través del menú (Settings > Workflows > Download) para llevar un control de versiones en Git.
Demasiadas llamadas = saturación de VRAM
Si un flujo de trabajo desencadena 20 llamadas a Ollama en paralelo, la GPU se satura. Usa Split In Batches con un tamaño de lote de 1 o añade OLLAMA_NUM_PARALLEL=1 para ejecutarlas en serie.
Versiones de n8n
n8n lanza una actualización mayor cada ~10 días. docker compose pull && docker compose up -d actualiza. El nodo Ollama es estable desde la 1.18+.
i
Versionar tus workflows
Un workflow de n8n exportado es un JSON limpio. Haz un commit de ese archivo en un repositorio Git privado: conservas el historial, puedes restaurarlo si lo rompes todo y puedes compartirlo fácilmente con un compañero.

#Para ir más allá

Tienes un flujo de trabajo funcional con n8n + Ollama. Algunas ideas para seguir avanzando:

Conectar un RAG
La guía de RAG con ChromaDB del sitio muestra cómo indexar tus PDF y notas. Puedes llamar a este pipeline RAG desde n8n mediante un endpoint HTTP: tus flujos de trabajo pasan a utilizar el contexto de tu base de conocimientos.
Optimizar el modelo
Si tus flujos de trabajo procesan grandes volúmenes de datos, lee la guía de cuantización Q4/Q5/Q8: bajar a Q4_K_M puede reducir a la mitad el consumo de VRAM sin pérdida visible en tareas de clasificación.
Elegir una GPU dedicada
Si n8n + Ollama deben funcionar 24/7 en una máquina, la guía de compra de GPU del sitio indica los umbrales de 12/16/24 GB según tus flujos de trabajo objetivo.
¿Esta guía te ha ayudado?

¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.