Inbox Triage / take-home AI engineering
Smistamento automatico di una casella condivisa.
Ho realizzato un servizio che, nei casi con confidenza sufficiente, classifica le email, seleziona le azioni e prepara le risposte automaticamente. Sotto la soglia chiede una decisione a una persona. Invii e scritture nei sistemi esterni richiedono una conferma.
Il progetto parte dall'esercizio pubblico di Go Fig AI, che fornisce otto email e un'API cliente simulata.
La demo riproduce risposte registrate dal servizio in esecuzione; il modello non gira nel browser.
- Servizio
- FastAPI · Docker
- Decisione
- OpenDecider-nano
- Tracce e flusso
- LangSmith · LangGraph
- Verifica
- 55 test in CI
Dall'email all'azione
Una casella info@ riceve richieste di fatturazione, bug, contatti commerciali e spam. Se la classificazione supera la soglia, il servizio sceglie le azioni da una tabella e prepara le eventuali risposte. I casi incerti o sospetti restano da classificare o verificare.
- Email in arrivoIl modello restituisce quattro probabilità e controlla le istruzioni rivolte al sistema.
- Smistamento automaticoCon confidenza sufficiente, il servizio seleziona le azioni; i casi incerti passano a una persona.
- Bozza e confermaLe risposte sono preparate automaticamente; una persona può approvare, modificare o rifiutare ogni azione.
- Scrittura e tracciaIl permesso di scrittura arriva solo dopo l'approvazione; LangSmith registra il percorso.
Classificazione e bozze
OpenDecider-nano sceglie fra quattro categorie e restituisce una probabilità per ciascuna. Da 0,90 in su il servizio prepara le azioni previste; sotto soglia chiede a una persona di classificare l'email. Una seconda domanda rileva eventuali istruzioni rivolte al sistema.
Il modello generativo prepara le bozze di risposta senza accedere ai sistemi esterni. Il testo può essere corretto prima dell'invio.

Dalla proposta all'esecuzione
Risposta, record CRM e avviso tecnico richiedono un verdetto separato. Il codice che legge e classifica possiede solo il permesso di lettura; il client con permesso di scrittura viene creato nel passo di esecuzione, dopo l'approvazione. Un registro evita invii duplicati.

Tracce ed esperimenti
LangSmith raccoglie decisione, bozza e verdetto umano nella traccia della stessa email. Ho valutato il decisore come esperimento su dataset con esiti attesi e un controllo per gli errori che propongono azioni su email da trattenere.
Ho implementato anche il percorso come grafo LangGraph: Studio mostra dove il flusso si ferma per l'approvazione e da quale stato riprende.


Test e risultati
GitHub Actions esegue 55 test a ogni push: nessuna scrittura senza approvazione, nessun permesso anticipato, nessun doppio invio e un esito definito per i guasti. In una branch di prova ho rimosso il controllo dell'approvazione: un test è fallito, come previsto.
In una sola esecuzione, tutte le 8 email dell'esercizio hanno prodotto l'esito atteso. Dodici email aggiuntive hanno rivelato falsi allarmi e attacchi non riconosciuti: per questo un messaggio segnalato non viene scartato e la sicurezza non dipende dal solo rilevatore di iniezioni.
Queste prove mostrano il percorso e i suoi confini; venti email, valutate una volta ciascuna, non misurano l'accuratezza su una casella reale. Anche posta, CRM e Slack del cliente sono simulati.

Demo e codice
La demo pubblica fa provare la pagina di decisione e approvazione con risposte registrate. Per avviare il servizio completo, il repository contiene i due container, i test e le decisioni di progetto.