🍺 Buy me a beer
🤖

IA On-Premises per Svogliati

Girare modelli AI sul tuo hardware senza pagare abbonamenti, senza mandare dati in cloud, e senza aspettarti miracoli.

Da "ho sentito che posso girare ChatGPT a casa" a "so scegliere il modello giusto per quello che mi serve"

"Un modello locale che risponde in 30 secondi è meglio di nessun modello. A volte. Dipende."

Capitolo 01

IA On-Premises: Che Significa?

No, non stai "girando ChatGPT". Ma qualcosa di interessante sì.

🎲 Analogia per Svogliati

I modelli AI in cloud (ChatGPT, Claude, Gemini) sono come un ristorante stellato dove puoi ordinare quello che vuoi, il cuoco è fantastico, ma ogni piatto costa, devi fare la fila, e il cuoco sente tutto quello che dici al tavolo. L'IA locale è come avere un cuoco a casa: più lento, meno bravo sui piatti difficili, ma sempre disponibile, gratuito dopo l'investimento iniziale, e non riporta niente a nessuno. La scelta dipende da cosa cucini e quanto ti importa della privacy.

Perché Farlo

  • Privacy totale — i dati non escono dalla tua rete
  • Costo zero a regime — nessun abbonamento, nessun token da pagare
  • Offline — funziona anche senza internet
  • Personalizzabile — fine-tuning, system prompt fissi, integrazione custom
  • Nessun rate limit — 1000 richieste al minuto? Fatti pure
  • Compliance — dati aziendali sensibili che non puoi mandare in cloud

Perché NON Farlo (o aspettarsi di meno)

  • Qualità inferiore — anche il migliore modello locale fatica contro GPT-5.5 o Claude Opus 4.8
  • Hardware costoso — per andare bene serve una GPU decente
  • Lento su hardware modesto — aspetti 2 minuti per una risposta? Si può fare di meglio
  • Configurazione — non è "scarica e funziona" al 100%
  • Aggiornamenti manuali — i modelli migliorano veloce, devi tenerti aggiornato
⚖ Locale vs Cloud — Il Quadro Completo
🏠 LOCALE (On-Premises) La tua app prompt Ollama / LM Studio + modello locale (Llama, Mistral...) ✅ Dati non escono dalla rete ✅ Costo zero dopo acquisto HW ✅ Offline, zero rate limit ❌ Più lento e meno capace ❌ Richiede GPU / RAM abbondante ☁️ CLOUD (API) La tua app prompt OpenAI / Anthropic GPT-5.5 / Claude Opus 4.8 Gemini 3.5... ✅ Qualità molto superiore ✅ Veloce, sempre aggiornato ✅ Nessun HW da comprare ❌ I tuoi prompt girano su server altrui ❌ Costo a consumo, rate limit
💡 La risposta giusta? Entrambi. I modelli locali per le task di tutti i giorni dove la privacy conta o la latenza non è critica. I modelli cloud per i task difficili che richiedono ragionamento complesso. Questo capitolo ti insegna a fare entrambe le cose e a capire quando usare quale.
Capitolo 02

L'Hardware — La Parte Scomoda

La GPU è tutto. La RAM è tutto. La CPU quasi non conta.

🎲 Analogia per Svogliati

Un modello AI è fondamentalmente una moltiplicazione di matrici enormi. La GPU è progettata per fare esattamente questo in parallelo — migliaia di core piccoli invece di pochi core grossi. La VRAM (memoria della GPU) è il vero collo di bottiglia: il modello deve starci tutto dentro. Se il modello non ci sta in VRAM, finisce in RAM di sistema, che è 10-50x più lenta. Se non ci sta nemmeno lì, va su disco: a quel punto vai a fare una passeggiata mentre aspetti la risposta.

📊 La Regola della VRAM

Regola pratica per stimare quanta VRAM serve un modello:

stima VRAM necessaria
# Quantizzazione = riduzione della precisione per risparmiare memoria
# Q4 = 4 bit per parametro (~50% di un float16), qualità ok
# Q8 = 8 bit per parametro, qualità quasi identica al pieno

VRAM (GB) ≈ (parametri in miliardi) × (bit / 8) + ~15-20% overhead (KV cache)

Qwen3 8B       a Q4:  8 × 0.5  = ~5-6 GB VRAM  # RTX 3060 12GB / RTX 5060 Ti: ✓
gpt-oss 20B    MXFP4:  21B MoE = ~13 GB VRAM  # RTX 5060 Ti 16GB: ✓ (3.6B attivi)
Qwen3 14B      a Q4: 14 × 0.5  = ~9-10 GB VRAM # RTX 5070 12GB: ✓ (giusto)
Qwen3 32B      a Q4: 32 × 0.5  = ~18-20 GB VRAM # RTX 3090/4090/5090 24-32GB: ✓
gpt-oss 120B   MXFP4: 117B MoE = ~60-65 GB    # Mac 128GB / GPU 80GB: ✓ (5.1B attivi)
Llama 4 Scout  a Q4: 109B MoE  = ~60 GB       # Mac 64-128GB unified
DeepSeek 671B  a Q4: 671B MoE  = ~380 GB      # classe server, o Mac Studio 512GB

# MoE (Mixture-of-Experts): conta i parametri TOTALI per la VRAM,
#   ma solo quelli ATTIVI per la velocità → modelli grandi ma rapidi
# MXFP4 = quant FP4 nativo (gpt-oss): qualità quasi piena a metà spazio
# Velocità approssimativa: VRAM >> RAM unificata (Mac/Strix) >> RAM >>> Disco

🏦 I Tier di Hardware

💩 Tier: Quello che Hai

CPU-only / GPU vecchia

GPU: assente o < 8GB VRAM

Funziona? Sì. È usabile? Dipende dalla tua soglia di dolore. Modelli piccoli (Gemma 3 1B/4B, Qwen3 1.7B/4B, Phi-4-mini) rispondono in 10-30 secondi su CPU decente. Utile per esperimentare.

  • Modelli consigliati: Gemma 3 4B, Qwen3 4B, Phi-4-mini, Gemma 3n
  • Token/sec attesi: 3-10 t/s su CPU
  • Adatto per: curiosità, test, task non urgenti
🟡 Tier: Si Fa

GPU con 12-16 GB VRAM

