Progetti

Chatbot AI

Il mio primo assistente AI, addestrato, non incartato.

Un assistente in italiano costruito su un DistilBERT rifinito: meteo, notizie, azioni e crypto, una lista TODO e qualche battuta, con il classificatore di intenti addestrato da me, non preso in prestito da un'API.

DataAgosto 2025
StatoOnline su Hugging Face
Tech stack
  • Python
  • DistilBERT
  • PyTorch
  • Flask
  • SQLite
  • Docker

Il punto di partenza

Nel 2025 la mossa facile era ovvia: incartare l'API di un LLM altrui in una finestra di chat e chiamarlo progetto. Io volevo l'opposto. Volevo capire cosa succede dentro, la tokenizzazione, il fine-tuning, lo sbilanciamento delle classi, il momento in cui la validation loss finalmente smette di migliorare. Così ho costruito un assistente il cui cervello l'ho addestrato io.

Il vincolo che l'ha reso interessante: l'italiano. La maggior parte dei tutorial, dei dataset e dei modelli pre-addestrati assume l'inglese. Costruire un chatbot che capisce nativamente «che tempo fa a Catania?» ha significato costruire il training set, l'augmentation e la logica di gestione dei messaggi attorno alla mia lingua.

Cosa sa fare

L'assistente instrada ogni messaggio attraverso dodici intenti: meteo in tempo reale per oltre 100 città, titoli di notizie dagli USA, prezzi di azioni e crypto su più di 50 simboli, una lista TODO completa con priorità, più ora, convenevoli e battute. Ogni servizio esterno (OpenWeatherMap, NewsAPI, Alpha Vantage, CoinGecko) sta dietro un livello di rate limiting con fallback simulati, così il bot degrada con grazia invece di morire quando la quota di un piano gratuito si esaurisce.

Tutto vive dentro un'interfaccia di chat volutamente familiare. Dark e light mode sono lo stesso prodotto, non due skin separate: gerarchia, feedback e conversazione restano leggibili qualunque lato del toggle si preferisca.

La superficie semplice nasconde il router sottostante. Il menu delle abilità rende esplicito il suo vocabolario; da lì, ogni intento diventa un piccolo flusso di prodotto, non una semplice risposta preconfezionata.

Il menu delle abilità: tutto ciò che il bot capisce.

Addestrare il cervello

Il classificatore è un DistilBERT con una testa a 3 layer, rifinito solo sugli ultimi due layer del transformer, abbastanza per specializzarsi sugli intenti in italiano senza bruciare la conoscenza pre-addestrata. Il vero lavoro è stato il dataset: augmentation pesante con sinonimi, varianti di cortesia, rumore di punteggiatura e rimozione degli articoli, perché il modello sopravviva ai mille modi in cui un italiano dice davvero «aggiungi il pane alla lista».

Il training è converso in 12 epoche e 42 minuti, arrivando al 99,5% di accuratezza in validazione con F1 bilanciate su tutti i dodici intenti. Numeri modesti per gli standard del 2026, ed è proprio il punto: è il progetto dove ho imparato a diffidare delle mie stesse metriche, a cercare il data leakage, e a rispettare quanta parte dell'«AI» sia in realtà ingegneria del dataset.

99.5%accuratezza in validazione
12intenti classificati
42mindi training

Il classificatore è solo metà del sistema. In produzione, anche le quote API fanno parte del prodotto: l'utilizzo viene monitorato in tempo reale, i limiti sono visibili e i fallback simulati mantengono utile la conversazione quando un servizio gratuito dice temporaneamente di no.

Utilizzo delle API in tempo reale, con fallback che rispettano i limiti.

Il primo di molti

È il progetto più vecchio qui dentro, e lo tengo apposta. È dove l'«AI» ha smesso di essere un'API magica ed è diventata tokenizer, pesi delle classi e curve di validazione che ho dovuto capire davvero. Ogni modello che ho addestrato dopo, SwishAI, RotoAI, quelli ancora in repo privati, poggia sul pomeriggio in cui ho visto per la prima volta una loss appiattirsi sapendo esattamente perché. Addestrato, non incartato. È ancora la regola.

Altri progetti