n8n + Ollama : automatizzare con IA al 100 % locale
n8n è lo strumento di automazione no-code più credibile come alternativa a Zapier o Make, con un vantaggio decisivo: puoi ospitarlo autonomamente. Abbinato a Ollama, ti offre una catena completa in cui i dati non lasciano mai la tua macchina — email tradotte, articoli riassunti, lead classificati, il tutto senza chiamate ad API esterne. Questa guida all'automazione con n8n e Ollama illustra in dettaglio l'installazione, il nodo Ollama nativo e tre workflow concreti pronti da copiare.
#Perché combinare n8n e Ollama?
n8n è un orchestratore visivo: colleghi nodi (trigger, HTTP, database, LLM…) senza scrivere codice, e il workflow viene eseguito in background tramite un cron, un webhook o una casella di posta. Tutti i concorrenti rivolti al grande pubblico (Zapier, Make, Power Automate) fanno pagare in base al volume e richiedono che i tuoi dati passino per i loro server.
Ollama, invece, espone un LLM locale su http://localhost:11434 con un'API HTTP compatibile. Dalla fine del 2023, n8n include un nodo Ollama nativo (e anche un nodo compatibile con OpenAI che funziona). Risultato: un workflow che riassume i PDF dei clienti o smista le email delle risorse umane non fa mai uscire un solo byte dalla tua infrastruttura.
#Prerequisiti
Agenti che agiscono sulla tua macchina: Cline agentico, MCP, n8n + Ollama, automazioni locali.
- Spazio online a vita
- PDF + file
- Aggiornamenti a vita
- Ollama installato
- Daemon attivo sulla porta 11434. Verifica con curl http://localhost:11434. Se parti da zero, segui prima la guida all'installazione di Ollama del sito.
- Un modello scaricato
- ollama pull qwen3.5:9b pour la polyvalence, ou qwen3.5:4b si vous voulez plus léger. Pour les workflows de classification, granite4.2:8b est solide et très sobre en tokens.
- Docker + Docker Compose
- Il deployment di n8n richiede pochi secondi con Docker. Docker Desktop su Windows/macOS, Docker Engine su Linux.
- 8 GB di RAM liberi
- n8n consuma circa 500 MB, Ollama carica il modello nella VRAM (~6,6 GB per un 9B Q4). Prevedi un ampio margine se vuoi eseguire più workflow contemporaneamente.
- Un po' di pazienza per il no-code
- n8n è visivo ma non magico: capire JSON e le espressioni {{ $json.field }} rimane utile.
#1. Installare n8n in modalità self-hosted tramite Docker
Il metodo ufficiale e più semplice consiste nell'usare un'immagine Docker mantenuta dal team n8n. Crea una cartella dedicata e un file docker-compose.yml:
La riga extra_hosts è la chiave: dal container n8n, chiamerai Ollama tramite http://host.docker.internal:11434 anziché localhost (che punterebbe al container stesso). Solo su Linux, questo accorgimento richiede la direttiva host-gateway.
Apri http://localhost:5678. Al primo accesso, n8n ti chiede di creare un account proprietario — rimane locale, nessuna telemetria obbligatoria. Una volta connesso, ti trovi su un canvas vuoto.
#2. Configurare il nodo Ollama in n8n
n8n offre due modi per chiamare Ollama: il nodo dedicato "Ollama Chat Model" (integrato nel ramo LangChain di n8n) e una chiamata HTTP generica. Il nodo dedicato è una soluzione più pulita per agenti e catene; la chiamata HTTP offre maggiore controllo. Entrambi funzionano.
- 01Aggiungere un nodo OllamaSul canvas, digita '/' e cerca "Ollama". Seleziona "Ollama Chat Model" (sotto AI > Language Models).
- 02Creare una credenzialeNel campo Credential, clicca "Create new". Base URL: http://host.docker.internal:11434 (dal container Docker) o http://localhost:11434 se n8n funziona in modo nativo. Nessuna chiave API — è locale.
- 03Testare la connessionen8n esegue automaticamente un test ed elenca i modelli disponibili. Se l'elenco è vuoto, verifica dall'host con docker exec n8n curl http://host.docker.internal:11434/api/tags.
- 04Scegliere il modelloNel menu a discesa Model, seleziona qwen3.5:9b (o il modello che hai scaricato). Lascia Temperature al valore predefinito di 0.7 e abbassalo a 0.2 per compiti deterministici (classificazione, estrazione).
#3. Primo workflow: riassumere un flusso RSS
Caso tipo: segui 15 blog tecnici, vuoi un riassunto quotidiano in francese senza leggere tutto. n8n recupera gli articoli nuovi, Ollama li riassume, il risultato viene inviato via e-mail o scritto in un file Markdown.
- 01Trigger: Schedule TriggerImpostalo per eseguirsi ogni giorno alle 7. Modalità Cron expression: 0 7 * * *.
- 02Recuperare il feed: RSS Feed Trigger o RSS ReadURL del feed (es.: https://blog.lemondeinformatique.fr/feed/). Attiva "Return only new items" per evitare di riassumere di nuovo gli elementi precedenti.
- 03Dividere se necessario: Split In BatchesSe il flusso restituisce 10 articoli, limita il numero a 5 per evitare di saturare Ollama. Batch size: 1, per elaborare un articolo alla volta.
- 04Chiamare OllamaNodo Ollama Chat Model con questo system prompt e l'articolo come messaggio utente.
- 01Aggregare i riassunti: Merge o CodeCombina i risultati di ciascun articolo in un unico corpo dell'email. Basta un nodo Code (JavaScript) con items.map(i => `**${i.json.title}**\n${i.json.response}`).join('\n\n').
- 02Inviare: Send Email o scrivere un fileNodo Email (SMTP) per inviare al tuo indirizzo email, oppure nodo Write Binary File per scrivere in /home/node/.n8n/daily-digest.md (salvato in modo persistente nel volume Docker).
#4. Workflow: traduzione di email in arrivo
Caso tipico: ricevi email dai fornitori in inglese, tedesco e spagnolo. Vuoi leggerle in francese senza Google Translate (che acquisisce il contenuto). n8n monitora la tua casella IMAP, Ollama traduce e il risultato finisce sotto un'etichetta "Tradotto" o in una risposta salvata come bozza.
- 01Trigger: IMAP EmailConfigura le tue credenziali IMAP (Gmail richiede una password per le app). Filtro: tutte le email non lette nella casella INBOX. Polling ogni 10 minuti.
- 02Rilevare la lingua: Ollama #1Prima chiamata a Ollama con prompt di sistema: "Rispondi solo con il codice ISO 639-1 della lingua di questo testo (fr, en, de, es...). Nessuna frase, solo due lettere." Prompt: {{ $json.subject }} {{ $json.textPlain }}.
- 03Creare una diramazione: nodo IFCondizione: {{ $json.response }} ≠ "fr". Se vero → tradurre. Se falso → ignorare (già in francese).
- 04Tradurre: Ollama #2Prompt di sistema: "Traduci il testo seguente in francese naturale. Preserva la formattazione (paragrafi, elenchi). Non commentare, traduci direttamente." Prompt: il corpo dell'email.
- 05Azione finaleDue opzioni: nodo Gmail "Add Label" + inserimento della traduzione all'inizio del messaggio tramite "Reply Draft", oppure semplicemente l'invio di una notifica Slack/Telegram con la versione tradotta.
#5. Workflow: classificare i lead in arrivo
Caso tipico: un modulo di contatto alimenta un database Airtable / Notion / Postgres. Vuoi classificare automaticamente ogni lead: Hot / Warm / Cold, settore di attività, urgenza. n8n monitora il database, Ollama legge il messaggio in testo libero e scrive i tag strutturati.
Questo workflow utilizza la modalità JSON di Ollama, che obbliga l'output a rispettare uno schema. Indispensabile ogni volta che si parla di dati strutturati.
- 01Trigger: Airtable/Postgres TriggerSu "New row in table Leads". Polling ogni 5 minuti, oppure webhook se la tua fonte lo permette (più reattivo).
- 02Chiamata Ollama in modalità JSONNodo HTTP Request con metodo POST su http://host.docker.internal:11434/api/generate e il corpo della richiesta indicato sopra. La risposta arriva in $json.response (stringa JSON).
- 03Eseguire il parsing: nodo Code o SetJSON.parse($input.first().json.response) estrae temperature, secteur, urgence. Se il parsing fallisce (il modello genera allucinazioni), riprova con una temperatura pari a 0.
- 04Scrivere nel CRMNodo Airtable Update / Postgres Update con i tre campi. Opzionale: se temperature = Hot e urgenza ≥ 4, attivare un nodo Slack che invia una notifica a commercial@boite.fr.
#Suggerimenti e risoluzione dei problemi
- n8n non riesce a connettersi a Ollama
- Errore ECONNREFUSED su localhost:11434? Sei dentro Docker — usa host.docker.internal. Su Linux, verifica che extra_hosts sia presente nel file Compose e che Ollama ascolti su 0.0.0.0 (OLLAMA_HOST=0.0.0.0:11434).
- Workflow lento
- Ollama carica il modello a freddo (5-15 secondi la prima volta). Per mantenerlo caricato, avvia in parallelo un cron che invii un ping a /api/generate ogni 4 minuti, oppure aumenta il tempo di permanenza in memoria impostando OLLAMA_KEEP_ALIVE=30m.
- Il modello genera allucinazioni durante la classificazione
- Utilizzare sempre format: "json" + un prompt di sistema che elenca i valori ammessi. Se il 9B in Q4 continua a dare risultati poco chiari, passare a qwen3.5:9b-q8_0 migliora notevolmente la robustezza dell'output JSON.
- Volumi Docker persi
- Il workflow e le credenziali si trovano in ./n8n_data. Non eliminare mai questa cartella senza un backup. Esporta i tuoi workflow in JSON tramite il menu (Settings > Workflows > Download) per tenerli sotto controllo di versione con Git.
- Troppe chiamate = saturazione della VRAM
- Se un workflow attiva 20 chiamate Ollama in parallelo, la GPU si satura. Usa Split In Batches con batch size 1 o aggiungi OLLAMA_NUM_PARALLEL=1 per serializzare le chiamate.
- Versioni n8n
- n8n rilascia una versione principale ogni ~10 giorni. docker compose pull && docker compose up -d aggiorna. Il nodo Ollama è stabile da 1.18 in poi.
#Per approfondire
Hai una pipeline n8n + Ollama funzionante. Ecco alcune idee per i prossimi passi:
- Collegare un RAG
- La guida RAG ChromaDB del sito mostra come indicizzare i tuoi PDF e le tue note. Puoi richiamare questa pipeline RAG da n8n tramite un endpoint HTTP: i tuoi workflow possono così usare il contesto della tua base di conoscenze.
- Ottimizzare il modello
- Se i tuoi workflow elaborano grandi volumi di dati, leggi la guida sulla quantizzazione Q4/Q5/Q8: passare a Q4_K_M può dimezzare la VRAM senza perdita visibile nella classificazione.
- Scegliere una GPU dedicata
- Se n8n + Ollama devono girare 24/7 su una macchina, la guida all'acquisto GPU del sito fornisce le soglie 12/16/24 GB in base ai tuoi workflow target.
Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.