Come abbiamo costruito un consulente AI che dialoga con i dati aziendali
Il problema non e' il dato, e' la distanza tra il dato e la domanda: tra dashboard perfette e decisioni operative resta un vuoto che i report predefiniti non riescono a colmare.
Il problema reale: distanza tra dato e domanda
Nelle aziende di medie dimensioni i dati sono spesso abbondanti, i KPI sono formalmente corretti e le dashboard sono curate. Il punto critico e' che la domanda manageriale non nasce quasi mai in forma di report statico.
Un CEO non chiede solo il fatturato per negozio: chiede perche' un punto vendita e' calato, se il fenomeno e' temporaneo o strutturale, quali segnali qualitativi lo confermano e quale azione convenga nell'immediato.
Questa non e' una query SQL isolata. E' una conversazione strategica che richiede analisi quantitativa, contesto aziendale e capacita' di sintesi.
Il prototipo sviluppato
Abbiamo completato un prototipo per un retailer fashion italiano: 16 negozi fisici, e-commerce, circa 21 milioni di euro di fatturato annuo e uno storico di circa 750.000 righe nel datalake gestionale.
Il sistema risponde in linguaggio naturale combinando dati strutturati, memoria istituzionale aziendale e fonti non strutturate come email, chat interne, recensioni online e stampa locale.
L'obiettivo non era creare un chatbot generico, ma un consulente operativo trasparente, capace di mostrare fonti e passaggi di analisi.
I tre pilastri della data intelligence conversazionale
Per rispondere bene a una domanda di business servono tre forme di conoscenza diverse, che nei sistemi tradizionali vivono in silos separati.
- Dato strutturato del datalake: spiega cosa e' successo con transazioni, ordini, resi, magazzino e KPI ufficiali.
- Memoria aziendale: spiega come interpretare i numeri in base a glossario, policy, segmentazioni e decisioni storiche.
- Fonti non strutturate: spiega perche' e' successo, integrando segnali narrativi da email, chat, recensioni, stampa e social.
Sorgenti esterne a plugin
Il terzo pilastro e' implementato come architettura plugin estendibile. Ogni sorgente implementa una interfaccia standard `SourceConnector` e viene registrata da configurazione YAML.
Questo approccio permette di aggiungere nuovi connettori senza toccare il core applicativo: Gmail, Slack, ERP, API meteo, webhook Zapier o server MCP richiedono poche decine di righe.
Nel prototipo sono attivi cinque connettori simulati (email, chat interne, recensioni, stampa, social) e quattro stub disabilitati per mostrare la scalabilita' del modello.
Architettura tecnologica
Lo stack e' stato scelto per produttivita' e manutenibilita': backend FastAPI su Python 3.12, SQLAlchemy asincrono e asyncpg, frontend Next.js 15 TypeScript con Tailwind e componenti shadcn/ui.
PostgreSQL 16 con pgvector gestisce sia i dati strutturati sia gli embedding, evitando complessita' da dual-database e riducendo i problemi di consistenza.
L'esperienza utente usa SSE per lo streaming del ragionamento; Redis 7 gestisce sessioni e cache; Docker Compose orchestra i servizi in locale con base pronta per Kubernetes.
- Modelli: Claude Sonnet 4.6 per uso ordinario, Opus 4.7 per analisi complesse.
- Loop agentico custom su SDK nativo Anthropic (senza framework agentici intermedi).
- Controllo diretto su tool selection, timeout, retry, error handling e streaming eventi.
Memoria semantica: oltre il RAG minimale
Nel prototipo la memoria e' un sistema strutturato, non un semplice retrieval di chunk. Sono modellate nove entita': glossario, segmentazioni, classi di segmentazione, metriche custom, regole di stagionalita', soglie KPI, note istituzionali, policy ed embedding.
Gli embedding sono calcolati in locale con sentence-transformers MiniLM-L6-v2 e salvati in pgvector, con ricalcolo in background quando i contenuti cambiano.
Scelta chiave: la memoria conserva regole e conoscenza, non dati numerici storici. I numeri vengono sempre ricalcolati a runtime dal database, cosi' l'agente non restituisce mai valori obsoleti.
Sopra la memoria opera un Mediator che interpreta la domanda utente, risolve riferimenti temporali, disambigua termini di dominio e produce una domanda contestualizzata anche in ambienti bilingue italiano/tedesco.
Agente orchestratore e cinque tool
Il cuore del sistema e' un agente Claude che lavora in un loop fino a 8 iterazioni con timeout globale di 150 secondi.
- `query_datalake`: SQL `SELECT` su viste dedicate con utente read-only e parser di sicurezza che blocca DDL/DML.
- `search_memory`: retrieval semantico con fallback keyword quando la similarita' e' bassa.
- `search_external_sources`: query parallela sui connettori attivi con output normalizzato `SourceDocument`.
- `causal_analysis`: scomposizione price-volume-mix, z-score anomalie e triangolazione narrativa quando emerge un driver rilevante.
- `simulate_scenario`: analisi what-if con assunzioni esplicite e separazione tra scenari aritmetici e comportamentali.
Thought stream visibile e fiducia operativa
Abbiamo scelto di mostrare in streaming ogni passo del ragionamento: tool call, risultati, errori e iterazioni. Questa decisione ha migliorato debug e, soprattutto, fiducia.
Quando un manager vede che il sistema consulta viste KPI, memoria aziendale e fonti esterne prima di sintetizzare la risposta, percepisce il processo come trasparente e verificabile.
Il pannello fonti collega ogni risposta alle evidenze usate (SQL, documenti, entry di memoria), spostando il focus da opinione del modello a tracciabilita' decisionale.
Risultati pratici emersi dal prototipo
Le simulazioni conversazionali hanno prodotto output utili al management senza scrivere codice e con tempi di risposta intorno a dieci secondi per richiesta.
- Riduzione sconto medio dall'11% all'8%: stima di recupero margine superiore a 360.000 euro/anno (+1,46 punti percentuali di margine).
- Chiusura marketplace in dismissione: impatto contenuto sul fatturato (-0,45%) e lieve miglioramento del margine (+0,08 punti).
- Promozione Cluster3 verso ClusterVIP: potenziale teorico di circa 250.000 euro di margine aggiuntivo annuo.
Costi operativi e sostenibilita'
Il costo medio per interrogazione, includendo modello, tool multipli e streaming eventi, si colloca tra 0,05 euro e 0,15 euro, con media intorno a 0,10 euro.
In scenario direzionale intenso (50 domande al giorno) il costo API mensile stimato resta nell'ordine di 120-200 euro; con uso esteso (150 domande al giorno) resta sotto circa 400 euro/mese.
Questo ordine di grandezza cambia l'economia dell'accesso ai dati: riduce drasticamente il costo marginale della domanda analitica.
Considerazioni finali
Il prototipo e' stato realizzato in circa 150 ore di sviluppo focalizzato, partendo da zero e arrivando a una demo commerciale completa.
La differenza non la fa il singolo componente tecnologico, ma il product design: un manager vuole conversazioni contestuali, interpretazioni e simulazioni, non report statici.
Il passo successivo per le aziende non e' solo tecnico: e' organizzativo. Occorre chiarire quali domande porre in modo sistematico ai dati, quali conoscenze rendere esplicite e quali fonti qualitative integrare stabilmente.