RTX 5060 Ti 16GB / RTX 5070 / RTX 3060 12GB / RX 9060 XT 16GB

Il sweet spot per cominciare seriamente. Qwen3 8B/14B a Q4 ci sta comodo, e con 16GB entra anche gpt-oss-20b (MoE, ~13GB) che ragiona vicino a o3-mini. Risposte in 30-60 t/s: fluido per uso quotidiano.

  • Modelli consigliati: gpt-oss-20b, Qwen3 8B/14B, Gemma 3 12B
  • Token/sec attesi: 30-60 t/s
  • Adatto per: uso quotidiano, coding assist, chat, reasoning leggero
🟢 Tier: Si Va Bene

GPU con 24-32 GB VRAM

RTX 3090 (usata) / RTX 4090 / RTX 5090 32GB / RX 7900 XTX

Qui si fa sul serio. La RTX 5090 con 32GB è il nuovo riferimento enthusiast; la RTX 3090 usata (24GB, ~600-900€) resta il miglior rapporto qualità/prezzo. Giri modelli 32B a Q4 o MoE come Qwen3-30B-A3B che vola.

  • Modelli consigliati: Qwen3 32B, Qwen3-Coder-30B-A3B, Gemma 3 27B, Magistral 24B
  • Token/sec attesi: 80-150+ t/s su 8B, ~30-50 t/s su 32B
  • Adatto per: tutto il quotidiano + RAG serio + coding agentico
🟣 Tier: Dio Della Guerra

Memoria unificata / Multi-GPU / mini-AI desktop

Mac Studio M3 Ultra 512GB / 2× RTX 3090 / DGX Spark / Strix Halo 128GB

Tre strade nel 2026: Mac Studio M3 Ultra fino a 512GB unificati a 819 GB/s (gira DeepSeek 671B in 4-bit a >20 t/s); NVIDIA DGX Spark o AMD Strix Halo (128GB unificati, ~$2-4k) per modelli fino a ~200B; oppure 2× RTX 3090 = 48GB con NVLink. Vedi il box dedicato sotto.

  • Modelli: gpt-oss-120b, Llama 4 Scout/Maverick, GLM-4.5-Air, DeepSeek 671B (solo Mac 512GB)
  • Token/sec attesi: 20-50 t/s su MoE grandi, dipende dalla banda memoria
  • Adatto per: sviluppo serio, RAG aziendale, fine-tuning, agenti

🔌 Le Nuove "Scatole IA" a Memoria Unificata novità 2025-2026

La grossa novità dell'ultimo anno: non servono più rack di GPU per i modelli grandi. La memoria unificata (CPU+GPU condividono la stessa RAM) permette di caricare modelli enormi su un mini-desktop. Lente in decoding rispetto a una GPU dedicata, ma con tanta memoria a poco prezzo.

SistemaMemoriaBandaPrezzo indic.Note
NVIDIA DGX Spark (GB10)128 GB unif.273 GB/s~$4.000Fino a ~200B; prefill fortissimo, decode lento (~3 t/s su 70B). ASUS Ascent GX10 ~$3.000
AMD Strix Halo (Ryzen AI Max+ 395)fino 128 GB unif.~256 GB/s~$2.000+Framework Desktop, mini-PC. MoE volano (Qwen3-30B ~98 t/s). ROCm maturo nel 2026
Mac Studio M3 Ultrafino 512 GB unif.819 GB/s$4.000 → $14.000Il re dei modelli grandi: DeepSeek 671B Q4 a >20 t/s in una scatola sola
Mac Studio M4 Maxfino 128 GB unif.546 GB/sda $1.999Ottimo equilibrio prezzo/prestazioni per 70B e MoE medi

⚠️ Prezzi indicativi di giugno 2026, gonfiati dalla carenza globale di memoria DRAM/GDDR7. La banda memoria è il vero numero da guardare: più è alta, più veloce genera token.

🍎 Il segreto di Apple Silicon: i Mac con chip M-series (fino a M4 e M5, con M5 Pro/Max usciti a marzo 2026) usano memoria unificata condivisa tra CPU e GPU. Un MacBook Pro M5 Max con 128GB la usa tutta come VRAM. Risultato: giri gpt-oss-120b o Llama 70B su un laptop. La velocità non è da RTX 5090, ma è sorprendentemente utilizzabile e consuma 10x meno corrente. Con il framework MLX (ora supportato anche da Ollama e LM Studio) le prestazioni su Mac sono ulteriormente migliori. È l'hardware preferito per chi vuole IA locale senza un PC da gaming.

📊 Confronto Rapido: Token al Secondo

HardwareModelloToken/secUsabilità
CPU moderna (no GPU)Qwen3 4B Q4~5-12 t/slento
RTX 5060 Ti 16GBgpt-oss-20b MXFP4~40-60 t/sok
RTX 3090 24GB (usata)Qwen3 8B Q8~80-110 t/sfluido
RTX 5090 32GBQwen3 32B Q4~45-70 t/sveloce
M4 Max 128GBgpt-oss-120b MXFP4~30-45 t/sfluido
M3 Ultra 512GBDeepSeek-R1 671B Q4~20-25 t/sok
DGX Spark / Strix Halo 128GBLlama 3.1 70B Q4~3-15 t/svariabile

Per riferimento: leggere testo a schermo comodamente richiede ~15-20 t/s. Sotto quella soglia senti la latenza.

⚠️ Attenzione al consumo energetico: una RTX 5090 consuma fino a 575W sotto carico (la 4090 450W). Se usi l'IA locale intensamente h24, il conto della luce lo senti. Fai i conti: 575W × 8h/giorno × 30 giorni × 0.25€/kWh = ~35€/mese solo di corrente per la GPU. Le scatole a memoria unificata (Mac, DGX Spark, Strix Halo) consumano molto meno — un M5 Max sta sotto i 80W sotto carico IA, ~10x meno per token di una GPU dedicata. Non è trascurabile.
Capitolo 03

I Modelli — Chi Scegliere

L'ecosistema open-weight cresce ogni settimana. Qui le scelte sensate.

💡 "Open source" vs "open weight": la maggior parte dei modelli "open" rilascia solo i pesi (i parametri addestrati), non il codice di training né i dati. Puoi usarli, ridistribuirli (spesso con limiti commerciali), ma non sai esattamente come sono stati addestrati. È comunque molto meglio di un modello chiuso.

