En este artículo te enseñamos cómo desplegar una potente suite de automatización en tu entorno local utilizando herramientas open source: n8n para los flujos de trabajo, Ollama como motor LLM local, y Docker Compose para orquestarlo todo fácilmente.
🧪 ¿Qué vamos a construir?
Crearemos un entorno que permite automatizar tareas con flujos visuales gracias a n8n y resolver peticiones de lenguaje natural con Ollama, todo ejecutándose en tu equipo.
Como ejemplo práctico, desarrollaremos un flujo de trabajo en n8n que:
- Leemos un archivo PDF desde el disco.
- Extraemos su contenido en texto.
- Construimos un prompt para Ollama solicitando un resumen del contenido.
- Enviamos la petición a Ollama para que procese el prompt.
- Devolvemos el resumen en formato JSON.
⚙️ Requisitos previos
- Docker y Docker Compose instalados.
- Tarjeta gráfica compatible con aceleración por GPU (recomendado para Ollama).
- Nvidia Container Toolkit habilitado para el uso de la GPU con Docker.
- Un archivo PDF de ejemplo para probar.
🐳 Paso 1: Preparar el entorno con Docker Compose
Creamos un archivo docker-compose.yml con los siguientes servicios:
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: always
ports:
- "${N8N_PORT}:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
- TZ=Europe/Madrid
volumes:
- n8n_data:/home/node/.n8n
- ./input:/files #Directorio donde tendremos el archivo PDF
ollama:
image: ollama/ollama
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics
gpus: all
volumes:
- ollama_data:/root/.ollama
restart: unless-stopped
volumes:
ollama_data:
n8n_data:Puedes definir las variables de entorno en un archivo .env:
N8N_PORT=5678
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=admin123
DATA_FOLDER=/home/node/.n8nIniciamos el entorno con:
docker compose up -d🧠 Paso 2: Cargar un modelo en Ollama
Una vez arrancado el contenedor ollama, descarga el modelo que prefieras (por ejemplo llama3):
docker compose exec ollama ollama pull llama3Esto pondrá en marcha el servidor local de inferencia LLM en http://localhost:11434.
🔧 Paso 3: Crear el flujo en n8n
Accede a http://localhost:5678 con las credenciales que hayas definido.
Crea un nuevo workflow que contenga los siguientes nodos:
1. Comienzo
Creamos un nuevo nodo de comienzo haciendo click con el botón derecho y seleccionando la opción 'Add node' y en la barra lateral que aparecerá seleccionamos la opción 'Trigger manually'. En el editor aparecerá un nuevo artefacto con el icono del puntero.
2. Leer archivo PDF
Hacemos click sobre el símbolo '+' que aparece a la derecha del artefacto y en la barra que aparece a la derecha buscamos la opción 'Read/Write Files From Disk' y a continuación seleccionamos la opción 'Read File(s) From Disk'. Esto abrirá una nueva ventana en la que tendremos que definir la ruta del archivo, en nuestro caso /files/ejemplo.pdf
3. Extraer texto del PDF
Una vez tenemos acceso al archivo, procedemos a su lectura. Para ello hacemos el mismo paso anterior pero seleccionando la opción 'Extract from File' y luego seleccionamos 'Extract from PDF'. Configuramos el nuevo artefacto como se muestra en la siguiente imagen.
4. Construir prompt
A continuación, para construir nuestro prompt, necesitaremos crear un artefacto que nos permita ejecutar un código Javascript. Para ello seleccionamos la opción 'Code' y añadimos el siguiente fragmento de código.
const pdf = $input.first().json.text;
const prompt = `Hazme un resumen del siguiente documento: ${pdf}`;
return [{ json: { prompt } }];
5. Petición a Ollama
Ya con nuestro prompt listo, lo único que nos queda es enviarlo al servicio de Ollama. Para ello añadimos un nuevo artefacto de tipo 'HTTP Request' y los configuramos de la siguiente manera:
- Método: POST
- URL:
http://ollama:11434/api/generate - Headers:
Content-Type: application/json - Body (RAW JSON):
{
"model": "llama3",
"prompt": "{{$json["prompt"]}}",
"stream": false
}
6. Procesar respuesta
Para terminar, aunque no es necesario, vamos a hacer un ejemplo de lo que en otro caso sería un procesamiento de la respuesta que nos devuelve Ollama. Para ello volvemos a crear una función con el artefacto 'Code' y le añadimos el siguiente código Javascript:
// Obtener el texto de la respuesta
const raw = $('Petición HTTP a Ollama').first().json.response;
// Devolver el texto formateado
return [{ json: { 'resumen' : raw } }];
✅ Resultado
Volvemos al editor y ejecutamos el flujo completo pulsando en el botón 'Execute workflow'. Esto iniciará todo el proceso, mostrándonos el log de ejecución y al finalizar nos devolverá un resultado como el que podemos observar en la siguiente imagen:
🏁 Conclusión
Esta solución demuestra cómo puedes combinar herramientas open source para construir flujos de automatización avanzados, sin depender de servicios externos. Es ideal para entornos seguros, pruebas internas, o desarrollos rápidos que no requieran de procesos muy costosos de cómputo y uso de GPU.
Además, este enfoque es especialmente útil cuando se trabaja con datos sensibles o comprometidos, ya que permite ejecutar modelos de inteligencia artificial en entornos propios, sin enviar información a servicios externos, garantizando así la privacidad y el control total sobre los datos.
Con n8n + Ollama + Docker tienes a tu alcance una suite de automatización avanzada, extensible y fácil de desplegar en cualquier tipo de entorno.
¿Quieres integrar automatizaciones o soluciones IA en los procesos de tu negocio? ¿Te gustaría explorar otros casos de uso personalizados? Contáctanos y te ayudaremos.