Adattare il CV con un'IA privata: in locale con Ollama
Adattare il CV con un'IA privata e un modello locale: cosa ricevono i fornitori cloud, come scegliere un modello Ollama e i compromessi tra velocità, qualità e timeout.
Ogni volta che chiedi a un modello di IA di adattare il tuo CV, legge l’intero documento: nome, numero di telefono, e-mail, ogni datore di lavoro e ogni data, e qualsiasi altra cosa tu tenga nel file. Con un fornitore cloud, quel testo lascia il tuo computer. Adattare il CV con un’IA privata significa invece far girare il modello sul tuo hardware, così il CV e l’annuncio di lavoro non lo lasciano mai. Questo articolo spiega perché potresti volerlo, cosa riceve un fornitore cloud quando non lo fai, come scegliere un modello locale con Ollama e i compromessi in termini di velocità, qualità e timeout.
I passaggi di installazione sono nella documentazione. Vedi la configurazione di Ollama (in inglese) per la procedura con Docker e Usa la tua chiave IA per la pagina Settings (impostazioni) e le variabili d’ambiente. Questo articolo tratta il perché e il cosa.
Perché tenere il CV in locale
Un CV è uno dei documenti più personali che possiedi. Contiene il tuo nome completo, un numero di telefono, un’e-mail, la tua città e un resoconto datato di dove hai lavorato. Se tieni un CV principale, può contenere anche cose che non metteresti mai in una versione adattata: appunti sul perché hai lasciato un lavoro, la cifra di uno stipendio offerto, il nome di un responsabile. Incollalo in una finestra di chat e l’hai mandato a un’azienda di cui forse non hai letto le condizioni sul trattamento dei dati.
Tre gruppi di persone hanno un motivo concreto per preoccuparsene.
Chi ha un obbligo di riservatezza. Se nei tuoi punti elenco compaiono il nome del datore di lavoro attuale, nomi in codice di progetti o l’elenco dei clienti, il tuo CV contiene informazioni che un contratto può obbligarti a proteggere.
Chi cerca lavoro con discrezione. Non vuoi che una traccia di «sto adattando il CV per un ruolo presso un concorrente» esista da qualche parte che non sia il tuo disco.
Chi legge le policy dei fornitori. Le condizioni cambiano da fornitore a fornitore e da piano a piano. La pagina di Anthropic sui prodotti commerciali, per esempio, afferma che input e output della sua API e dei suoi prodotti business non vengono usati per l’addestramento per impostazione predefinita, con eccezioni per il feedback che invii (privacy center di Anthropic, aggiornato ad agosto 2026; i piani consumer sono trattati in una pagina separata). Gli altri fornitori pubblicano le proprie condizioni. Se preferisci non dipendere dall’averle lette bene, un modello locale elimina la questione.
Cosa riceve un fornitore cloud
Resume Matcher è un’impalcatura (harness): invia i prompt al modello che colleghi e applica controlli nel codice al risultato. Non oscura nulla prima dell’invio. La tabella qui sotto, ricavata dal codice del progetto, elenca cosa invia ogni funzione al fornitore che hai scelto.
| Funzione | Inviato al fornitore |
|---|---|
| Caricamento del CV (analisi) | Tutto il testo estratto dal CV, compresi nome, e-mail, telefono e link |
| Analisi dell’annuncio, titolo del CV | L’annuncio di lavoro |
| Adattamento (piano delle competenze, modifiche puntuali) | Annuncio più l’intero CV come JSON strutturato, dati personali compresi |
| Passaggio sulle parole chiave dopo l’adattamento | JSON del CV adattato e del CV principale più i primi 2.000 caratteri dell’annuncio |
| Valutazione dei punti elenco | Testo dei punti elenco, annuncio e parole chiave estratte |
| Lettera di presentazione, messaggio di contatto | Intero JSON del CV più l’annuncio |
| Preparazione al colloquio | JSON del CV (fino a 30.000 caratteri) più l’annuncio (fino a 12.000) |
| Arricchimento, rigenerazione, Resume Wizard | Il CV o una singola voce, più le tue risposte e istruzioni |
| Test Connection | La parola «Hi» |
Nulla va agli autori di Resume Matcher; l’app non contiene codice di analisi statistica. Le tue chiavi API per altri fornitori, il database, la bacheca delle candidature, le impostazioni e i PDF generati restano sul disco. L’unica altra richiesta in uscita è quella della libreria di IA (LiteLLM), che all’avvio scarica un listino prezzi pubblico dei modelli; non contiene nessun tuo dato e, se sei offline, ripiega su una copia inclusa.
Incollare a mano in ChatGPT o Claude invia le stesse cose, con meno struttura. Qualsiasi flusso di lavoro in cui un modello cloud legge il tuo CV manda il tuo CV a quel cloud.
Com’è adattare il CV con un’IA privata
Collega la stessa impalcatura a un modello che gira sul tuo computer e ogni riga di quella tabella resta in locale. Il modello legge il CV, propone le modifiche e il codice le controlla, e nessuna richiesta di rete porta il testo da nessuna parte.
In Resume Matcher questo significa uno di due fornitori in Settings:
- Ollama, uno strumento gratuito che scarica modelli aperti e li serve su
http://localhost:11434. - Qualsiasi server compatibile con OpenAI: llama.cpp, vLLM, LM Studio o qualunque altro che parli l’API Chat Completions di OpenAI.
Quattro dettagli precisano la parola «privato».
L’installazione richiede internet, l’uso no. Scarichi una volta sola l’app, le sue dipendenze, il browser che usa per esportare i PDF e i pesi del modello. Da lì in poi il ciclo di adattamento funziona offline. Il download del listino di LiteLLM all’avvio ripiega su una copia inclusa quando sei offline.
I tuoi dati stanno in una cartella. CV, annunci, versioni adattate e bacheca delle candidature vivono in un file SQLite nella cartella dati dell’app, oppure in un volume Docker. Le impostazioni stanno in un piccolo file di configurazione accanto. Le chiavi API, se ne hai salvate, sono cifrate con un file di chiave che solo il tuo account utente può leggere. Il contenuto del CV invece è salvato come dato semplice in quel file SQLite, quindi la cartella è privata quanto il disco su cui si trova; un portatile con la cifratura completa del disco la copre.
Nessuna analisi statistica nell’app. Il codice non contiene SDK di tracciamento. L’immagine Docker disattiva anche la telemetria del framework Next.js; se avvii il frontend dal codice sorgente con npm run dev, gestire quell’impostazione del framework spetta a te.
Un server locale non riceve mai la tua chiave cloud. Se tieni nell’ambiente la chiave di un fornitore a pagamento e passi a Ollama, il backend non la passa al server locale, quindi cambiare fornitore non può farla trapelare.
Scegliere un modello locale
Ollama è la strada più semplice. Scarica i modelli per nome e li serve su una porta locale. La pagina Settings di Resume Matcher suggerisce gemma3:4b come modello Ollama predefinito, e la guida di installazione del progetto indica llama3.2 e mistral come altre opzioni. Nel campo del modello puoi scrivere qualsiasi modello servito da Ollama.
Parti dal modello predefinito. gemma3:4b è il punto di partenza suggerito dal progetto, e un download di 3,4 GB a ottobre 2026, secondo la pagina del modello su Ollama. È un modello piccolo, quindi leggi il paragrafo sulle modifiche strutturate qui sotto per sapere cosa aspettarti.
Passa a uno più grande se il tuo hardware lo permette. La stessa pagina indica gemma3:12b a 8,2 GB e gemma3:27b a 17 GB. Sono dimensioni di download: la memoria che un modello richiede durante l’esecuzione è un altro numero, che dipende dalla quantizzazione e dalla lunghezza del contesto. La documentazione di Resume Matcher non indica un requisito di RAM, e non ne inventerò uno. Le FAQ di Ollama spiegano come controllare se un modello è stato caricato sulla GPU, nella memoria di sistema o in parte su entrambe, ed è il modo più rapido per capire se una certa dimensione entra nel tuo computer.
Aspettati che i modelli piccoli facciano fatica con le modifiche strutturate. È il problema noto. Resume Matcher non chiede al modello un CV completamente nuovo. Gli chiede un elenco di modifiche mirate in un formato rigido, ognuna con la citazione del testo originale, così il codice può verificarla prima di applicarla. Le note di progetto registrano che i modelli più piccoli fanno fatica con questo formato: restituiscono output malformato, citano testo che non corrisponde o saltano la struttura. Il codice riprova un numero limitato di volte; se i tentativi falliscono ricevi un errore, e puoi rigenerare o passare a un modello più grande. Un modello debole ti costa tempo, e le protezioni valgono con qualsiasi modello: nomi, datori di lavoro, ruoli, date e titoli di studio bloccati, e numeri nuovi annullati.
Due cose che l’impalcatura fa per aiutare i modelli locali:
- La modalità JSON è sempre attiva per Ollama, con un ripiego basato solo sul prompt se il server la rifiuta, così il modello viene spinto verso una struttura valida.
- Le tracce di ragionamento vengono rimosse. Alcuni modelli di ragionamento emettono un blocco
<think>prima della risposta. Il codice toglie quei blocchi prima dell’analisi, così un modello che «pensa» non rompe il formato delle modifiche.
Se con il modello predefinito ottieni anteprime malformate sul tuo CV, prova un modello di taglia media prima di dare la colpa al prompt.
I compromessi: velocità, qualità, timeout
Velocità. Un modello cloud risponde a una richiesta di adattamento in pochi secondi. Un modello locale sulla CPU di un portatile può metterci minuti per lo stesso prompt, e la pipeline di adattamento fa diverse chiamate al modello per ogni esecuzione: estrazione delle parole chiave dall’annuncio, valutazione della pertinenza dei punti elenco, piano delle competenze, elenco delle modifiche e un passaggio finale sulle parole chiave. Ogni chiamata aspetta la precedente. Un modello cinque volte più lento per chiamata rende l’intera esecuzione cinque volte più lenta.
Qualità. I modelli più grandi riformulano con più scioltezza, restano più vicini al vocabolario dell’annuncio e producono meno modifiche rotte. Quelli più piccoli producono una formulazione più rigida e più modifiche respinte. Grazie ai controlli nel codice, il livello minimo è lo stesso per entrambi: un modello piccolo non può inventare una metrica o cambiare le tue date più di quanto possa farlo uno grande, perché quelle modifiche vengono bloccate prima di arrivare a te. È il livello massimo che cambia.
Timeout. Ogni richiesta di IA in Resume Matcher gira con un’unica scadenza, REQUEST_TIMEOUT_SECONDS, che vale 240 secondi per impostazione predefinita e accetta valori da 30 a 1.800. Quella scadenza copre l’intera esecuzione dell’adattamento, tutte le sue chiamate al modello comprese. I fornitori locali hanno un fattore di timeout raddoppiato, ma un modello grande su hardware modesto può comunque superarlo. Se vedi dei timeout, alza REQUEST_TIMEOUT_SECONDS nell’ambiente del backend e, in modo corrispondente, NEXT_PUBLIC_REQUEST_TIMEOUT_MS nell’ambiente del frontend; la pagina Usa la tua chiave IA le elenca entrambe.
Costo. Zero per richiesta con un modello locale, contro un addebito per chiamata da un fornitore cloud. In una ricerca di lavoro con quaranta candidature, ognuna con CV adattato, lettera di presentazione e preparazione al colloquio, la differenza per alcuni è una somma vera e per altri sono spiccioli. L’argomento della privacy regge comunque da solo.
Come si incastra il tutto
Un paragrafo per orientarsi; i comandi sono nella documentazione.
Ollama gira sul tuo computer e ascolta sulla porta 11434. Resume Matcher gira accanto, dal codice sorgente o in Docker, e serve l’app sulla porta 3000. In Settings scegli Ollama come fornitore, scrivi il nome del modello che hai scaricato e fai clic su Test Connection, che invia la parola «Hi» e indica se il modello ha risposto. Da Docker, l’app raggiunge Ollama tramite http://host.docker.internal:11434 invece di localhost, perché il container ha il suo spazio dei nomi di rete. Da lì in poi ogni funzione dell’app (adattamento, lettere di presentazione, preparazione al colloquio, arricchimento) usa il modello locale, e il browser stampa i tuoi PDF sullo stesso computer.
La pagina sulla configurazione di Ollama (in inglese) contiene la guida per Docker, e Usa la tua chiave IA tratta impostazioni, variabili d’ambiente e risoluzione dei problemi sia per l’avvio dal codice sorgente sia per Docker.
Quando un modello cloud è la scelta migliore
Il locale è un compromesso, e per alcuni vince il cloud. Se il tuo portatile è leggero, il modello che puoi far girare è piccolo, e i modelli piccoli producono più spesso modifiche respinte che utili. Se ti candidi questa settimana e ogni esecuzione dura quattro minuti, la velocità conta più del percorso dei dati. Se il tuo CV non contiene nulla che ti darebbe fastidio far leggere a un fornitore, e hai letto le sue condizioni, per te l’argomento della privacy è teorico.
Funziona anche una via di mezzo. Usa il modello locale per la maggior parte degli adattamenti e cambia fornitore in Settings per l’unica candidatura in cui vuoi la prosa migliore. L’app salva una chiave per fornitore, quindi cambiare è una scelta da un menu a tendina. Il codice delle protezioni resta lo stesso: qualunque modello colleghi, nome, datori di lavoro, ruoli, date e titoli di studio restano bloccati, e ogni numero inventato dal modello viene annullato prima che tu lo veda.
Resume Matcher è gratuito, open source con licenza Apache 2.0, e usato da oltre 200.000 persone in cerca di lavoro. Non include alcun modello e non ha un sito ospitato, che è esattamente il punto di questo articolo: il modello è tuo, e anche i dati.
Se ti è stato utile
Se far girare il modello sul tuo computer è la versione che stavi cercando, una stella a Resume Matcher su GitHub aiuta altre persone in cerca di lavoro a trovarlo. Puoi seguirmi, Saurabh Rai, su GitHub, X e LinkedIn.
[Questo articolo è stato scritto, tradotto e impaginato con l'aiuto dell'IA. Le informazioni sul prodotto sono state verificate sul codice sorgente di Resume Matcher, e le fonti esterne sono linkate dove vengono usate.]
Ti è stato utile? Metti una stella a Resume Matcher su GitHub e segui il progetto