🎯 Per uso Generale

gpt-oss 20B / 120B consigliato

OpenAI — 21B / 117B (MoE, Apache 2.0)

I primi pesi aperti di OpenAI dai tempi di GPT-2 (ago 2025). Architettura MoE con quantizzazione nativa MXFP4: il 20b sta in 16GB di VRAM e ragiona vicino a o3-mini, il 120b sta in ~65GB (Mac 128GB o GPU 80GB) e si avvicina a o4-mini. Reasoning effort regolabile (low/med/high), fortissimi su tool use e agenti. Oggi il punto di partenza per chi vuole ragionamento serio in locale.

21B / 117B MoE 128K context reasoning tool use

Qwen3 consigliato

Alibaba — 0.6B → 235B (Apache 2.0)

La famiglia open più completa e versatile del 2026. Dense da 0.6B a 32B, più MoE 30B-A3B (30B totali, solo 3B attivi: gira su 24GB e va velocissimo) e 235B-A22B. Edizioni separate Instruct e Thinking (256K context). Italiano ottimo, coding forte, tool use nativo. Il tuttofare da scegliere se non sai cosa scegliere.

0.6B → 235B MoE 30B-A3B 256K context italiano ottimo

Llama 4 Scout / Maverick

Meta — 109B / 400B (MoE, multimodale)

La generazione MoE di Meta (apr 2025), nativamente multimodale (testo+immagini). Scout (17B attivi / 109B totali) entra in una scatola a memoria unificata da 64-128GB; Maverick (17B / 400B) richiede hardware serio. Contesto enorme. Buoni ma meno dominanti del previsto: per uso locale spesso Qwen3 e gpt-oss rendono di più a pari hardware.

109B / 400B MoE multimodale long context

Gemma 3 / Gemma 3n

Google — 1B / 4B / 12B / 27B

I modelli di Google per uso locale (mar 2025), con checkpoint QAT ufficiali pensati per GPU consumer. Gemma 3 4B è eccezionale per le dimensioni; il 27B è multimodale e ottimo a Q4 in 24GB. Gemma 3n (E2B/E4B) è per edge/mobile e gestisce anche audio e video in 2-3GB.

1B / 4B / 12B / 27B multimodale 128K context

Mistral 3 / Magistral

Mistral AI — 24B dense / MoE (Apache 2.0)

Il team francese resta efficientissimo. Mistral Small 3.2 (24B, vision, 128K) è un dense compatto e veloce. Magistral Small è la versione reasoning open. E novità 2025: Mistral Large 3 (MoE 675B/41B) è il primo Large completamente aperto. Mixtral è stato ritirato.

24B / MoE 675B vision reasoning molto veloce

DeepSeek V3.2 / R1

DeepSeek — 671B MoE / 37B attivi

Il colosso open (MIT) che batte i frontier a frazione del costo. V3.2 introduce la Sparse Attention; R1 ragiona step-by-step al livello dei top cloud. Il 671B richiede un Mac Studio 512GB o un server, ma i distillati R1 (1.5B → 70B) girano in locale e sono eccellenti. Nota: cinese, valuta le implicazioni.

671B MoE distillati 1.5B → 70B reasoning top

GLM-4.5 / Kimi K2

Z.ai & Moonshot — MoE grandi

Due famiglie cinesi salite alla ribalta nel 2025 per uso agentico. GLM-4.5-Air (106B/12B, MIT) gira su un Mac 128GB ed è fortissimo su coding. Kimi K2 (MoE 1T/32B attivi) e la sua variante Thinking sono allo stato dell'arte sugli agenti, ma sono roba da server.

106B → 1T MoE agentic coding forte

💻 Per Coding

Qwen3-Coder top locale

Alibaba — 30B-A3B / 480B-A35B

Il miglior modello di coding eseguibile in locale nel 2026. Il 30B-A3B (MoE, 3B attivi) sta in 24GB / un Mac e regge ~51% SWE-bench restando velocissimo: il tuttofare ideale per coding agentico privato. Il 480B-A35B è frontiera ma da server. Esiste anche il piccolo Qwen2.5-Coder 7B/32B per autocomplete.

30B-A3B / 480B agentic 256K context

Devstral 2 coding

Mistral AI — Small 24B / 123B

Specializzato in coding agentico (modifica repo, esegue task multi-file). Devstral Small 2 (24B dense, Apache 2.0) entra in 16-24GB e tocca ~68% SWE-bench: tra i migliori modelli locali per lavorare davvero su un codebase, non solo autocomplete.

24B / 123B SWE-bench 68% agentico

gpt-oss-20b / Phi-4-reasoning

OpenAI & Microsoft — 21B / 14B

Per chi ha hardware limitato ma vuole codice e ragionamento solidi. gpt-oss-20b (16GB VRAM) è fortissimo su debugging e task agentici. Phi-4-reasoning-plus (14B, MIT) batte modelli più grandi su math e coding. Entrambi ottimi rapporti qualità/dimensione.

21B MoE / 14B reasoning efficiente

🎨 Multimodali (Testo + Immagini)

Qwen3-VL top

Alibaba — 2B / 4B / 8B / 32B + MoE

La famiglia di modelli visione open più forte del 2026 (Apache 2.0). OCR in 32 lingue, grounding, comprensione di video e screenshot, persino agent per GUI. Il 4B/8B gira su 8-16GB; il 32B su 24GB. Edizioni Instruct e Thinking.

vision2B → 32Bvideo + OCR

Gemma 3 27B consigliato

Google — 4B / 12B / 27B

Il multimodale locale più comodo da installare: analizza immagini, documenti, screenshot con ottima qualità. Il 27B richiede ~14-20GB VRAM a Q4, il 4B gira ovunque. Anche Llama 4 Scout è multimodale nativo, e Gemma 3n gestisce pure audio/video.

vision4B / 12B / 27B128K context
🕑 Il mondo dei modelli cambia ogni settimana. Quello che è scritto qui è valido a giugno 2026. La corsa non si ferma: sono attesi/usciti Qwen 3.5, Gemma 4, DeepSeek V4 e nuovi GLM mentre leggi. Per tenersi aggiornati: lmarena.ai (benchmark arena), huggingface.co (model card ufficiali e leaderboard), e il subreddit r/LocalLLaMA (la comunità più attiva). Diffida dei siti SEO che inventano specifiche: controlla sempre la model card ufficiale.
Capitolo 04

