Resoconto automatico della riunione: Whisper + LLM 100 % locale
Un resoconto di riunione generato dall'IA si basa su due componenti: trascrivere l'audio, poi riassumere il testo. Il problema è che la maggior parte degli strumenti SaaS invia la registrazione completa della tua riunione — nomi, cifre, strategia — a server di terzi. Questa guida realizza la stessa pipeline interamente in locale: Whisper per la trascrizione, un LLM Ollama per estrarre decisioni e azioni, senza che nulla lasci il tuo computer.
#Perché l'elaborazione in locale è necessaria per le riunioni sensibili
Una riunione non è un file innocuo. In un'ora di registrazione si trovano nomi di clienti, importi, decisioni sulle risorse umane, indirizzi di sviluppo del prodotto non annunciati, a volte dati personali ai sensi del GDPR. Affidare questo audio a un servizio cloud di redazione automatica dei resoconti significa accettare che tutto questo contenuto venga trasferito, elaborato e potenzialmente conservato da un soggetto terzo.
- Confidenzialità reale
- L'audio e la trascrizione restano sul tuo computer. Nessun dato aziendale passa attraverso un server esterno che potrebbe registrarlo o usarlo per l'addestramento.
- Conformità al RGPD semplificata
- Nessun trasferimento a un responsabile del trattamento, spesso situato fuori dall'UE. La sezione «trasferimento dei dati personali» della tua analisi d'impatto viene eliminata alla fonte.
- Nessun costo ricorrente
- Nessun abbonamento per utente né fatturazione per minuto trascritto. Una volta installata la macchina, puoi elaborare tutte le riunioni che vuoi.
- Funziona offline
- Uno spostamento, una sede senza connessione affidabile, una riunione in una sala isolata: l'elaborazione rimane disponibile senza Internet.
#Il principio della pipeline in due fasi
Il tuo ChatGPT privato e gratuito sulla tua macchina in 1 ora — LM Studio, Ollama, Open WebUI, i tuoi documenti, senza cloud.
- Spazio online a vita
- PDF + file
- Aggiornamenti a vita
Un resoconto di riunione generato dall'IA si articola sempre in due fasi distinte, che non vanno confuse. La prima trasforma l'audio in testo: è il compito di Whisper, il modello di riconoscimento vocale di OpenAI, di cui diverse implementazioni open source funzionano perfettamente in locale. La seconda trasforma questo testo grezzo in un documento strutturato: è il compito di un LLM locale reso disponibile tramite Ollama.
- Trascrizione (Whisper)
- Input: un file audio o video. Output: il testo integrale della riunione, eventualmente con indicazioni temporali. È un'elaborazione computazionalmente pesante, ma meccanica.
- Sintesi (LLM Ollama)
- Input: la trascrizione. Output: un resoconto — sintesi, decisioni prese, azioni da intraprendere con il rispettivo responsabile. È qui che il prompt fa tutta la differenza.
Separare le due fasi ha un vantaggio pratico: puoi ripetere la sintesi tutte le volte che vuoi, con prompt diversi, senza rifare la trascrizione, che è la parte più lenta.
#Prerequisiti
- Ollama installato
- Il daemon ascolta per impostazione predefinita su http://localhost:11434. Se non hai ancora installato Ollama, consulta la guida di installazione elencata in fondo alla pagina.
- Un modello LLM di sintesi
- Un modello da 9 a 12B in Q4_K_M (≈7 GB di VRAM) con buone prestazioni in francese è più che sufficiente. Qwen 3.5 9B (256k di contesto, perfetto per trascrizioni lunghe) o Gemma 4 12B sono ottime scelte per riassunti strutturati.
- Whisper
- Implementazione locale: openai-whisper (semplice), faster-whisper (veloce) o whisper.cpp (leggero, senza GPU). Questa guida utilizza le prime due.
- ffmpeg
- Indispensabile per leggere i formati video (mp4 di Teams/Zoom) e convertire l'audio. Whisper lo usa dietro le quinte.
- Hardware
- Una GPU accelera notevolmente Whisper, ma medium funziona anche su CPU (più lentamente). Prevedi circa 2 GB di VRAM per il modello small, di più per large-v3.
#Passo 1: trascrivere l’audio della riunione con Whisper
Il metodo di installazione più diretto è usare il pacchetto openai-whisper, che fornisce un comando da riga di comando pronto all'uso. Installalo in un ambiente Python, con ffmpeg installato a livello di sistema.
La trascrizione si ottiene poi con un solo comando. Si specificano il modello, la lingua (forzarla evita errori di rilevamento nelle riunioni brevi) e il formato di output testuale.
Ottieni un file reunion.txt contenente l'intera riunione. Se vuoi anche sottotitoli con timestamp (utili per ritrovare un passaggio), aggiungi --output_format srt, oppure all per generare tutto in una volta.
Per una riunione di un'ora, la trascrizione su CPU può richiedere molto tempo. È qui che entra in gioco faster-whisper, una reimplementazione che sfrutta CTranslate2 ed è nettamente più veloce a parità di qualità. Ecco uno script Python che trascrive e salva il testo.
#Elaborare una registrazione di Teams o Zoom
Le registrazioni di Teams e Zoom sono file video .mp4 (a volte .m4a per il solo audio). Whisper sa leggerli direttamente perché si basa su ffmpeg, ma estrarre prima la traccia audio in mono a 16 kHz è più affidabile e più veloce — soprattutto con whisper.cpp, che lo richiede.
- -ar 16000
- Ricampiona a 16 kHz, la frequenza attesa da Whisper. Non serve mantenere i 48 kHz: il parlato non ne ha bisogno.
- -ac 1
- Unisce i canali in mono. Per la trascrizione non c'è alcun vantaggio nel mantenere in stereo la registrazione di una riunione.
- -c:a pcm_s16le
- Produce WAV non compresso, il formato più sicuro come input per Whisper.
Dove trovare il file? Su Teams, le registrazioni vengono salvate in OneDrive/SharePoint (cartella « Recordings »): scarica il .mp4 in locale prima di elaborarlo. Su Zoom, la registrazione locale si trova nella cartella Documents/Zoom, con un file audio.m4a separato se l'opzione è attivata: è proprio questo il file da utilizzare direttamente, senza passare dal video.
#Passo 2: la sintesi con un LLM locale
La trascrizione grezza è illeggibile: nessuna punteggiatura affidabile, nessuna struttura, ripetizioni. È il LLM locale a trasformarla in un resoconto utilizzabile. Si invia il testo a Ollama con istruzioni precise sul formato di output atteso.
Il modo più semplice per fare una prova: passare la trascrizione tramite una pipe a ollama run. Il modello riceve il prompt seguito dal testo della riunione.
Per un utilizzo ricorrente, meglio usare l’API REST di Ollama sulla porta 11434: separa correttamente il messaggio di sistema (il ruolo e il formato) dal contenuto (la trascrizione) e rende il risultato riutilizzabile in uno script.
#Il prompt che estrae decisioni e azioni in modo chiaro
È il cuore di un buon resoconto di riunione generato dall'IA. Un prompt vago produce un lungo blocco di testo riassuntivo; un prompt strutturato produce un documento direttamente utilizzabile. La chiave: imporre un formato di output esplicito, suddiviso in sezioni, e chiedere al modello di distinguere chiaramente ciò che è stato deciso da ciò che resta da fare.
- Un formato obbligatorio
- I titoli di sezione (##) costringono il modello a classificare l'informazione piuttosto che mescolarla. Ottieni un output omogeneo da una riunione all'altra.
- La regola contro le allucinazioni
- « Riprendi solo ciò che è realmente detto » e « non specificato » riducono notevolmente il rischio che il LLM inventi una scadenza o un responsabile che non esiste.
- Il responsabile tra parentesi quadre
- Indicare sistematicamente [Responsabile] all'inizio di ogni azione rende il verbale direttamente utilizzabile per passare all'azione — si capisce chi fa cosa a colpo d'occhio.
#Automatizzare tutta la pipeline
Una volta verificate le due fasi, le si esegue in sequenza in un unico script: gli passi un file della riunione e lo script produce il resoconto in Markdown. È questo che trasforma la procedura in uno strumento quotidiano.
Adatta synthese.py in modo che legga il file passato come argomento e scriva il risultato sullo standard output. Ottieni così un unico comando: ./compte-rendu.sh reunion_teams.mp4, e il resoconto in Markdown appare qualche minuto dopo, senza che un solo byte abbia lasciato la macchina.
#Risoluzione dei problemi
- Trascrizione che passa all'inglese
- Whisper ha rilevato erroneamente la lingua a causa di un inizio silenzioso o bilingue. Forza sempre --language French (o language="fr").
- Nomi propri scritti in modo errato
- È normale: Whisper cerca di indovinare in base alla fonetica. Aggiungi un breve passaggio di correzione nel prompt di sintesi («correggi i nomi palesemente trascritti male») oppure fornisci un glossario dei nomi all'LLM.
- Riunione troppo lunga per il contesto
- Dividi la trascrizione in blocchi di circa 3.000 parole, riassumi ciascun blocco e poi fai una sintesi dei riassunti. Aumenta anche num_ctx nella chiamata a Ollama se la tua VRAM lo permette.
- Whisper molto lento
- Passa a faster-whisper, attiva vad_filter, scegli un modello più piccolo (medium → small) o passa alla GPU. Anche whisper.cpp è una buona opzione su una macchina senza GPU.
- Voci che si sovrappongono
- Whisper non distingue i parlanti. Per un resoconto di «chi ha detto cosa», occorre aggiungere a monte una fase di diarizzazione (es. pyannote) — un argomento a sé stante.
#Per approfondire
Questo manuale combina due componenti già trattate in dettaglio sul sito. Per approfondire ogni passaggio o per rendere più sicuro l'intero sistema:
- Whisper + Ollama: pipeline di trascrizione e riassunto 100% locale
- La guida di riferimento sulla componente audio, con le varianti di implementazione di Whisper e un esempio completo, dall'inizio alla fine, relativo a una riunione di un'ora.
- Scegliere la quantizzazione (Q4, Q5, Q8, FP16)
- Per far rientrare un modello di sintesi da 14B o 32B nella memoria della tua GPU senza degradare la qualità del resoconto.
- LLM locale e GDPR: conformità in materia di dati privati in azienda
- Il complemento sul piano normativo: elaborare le riunioni in locale semplifica la conformità; questa guida spiega in dettaglio ciò che resta da documentare.
Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.