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 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.
#Prerrequisitos
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.
#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:
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.
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.
#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.
- 01Añadir un nodo OllamaEn el lienzo, escribe "/" y busca "Ollama". Elige "Ollama Chat Model" (bajo AI > Language Models).
- 02Crear una credencialEn 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—.
- 03Probar la conexiónn8n 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.
- 04Elegir el modeloEn 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).
#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.
- 01Trigger: Schedule TriggerAjusta nómina todos los días a las 7 de la mañana. Expresión de Cron: 0 7 * * *.
- 02Obtener el feed: RSS Feed Trigger o RSS ReadURL del feed (por ejemplo: https://blog.lemondeinformatique.fr/feed/). Activa "Return only new items" para no volver a resumir los elementos antiguos.
- 03Dividir si es necesario: Split In BatchesSi el flujo devuelve 10 artículos, límitalos a 5 para evitar saturar Ollama. Batch size: 1, para procesar artículo por artículo.
- 04Llamar a OllamaNodo Ollama Chat Model con este prompt de sistema y el artículo como mensaje del usuario.
- 01Agregar los resúmenes: Merge o CodeCombina 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').
- 02Enviar: Send Email o escribir un archivoNodo 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).
#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.
- 01Trigger: IMAP EmailConfigura 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.
- 02Detectar el idioma: Ollama #1Primera 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 }}.
- 03Bifurcar: nodo IFCondición: {{ $json.response }} ≠ "fr". Si es verdadera → traducir. Si es falsa → ignorar (ya está en francés).
- 04Traducir: Ollama #2Prompt 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.
- 05Acción finalDos 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.
#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.
- 01Trigger: Airtable/Postgres TriggerCon "New row in table Leads". Consulta periódica cada 5 minutos, o un webhook si tu fuente lo permite (respuesta más inmediata).
- 02Llamada a Ollama en modo JSONNodo 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).
- 03Analizar: nodo Code o SetJSON.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.
- 04Escribir en el CRMNodo 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.
#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+.
#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.
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.