Ollama — Il Modo Svogliato per Cominciare

Un comando per installare, uno per scaricare un modello, uno per usarlo. Fine.

🎲 Analogia per Svogliati

Ollama è il Docker dei modelli AI. Come Docker astrae la complessità di far girare container, Ollama astrae la complessità di far girare modelli quantizzati. Gestisce il download, la quantizzazione, l'accelerazione GPU, il server HTTP, e l'interfaccia CLI. Tu scrivi ollama run qwen3 e lui fa tutto il resto. Dal 2025 ha anche un motore multimodale proprio (non solo llama.cpp) e su Apple Silicon un backend MLX per andare più veloce.

Novità 2025-2026: Ollama ha ora un'app desktop nativa (macOS e Windows, luglio 2025) con chat grafica, drag-and-drop di file/PDF e input immagini — non sei più obbligato al terminale. C'è anche Ollama Cloud (modelli grandi con suffisso :cloud, stessa API, zero retention) e una web search API per dare ai modelli accesso al web. Su Linux resta CLI-only.

⚙️ Installazione in 3 Comandi

installazione (macOS / Linux)
# macOS
brew install ollama
# oppure dal sito: curl -fsSL https://ollama.com/install.sh | sh

# Linux (una riga, fa tutto)
curl -fsSL https://ollama.com/install.sh | sh

# Windows: installer .exe da ollama.com

# Verifica che funzioni
ollama --version
ollama version is 0.x.x

# Ollama gira come servizio in background su :11434
ollama serve   # solo se non parte in automatico

📥 Scaricare e Usare un Modello

uso base di ollama
# Scarica e avvia in chat interattiva
ollama run qwen3                  # 8B tuttofare, ~5GB download
ollama run gpt-oss:20b           # reasoning, ~13GB (entra in 16GB VRAM)
ollama run gpt-oss:120b          # reasoning top, ~65GB (Mac 128GB / GPU 80GB)
ollama run qwen3-coder:30b       # coding agentico MoE
ollama run deepseek-r1:14b       # reasoning distillato locale
ollama run gemma3:27b            # Google Gemma 3, multimodale
ollama run qwen3-vl:8b           # visione (immagini, OCR, video)

# Una domanda singola senza chat interattiva
ollama run qwen3 "traduci in italiano: hello world"

# Lista modelli scaricati
ollama list

# Rimuovi un modello (libera spazio)
ollama rm mistral

# Vedi quanto VRAM/RAM sta usando
ollama ps

🌐 L'API HTTP — Integra con Qualsiasi Cosa

Ollama espone un'API REST compatibile (in gran parte) con OpenAI. Qualsiasi app che parla con OpenAI può puntare a Ollama cambiando solo l'URL.

api rest di ollama
# Chiamata base all'API (endpoint /api/generate)
curl http://localhost:11434/api/generate \
  -d '{"model":"qwen3","prompt":"spiega kubernetes in 2 righe","stream":false}'

# Endpoint compatibile OpenAI (per drop-in replacement)
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3",
    "messages": [{"role":"user","content":"ciao, come stai?"}]
  }'

# Python con libreria ollama
pip install ollama

# client.py
import ollama

response = ollama.chat(model='qwen3', messages=[
    {'role': 'user', 'content': 'Spiega Docker in 3 righe'}
])
print(response['message']['content'])

# Oppure con libreria openai, cambiando solo base_url
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
response = client.chat.completions.create(model="qwen3", ...)

📄 Modelfile — Personalizza il Tuo Modello

Come il Dockerfile per i container, il Modelfile ti permette di creare versioni personalizzate di un modello con system prompt fissi, parametri custom, template diversi.

Modelfile esempio
# Modelfile
FROM qwen3

# Temperatura: 0.0 = deterministico, 1.0 = creativo
PARAMETER temperature 0.2

# Context window
PARAMETER num_ctx 8192

# System prompt fisso
SYSTEM """
Sei un assistente tecnico per sistemisti. Rispondi sempre in italiano.
Sii conciso e diretto. Se non sai qualcosa, dillo chiaramente.
Quando mostri comandi, usa blocchi di codice.
"""

# Crea il modello custom
ollama create mio-assistente -f Modelfile
ollama run mio-assistente
💡 Trucco: Ollama supporta anche modelli da Hugging Face in formato GGUF direttamente: ollama run hf.co/bartowski/Llama-3.1-8B-Instruct-GGUF. Se un modello non è nel registry ufficiale di Ollama, cercalo su Hugging Face con il tag GGUF.
Capitolo 05

Altri Tool — L'Ecosistema

Ollama è il motore. Questi sono i sedili, il volante e il cruscotto.

👔 LM Studio GUI

L'interfaccia grafica per chi vuole tutto incluso senza terminale. Scarica modelli da Hugging Face con una ricerca, li gestisce, li gira con un click, e include una chat integrata + server API. Due backend: llama.cpp (GGUF, cross-platform) e MLX (Apple Silicon). Disponibile per Mac, Windows, Linux.

  • Ottimo per cominciare senza CLI
  • Server compatibile OpenAI + modalità headless + CLI lms
  • È un MCP Host: colleghi tool ai modelli locali
  • Gestione automatica della quantizzazione
💡 Novità (luglio 2025): LM Studio è gratis anche per uso commerciale/lavoro. Niente più licenza a pagamento per le aziende; restano piani Teams/Enterprise solo per SSO e controlli avanzati.

🌎 Open WebUI web

Un'interfaccia web tipo ChatGPT da girare localmente sopra Ollama (o qualsiasi backend compatibile). Docker compose e sei operativo in 2 minuti. Features: chat con più modelli, gestione conversazioni, RAG integrato, image generation, multi-user.

avvio con docker
docker run -d \
  -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  --name open-webui \
  ghcr.io/open-webui/open-webui:main

# Poi vai su http://localhost:3000
⚠️ Cambio di licenza (v0.6.6, apr 2025): non è più puro BSD-3. C'è una clausola che vieta di rimuovere il branding "Open WebUI" sopra i 50 utenti. Per homelab e piccole realtà nessun problema; se vuoi white-label su larga scala guarda LibreChat o AnythingLLM.

