Protocollo 4B v0.1

Un modello aperto che protocolla la posta di un'azienda italiana: PEC, fatture elettroniche, F24, avvisi del Fisco, atti, mail dei clienti, truffe. Gira in locale, anche senza GPU.

Non scrive testo: per ogni documento risponde a domande a scelta chiusa con le probabilità di ogni risposta. Che tipo di documento è? A quale ufficio va? Cosa bisogna fare? C'è una scadenza, e fra quanti giorni? Che rischio c'è? È una truffa? Contiene dati sensibili?

È Rizzo Flow 4B con un adapter LoRA addestrato sui documenti italiani di protocollo-dati. Codice, dati e prove: github.com/dacso-ai/protocollo.

Smista e segnala, non sostituisce il commercialista o l'avvocato. Le probabilità non sono calibrate su posta reale: i documenti con una possibile scadenza o una possibile truffa vanno sempre visti da una persona.

File

File Dimensione Uso
protocollo-4b-v01-q8_0.gguf 4,1 GB consigliato; è la versione misurata qui sotto
protocollo-4b-v01-q4_k_m.gguf 2,4 GB per PC con poca memoria; non ancora misurata
lora/ 124 MB l'adapter LoRA (r 16, alpha 32) da applicare a rizzoaiacademy/rizzo-flow rev 55633c8
training/storia.json loss e valutazioni dell'addestramento

I GGUF sono prodotti con llama.cpp b11081 da addestramento/esporta.py. La stessa catena, applicata con un adapter vuoto, riproduce byte per byte il GGUF Q8_0 ufficiale di Rizzo Flow.

Come si usa

Con il server di Rizzo Flow (llama.cpp, su CPU, Apple, NVIDIA o AMD):

uv run rizzo serve --model protocollo-4b-v01-q8_0.gguf

Le domande sono in protocollo/domande.json e vanno inviate a POST /v1/decisions così come sono. Lo stato è il testo del documento, con in testa la riga "Ricevuto il ...", che serve a contare i giorni alla scadenza:

curl http://127.0.0.1:8017/v1/decisions -H 'Content-Type: application/json' -d '{
  "state": "Ricevuto il 30/10/2026 via mail da amministrazione@fornitore-srl.com\nSpett.le cliente, il nostro conto è cambiato: pagate le fatture aperte sul nuovo IBAN LT12 ... Non contattate la banca.",
  "questions": {"phishing": {"type": "boolean", "instructions": "È una truffa? Per esempio un finto ente, una finta fattura con un link da cliccare, un fornitore che chiede di pagare su un IBAN nuovo."}}
}'

Il modello è stato addestrato con quelle domande e con quel prompt (compilato da Rizzo Flow, spark-decisions-v3). Con domande diverse funziona come Rizzo Flow, ma non è stato misurato.

Risultati

Prova zero: 50 documenti (28 dal generatore, 22 scritti a mano), 399 decisioni, stesso server per tutti e due i modelli (Q8_0, Mac Pro, solo CPU).

Rizzo Flow 4B Protocollo 4B v0.1
Decisioni giuste 328/399 (82%) 394/399 (99%)
Documenti scritti a mano 121/157 (77%) 154/157 (98%)
Scadenze mancate 0 su 25 0 su 25
Truffe non viste 1 su 3 0 su 3
Documento Rizzo Flow Protocollo v0.1
Nota di credito fattura, da pagare nota di credito, archiviare
Decreto ingiuntivo (40 giorni) da pagare all'avvocato
Cambio IBAN da un dominio simile rispondere, non è una truffa truffa, cestinare

Come leggere questi numeri. Sono un buon segnale, non ancora una prova indipendente. I documenti generati vengono dallo stesso generatore dell'addestramento, anche se con semi diversi. Quelli scritti a mano li ha scritti chi ha disegnato anche gli scenari del dataset. Le risposte di procedura (per esempio "inoltrare" un avviso bonario al commercialista) sono scelte nostre, e il modello le ha imparate. La misura indipendente sarà un benchmark etichettato da commercialisti, avvocati e amministrativi su documenti che non abbiamo scritto noi.

Sulle 800 domande di controllo del dataset l'accuratezza è passata da 0,74 a 0,99 durante l'addestramento.

Addestramento

  • Base: rizzoaiacademy/rizzo-flow, revisione 55633c8 (Spark-X2.5-4B con il LoRA di Rizzo Flow già unito, Apache-2.0).
  • LoRA r 16, alpha 32, dropout 0,05 su q_k_v_proj, g_proj, out_proj, gate_proj, up_proj, down_proj; 32,4 M parametri addestrabili.
  • Loss: cross-entropy morbida sulle sole lettere di risposta all'ultima posizione del prompt, come Rizzo Flow. Nessun testo generato.
  • Dati: 13.082 domande da protocollo-train-righe, una passata. AdamW, lr 5e-5 con coseno, 16 domande per passo, 765 passi.
  • Hardware: una NVIDIA T4 gratuita di Kaggle, fp16 con GradScaler, 9,4 ore. Notebook: protocollo_lora_kaggle.ipynb.

Limiti

  • Dati di addestramento sintetici: la posta vera è più disordinata (scansioni, allegati, inoltri a catena).
  • Prompt di più di 2.048 token esclusi dall'addestramento: le fatture XML molto lunghe sono poco rappresentate.
  • Sulla CPU (Xeon a 16 core) risponde in circa 20 secondi a documento con 8-12 domande. Con una GPU, secondo i numeri di Rizzo Flow, i tempi scendono a frazioni di secondo.
  • Gli errori rimasti nella prova zero: un acconto letto come TD01, due conteggi di giorni sbagliati, un reclamo per ritardo mandato al commerciale, una conferma d'ordine segnata come "da pagare".

Licenza e crediti

Apache-2.0, come il modello base. L'idea dei modelli "System One" è di TypeSafe (Jev). Modello base, prompt e server sono di Rizzo Flow (Rizzo AI Academy), a sua volta basato su Spark-X2.5 e ispirato a SemIf. Protocollo non è affiliato a nessuno di questi progetti.

Un progetto di DACSO, Crema.

Downloads last month
-
GGUF
Model size
4B params
Architecture
spark2_5
Hardware compatibility
Log In to add your hardware

4-bit

8-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for dacso-ai/protocollo-4b

Adapter
(1)
this model

Datasets used to train dacso-ai/protocollo-4b