🧰 AnythingLLM MIT

La soluzione all-in-one per RAG locale. Carica PDF, Word, pagine web, codice — lui li indicizza e puoi farci domande. Supporta Ollama come backend, ha UI desktop e versione server, agenti con tool e supporto MCP. Licenza MIT (punto a favore rispetto a Open WebUI). Ideale per "parla con i tuoi documenti" senza mandare niente in cloud.

🔧 LocalAI / vLLM / SGLang

LocalAI: drop-in replacement dell'API OpenAI (chat, embeddings, immagini, TTS, STT), gira anche solo su CPU. Per la produzione ad alto throughput su GPU si usano invece vLLM (lo standard, multi-hardware incluso ROCm/TPU) o SGLang (top su RAG con prefix cache e MoE). Non sono tool da laptop: sono server.

💻 Agenti di Coding Locali IDE/CLI

Nel 2026 non è più solo autocomplete: gli agenti modificano interi repo. Tutti puntabili su Ollama/LM Studio per restare privati e gratis. Pairing consigliato: Qwen3-Coder o Devstral.

  • Cline — agente autonomo per VS Code (Plan/Act), Apache-2.0
  • Aider — pair-programming da terminale (occhio a num_ctx)
  • Goose (Block) — agente desktop+CLI con MCP, offline-capable
  • Zed — editor veloce con provider Ollama nativo
  • Qwen Code / opencode — agenti CLI
⚠️ Continue.dev è in dismissione (ultima release giu 2026, repo read-only) e Roo Code ha chiuso: meglio non partire da lì.

🔍 llm (Simon Willison)

Tool CLI di Simon Willison per interagire con qualsiasi LLM (locale e cloud) da terminale. Ottimo per scripting, pipe, automazioni. cat file.txt | llm "riassumi" è tutto quello che devi sapere per capire il potenziale.

llm cli
pip install llm llm-ollama
llm install llm-ollama

# Usa modello ollama
llm -m ollama/qwen3 "spiega il CAP theorem"

# Pipe dal terminale
git diff | llm -m ollama/qwen3 "scrivi un commit message"
cat error.log | llm "cosa significa questo errore?"

🔗 MCP — Dare gli Strumenti ai Modelli Locali standard 2026

Il Model Context Protocol (MCP) è lo standard aperto (nato in Anthropic, donato alla Linux Foundation a fine 2025) che fa parlare un LLM con tool e dati esterni: filesystem, database, shell, API interne, monitoraggio. È "l'USB-C dell'IA". La cosa interessante per il locale: un modello on-premise può usare gli stessi tool server degli assistenti cloud, completamente air-gapped — tramite LM Studio (MCP Host), il client MCP integrato in llama.cpp, AnythingLLM o Goose.

🚨 Attenzione alla sicurezza: MCP apre la porta a prompt injection e a tool che eseguono azioni reali. Non collegare server MCP non fidati, usa sandbox e conferme esplicite per le azioni distruttive. Un modello che può lanciare comandi sulla tua infrastruttura è potente e pericoloso.
Capitolo 06

Cosa Si Riesce a Fare

I task dove i modelli locali rendono bene. Aspettative realistiche incluse.

💻

Coding Assist

Autocomplete, spiegazione di codice, refactoring, docstring. Con un 8B decente: buono. Con 32B+: molto buono. Alternativa reale a Copilot per uso privato.

📋

RAG su Documenti

Fai domande su PDF, manuali, documentazione interna. Funziona bene se i documenti sono in italiano e le domande sono precise. Non è magia, è un motore di ricerca intelligente.

📝

Riassunti & Sintesi

Riassumere testi lunghi, estrarre punti chiave, trasformare bullet point in testo. Task semplice dove anche 7B funziona bene.

🌐

Traduzione

EN→IT e IT→EN funzionano bene anche sui modelli piccoli. Lingue meno comuni: risultati variabili. Non al livello di DeepL ma accettabile per uso interno.

📂

Classificazione Testi

Categorizzare ticket di supporto, email, feedback. Ottimo caso d'uso per automazione: nessun dato esce, costo zero, basta un 7B.

🔨

Generazione Template

Email, report, documentazione tecnica, YAML di configurazione. Dato un contesto chiaro, i modelli locali producono output utile anche in italiano.

🔌

Estrazione Dati

Da testo non strutturato a JSON. "Estrai nome, data e importo da questa fattura" funziona sorprendentemente bene anche su 7B con un buon prompt.

🤖

Chatbot Interno

FAQ aziendale, primo livello di supporto, assistente per documentazione interna. Combinato con RAG: soluzione utile e completamente privata.

⚙️

Automazione Script

Generare script bash/python per task ripetitivi, convertire comandi tra sistemi operativi, debug di regex. I coding model da 7B ci riescono spesso al primo colpo.

🏆 Il Test del Fuoco: Cosa Aspettarsi da un 8B

Un benchmark pratico e onesto di Qwen3 8B Q4 su hardware tipico (RTX 5060 Ti 16GB):

TaskQualitàNote
Spiegare codice esistentebuonaMolto utile, raramente sbaglia il senso
Scrivere funzione semplicebuonaPython/JS funzionano bene, assembly no
Scrivere funzione complessavariabileSpesso funziona, a volte inventa API che non esistono
Debug di erroribuonaOttimo se gli dai l'errore completo + contesto
Riassumere documentibuonaAffidabile, un po' meccanico
Ragionamento matematicomediocreAritmetica ok, algebra/calcolo: ci sbaglia spesso
Ragionamento complesso multi-stepmiglioratoUsa gpt-oss o un modello Thinking; molto meglio di un anno fa
Rispondere in italiano correttoaccettabileSi difende, qualche errore di concordanza
Generare codice sicurovariabileSempre revisionare manualmente
Capitolo 07

Cosa NON Si Riesce a Fare

Le aspettative irrealistiche che uccidono i progetti locali.

🚨 Il gap qualitativo è reale. Un modello 8B locale non è "quasi uguale a GPT-5". Su compiti semplici ci si avvicina. Su compiti complessi il divario è enorme. Il divario si è ristretto molto nel 2025-2026 (gpt-oss, Qwen3, DeepSeek), ma non è sparito. Non è una scusa per non usare i modelli locali — è informazione per usarli dove hanno senso.

✅ Il Locale Lo Fa Bene

  • Task ripetitivi e ben definiti
  • Domande con risposta in documenti forniti (RAG)
  • Generazione di testi con template chiari
  • Coding di routine su linguaggi comuni
  • Classificazione e estrazione dati strutturati
  • Traduzione di testi tecnici
  • Riassunti di documenti lunghi

❌ Il Locale Fatica

  • Ragionamento ai massimi livelli (usa gpt-oss-120b o un Thinking, ma il top resta cloud)
  • Matematica avanzata e dimostrazioni formali
  • Conoscenza aggiornata (training cutoff fisso, salvo web search)
  • Creatività sofisticata e scrittura di qualità letteraria
  • Compiti che richiedono buon senso su situazioni nuove
  • Comprensione di contesti impliciti culturali italiani
  • Long context su documenti enormi (>32K token sui piccoli)

😰 Le 4 Illusioni più Comuni

1

"Giro gpt-oss-120b e ho GPT-5 gratis"

gpt-oss-120b e i grandi MoE open sono eccellenti, ma non sono GPT-5.5, e tantomeno Claude Opus 4.8. Su benchmark standard c'è un gap misurabile. Per molti task quotidiani non importa. Per task complessi, importa eccome.

2

"La mia GPU da gaming basta per tutto"

Una GPU da 12-16GB è ottima per modelli fino a ~14B (e gpt-oss-20b). Per i grandi MoE o il 70B serve memoria unificata (Mac/DGX Spark/Strix Halo) o multi-GPU. Girare un modello con overflow in RAM non è un'esperienza piacevole.

3

"Sostituisco completamente i modelli cloud"

Probabilmente no, a meno che i tuoi task siano molto specifici e ben definiti. L'approccio più efficace è ibrido: locale per il 70-80% del lavoro di routine, cloud per il 20% che richiede qualità superiore.

4

"Il modello risponde sempre in italiano corretto"

I modelli open-weight sono addestrati prevalentemente in inglese. Rispondono in italiano ma commettono più errori, usano costruzioni anglicizzate, e a volte switching di lingua. Migliora con Qwen (ha più dati multilingua) ma non sparisce.

Capitolo 08

L'Approccio Ibrido — Il Meglio dei Due Mondi

Non è locale vs cloud. È locale + cloud al posto giusto.

🎲 Analogia per Svogliati

Immagina di avere un assistente locale sempre disponibile per le banalità quotidiane (rispondi a email semplici, trova info nel manuale, formatta questo CSV) e un consulente esterno che chiami quando hai bisogno di qualcosa di vero (strategia complessa, problema non banale, documento critico). Non mandi tutto al consulente perché costa. Non affidi tutto all'assistente perché sbaglia sui task difficili. Usi entrambi in modo intelligente.

⚖ Architettura Ibrida — Come Decidere
TASK / RICHIESTA Il tuo prompt Dati sensibili? Task complesso? Sì / semplice OLLAMA Locale, privato gratuito Risposta locale Privacy garantita No / complesso API CLOUD GPT / Claude Gemini... Risposta cloud Qualità superiore

🎯 Criteri di Routing — Quando Usare Cosa

CriterioUsa LocaleUsa Cloud
DatiDati sensibili, confidenziali, PIIDati pubblici o non critici
ComplessitàTask semplici e ripetitiviRagionamento complesso, multistep
VolumeTante richieste, costo sarebbe altoPoche richieste critiche
LatenzaQuando il delay è accettabileQuando serve risposta rapida
ConnettivitàOffline, VPN aziendale rigidaCon internet disponibile
LinguaInglese o lingue con molti datiItaliano di qualità, dialetti

📈 LiteLLM — Il Proxy Universale

Uno strumento che espone un'unica API OpenAI-compatibile e smista le chiamate verso qualsiasi backend: Ollama locale, OpenAI, Anthropic, Gemini. Cambi il backend nel config, non nel codice.

config.yaml di LiteLLM
model_list:
  - model_name: fast-local
    litellm_params:
      model: ollama/qwen3
      api_base: http://localhost:11434

  - model_name: smart-cloud
    litellm_params:
      model: claude-opus-4-8
      api_key: sk-ant-...

  - model_name: coding
    litellm_params:
      model: ollama/qwen3-coder:30b
      api_base: http://localhost:11434

# La tua app chiama sempre localhost:4000
# LiteLLM smista in base al model scelto

💪 Ollama come Fallback

Un pattern utile: prova prima il cloud (risultato migliore), in caso di errore/rate limit/offline usa il locale come fallback. Implementabile con qualsiasi SDK OpenAI-compatibile.

fallback pattern (python)
def ask(prompt, prefer_cloud=True):
    if prefer_cloud:
        try:
            return openai_client.chat(prompt)
        except (RateLimitError, APIError):
            pass  # fallback al locale

    return ollama_client.chat(prompt)

# Oppure con LiteLLM fallback nativo:
completion(
    model="claude-opus-4-8",
    fallbacks=["ollama/qwen3"],
    messages=[...]
)
Capitolo 09

Casi d'Uso Pratici

Esempi concreti da implementare oggi, non ipotesi astratte.

💻 Copilot/Agente Privato con Ollama

Il caso d'uso più immediato: sostituire GitHub Copilot con un modello locale per il 90% del lavoro quotidiano. Zero dati che escono, zero abbonamento.

1

Installa Ollama e scarica il modello di coding

ollama pull qwen3-coder:30b (24GB+) per coding agentico, oppure ollama pull qwen2.5-coder:7b per il solo autocomplete su hardware modesto.

2

Scegli l'agente nel tuo IDE/terminale

Cline o Zed per lavorare in editor, Aider o Goose da terminale. Tutti gratuiti, open source: imposti il provider su "Ollama" e via.

3

Aggiungi un modello cloud per le chat difficili

Configura anche Claude o GPT-5 per quando serve ragionamento complesso. Routine = locale, task difficili = cloud, decidi tu.

4

Dai contesto e tool all'agente

Gli agenti indicizzano il repo e, via MCP, possono leggere/scrivere file, lanciare test, interrogare un DB. "Come funziona l'autenticazione in questo progetto?" diventa una domanda utile e azionabile.

📋 RAG su Documentazione Interna

Il caso d'uso killer per le aziende: "parla con i nostri manuali/procedure/contratti" senza mandare niente a OpenAI.

stack RAG locale minimale (python)
pip install langchain-community langchain-ollama chromadb pymupdf

# rag_locale.py
from langchain_community.document_loaders import PyMuPDFLoader
from langchain_ollama import OllamaEmbeddings, OllamaLLM
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA

# 1. Carica i tuoi documenti
loader = PyMuPDFLoader("manuale_aziendale.pdf")
docs = loader.load()

# 2. Spezzali in chunk
splitter = RecursiveCharacterTextSplitter(chunk_size=500)
chunks = splitter.split_documents(docs)

# 3. Crea embeddings locali (multilingua → meglio per l'italiano)
embeddings = OllamaEmbeddings(model="bge-m3")
db = Chroma.from_documents(chunks, embeddings, persist_directory="./db")

# 4. Fai domande
llm = OllamaLLM(model="qwen3")
qa = RetrievalQA.from_chain_type(llm=llm, retriever=db.as_retriever())

risposta = qa.invoke("Qual è la procedura per le ferie?")
print(risposta["result"])

# Scarica anche il modello di embedding (alt: qwen3-embedding, embeddinggemma)
ollama pull bge-m3

📋 Pipeline di Elaborazione Testi

Classificare ticket di supporto, estrarre entità da email, taggare documenti. Con un 7B e lo stesso loop:

classificazione ticket
import ollama, json

def classifica(testo):
    resp = ollama.chat(
        model="qwen3",
        messages=[{
            "role": "user",
            "content": f"""Classifica questo ticket.
Rispondi SOLO con JSON valido.
Categorie: bug, feature, billing, other
Priorità: low, medium, high

Ticket: {testo}

Risposta JSON:"""
        }],
        format="json"
    )
    return json.loads(resp["message"]["content"])

print(classifica("Il login non funziona da stamattina"))
# → {"categoria": "bug", "priorità": "high"}

📸 Analisi di Immagini Locale

Con modelli multimodali (Qwen3-VL, Gemma 3) puoi analizzare screenshot, diagrammi, foto di errori — localmente.

analisi immagine con ollama
# Scarica un modello con visione
ollama pull qwen3-vl:8b
# oppure: ollama pull gemma3:27b

import ollama, base64

with open("screenshot_errore.png", "rb") as f:
    img = base64.b64encode(f.read()).decode()

resp = ollama.chat(
    model="qwen3-vl:8b",
    messages=[{
        "role": "user",
        "content": "Cosa mostra questo screenshot? C'è qualche errore?",
        "images": [img]
    }]
)
print(resp["message"]["content"])
Capitolo 10

Privacy & Compliance — Il Vero Vantaggio

Il motivo per cui molte aziende stanno guardando a questo con interesse.

🔐 Cosa Succede ai Tuoi Prompt in Cloud

Mandare prompt a un'API cloud significa (a seconda del fornitore e dei termini):

🔒 IA Locale

  • I dati non escono dalla tua macchina/rete
  • Nessun termine di servizio che impatta i tuoi dati
  • GDPR: non c'è trasferimento a terzi da gestire
  • Puoi processare dati sensibili: PII, contratti, codice proprietario
  • Nessun rischio di data breach lato fornitore
  • Funziona in ambienti air-gapped

☁️ IA Cloud (da leggere bene)

  • I prompt viaggiano su server di terze parti (US o EU)
  • Alcuni piani usano i prompt per il training (verifica i TOS)
  • GDPR richiede DPA (Data Processing Agreement) con il fornitore
  • Dati sensibili in chat = possibile violazione normativa interna
  • In caso di breach del fornitore, i tuoi dati potrebbero essere esposti
⚠️ OpenAI, Anthropic, Google hanno tutti policy che, per i piani gratuiti e molti piani a pagamento, includono l'uso delle conversazioni per il miglioramento dei modelli. Il piano API con data retention disabilitata è diverso dalla chat gratuita. Leggi i TOS del piano che usi, non quello generico.
🏢

Dati Aziendali

Codice proprietario, contratti, comunicazioni interne. L'IA locale è l'unica opzione sensata senza un accordo enterprise con il fornitore cloud.

🤶

Dati Sanitari

HIPAA (USA), GDPR (EU): processare dati sanitari richiede accordi specifici. Locale elimina il problema alla radice.

📄

Dati Legali

Contratti, atti, comunicazioni avvocato-cliente. Molti ordini professionali vietano o limitano il cloud per questi dati.

Capitolo 11

SOS — Problemi Comuni

I problemi che incontrerai quasi certamente. Con le soluzioni.

📵 Ollama risponde lentissimo (2-5 token/secondo)

Causa probabile: il modello non sta in VRAM e sta girando su RAM di sistema (o disco).

Verifica: esegui ollama ps mentre il modello gira. Controlla la colonna "SIZE" e se dice "100% GPU" o meno.

Soluzioni:

1. Usa un modello più piccolo o più quantizzato: ollama pull qwen3:8b-instruct-q4_K_M invece della versione Q8.

2. Su Linux/Windows con GPU NVIDIA: verifica che CUDA sia installato correttamente e che Ollama usi la GPU (nvidia-smi durante una generazione deve mostrare utilizzo GPU).

3. Chiudi altre applicazioni che usano VRAM (giochi, altre istanze di modelli).

4. Su macOS con Apple Silicon: Ollama usa automaticamente la memoria unificata, dovrebbe andare bene nativamente.

📷 La GPU non viene usata (rimane tutto su CPU)

Su NVIDIA: verifica che CUDA Toolkit sia installato. nvidia-smi deve funzionare. Se Ollama non trova CUDA, usa la CPU come fallback silenzioso.

nvidia-smi
ollama run qwen3 "ciao"
# In un altro terminale durante la generazione:
watch -n 0.5 nvidia-smi # deve mostrare utilizzo GPU

Su AMD: serve ROCm, molto più maturo nel 2026 (ROCm 7.2 ha installer unificato Windows+Linux e supporto RDNA 4 e Strix Halo). Ollama e llama.cpp girano bene; su Strix Halo può servire tuning manuale di GTT/VRAM per esporre tutta la memoria.

Su Intel Arc: supporto via SYCL/oneAPI e Vulkan, migliorato ma ancora dietro a NVIDIA/AMD.

😵 Il modello risponde solo in inglese

I modelli tendono a rispondere nella lingua in cui sono stati addestrati prevalentemente (inglese). Per forzare l'italiano:

Soluzione 1 - System prompt: crea un Modelfile con SYSTEM "Rispondi sempre e solo in italiano. Non usare mai l'inglese."

Soluzione 2 - Nel prompt: inizia il prompt con "Rispondimi in italiano:" o terminalo con "(rispondi in italiano)".

Soluzione 3 - Cambia modello: Qwen3 e Gemma 3 hanno dati di training multilingua più bilanciati e si comportano meglio in italiano rispetto a Llama.

Realtà: su modelli piccoli (4-8B) il comportamento in italiano è meno affidabile. Con modelli da 14B+ migliora significativamente.

💀 Il modello "allucia" e inventa informazioni

Le allucinazioni sono più frequenti sui modelli locali rispetto ai top cloud. Non spariscono mai completamente, ma si riducono con queste pratiche:

1. Fornisci il contesto: "Basandoti SOLO sul seguente testo, rispondi a..." riduce l'invenzione di informazioni.

2. Chiedi incertezza: aggiungi al system prompt "Se non sei sicuro, di' esplicitamente 'Non lo so' invece di inventare".

3. Abbassa la temperatura: PARAMETER temperature 0.1 nel Modelfile rende le risposte più conservative e meno creative (anche meno allucinate).

4. Usa RAG per i fatti: se hai bisogno di informazioni precise da documenti, usa RAG invece di affidarti alla memoria del modello.

5. Accetta il limite: per task che richiedono fatti precisi (leggi, dati storici, documentazione tecnica), usa il cloud o il RAG. Non fidarti della memoria del modello locale.

💸 Open WebUI non si connette a Ollama

Il problema classico Docker: il container non riesce a raggiungere Ollama che gira sull'host.

# Su Linux: usa --add-host
docker run -d --add-host=host.docker.internal:host-gateway ...

# Su macOS/Windows: host.docker.internal funziona già

# Imposta OLLAMA_BASE_URL nelle variabili del container
-e OLLAMA_BASE_URL=http://host.docker.internal:11434

Se Ollama gira in un container separato nello stesso docker network, usa il nome del container come host invece di localhost.

📷 "Error: model requires more system memory"

Il modello richiede più memoria di quella disponibile (RAM + VRAM combinata).

Soluzioni:

1. Scarica una versione più quantizzata: invece di :latest usa :8b-instruct-q4_0 (la versione più leggera).

2. Prova un modello più piccolo: da 7B a 3B, da 13B a 7B.

3. Su macOS: chiudi le app che usano molta memoria (browser con molte tab, Xcode, ecc.).

4. Aumenta la swap/page file (aiuta ma rallenta molto).

5. Verifica la stima VRAM con la formula: parametri × quantizzazione + ~15-20% overhead.

6. Considera un modello MoE (es. gpt-oss-20b, Qwen3-30B-A3B): grande in qualità ma con pochi parametri attivi, quindi più leggero e veloce.

Capitolo 12

Cheat Sheet

Tutto quello che devi ricordare in una pagina. Stampala, appendila.

📥 Comandi Ollama Essenziali
ollama run <model>Avvia chat interattiva
ollama pull <model>Scarica un modello
ollama listLista modelli scaricati
ollama psModelli in esecuzione + VRAM usata
ollama rm <model>Rimuovi un modello
ollama show <model>Info dettagliate su un modello
ollama create -f <file>Crea modello da Modelfile
ollama cp <src> <dst>Copia un modello
ollama serveAvvia server manualmente (:11434)
🤖 Modelli Consigliati per Scenario
Uso generale (8-12GB)qwen3:8b / gemma3:12b
Uso generale (16GB)gpt-oss:20b
Uso generale (24GB)qwen3:32b
Coding agenticoqwen3-coder:30b / devstral
Coding autocompleteqwen2.5-coder:7b
Hardware minimo (<8GB)qwen3:4b / gemma3:4b
Multimodale (immagini)qwen3-vl:8b / gemma3:27b
Ragionamentogpt-oss:20b / qwen3:32b-thinking
Embedding per RAGbge-m3 / qwen3-embedding
Mac/GPU 80GB+ (top)gpt-oss:120b / glm-4.5-air
📊 Stima VRAM Rapida
Formula Q4Params(B) × 0.5 + ~20%
Formula Q8Params(B) × 1 + ~20%
MoE (es. 30B-A3B)VRAM = totali, velocità = attivi
3B Q4~3.5 GB VRAM
7B Q4~5.5 GB VRAM
8B Q4~6 GB VRAM
13B Q4~8.5 GB VRAM
14B Q4~9 GB VRAM
32B Q4~18 GB VRAM
70B Q4~37 GB VRAM
🍽 Modelfile Parametri Utili
temperature 0.0Deterministico, sempre uguale
temperature 0.7Default bilanciato
temperature 1.2Creativo, meno prevedibile
num_ctx 4096Finestra di contesto (default)
num_ctx 32768Context lungo (+ VRAM)
num_predict 512Max token in output
top_p 0.9Nucleus sampling
repeat_penalty 1.1Penalizza ripetizioni
🏠 Stack Locale Completo
RuntimeOllama
GUI desktopLM Studio
Web UIOpen WebUI (Docker)
Agente codingCline / Aider / Goose / Zed
RAGAnythingLLM / LangChain
Tool per i modelliMCP (server + host)
Proxy unificatoLiteLLM
Serving produzionevLLM / SGLang
CLI universalellm (Simon Willison)
Aggiornamenti modellir/LocalLLaMA, lmarena.ai, HF
📷 Variabili d'Ambiente Ollama
OLLAMA_HOST0.0.0.0:11434 (accetta connessioni esterne)
OLLAMA_MODELSPath cartella modelli custom
OLLAMA_NUM_PARALLELRichieste parallele (default 1)
OLLAMA_MAX_LOADED_MODELSModelli in memoria contemporanei
OLLAMA_KEEP_ALIVETempo keep alive modello (es. 30m)
CUDA_VISIBLE_DEVICESQuale GPU usare (multi-GPU)
OLLAMA_DEBUG1 per log dettagliati