|
| 1 | +# CKAN Open Data Explorer |
| 2 | + |
| 3 | +**Versione**: 1.0 |
| 4 | +**Data**: 25 luglio 2024 |
| 5 | + |
| 6 | +--- |
| 7 | + |
| 8 | +## 1. Introduzione |
| 9 | + |
| 10 | +"CKAN Open Data Explorer" è un'applicazione web frontend progettata per facilitare l'interazione con portali Open Data basati su CKAN, sfruttando un'interfaccia di chat in linguaggio naturale potenziata dall'API Gemini. L'obiettivo principale è rendere l'esplorazione dei dataset e delle risorse Open Data più accessibile e intuitiva per gli utenti, eliminando la necessità di navigare direttamente le interfacce complesse dei portali CKAN o di formulare query API specifiche. |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | +## 2. Obiettivi del Prodotto |
| 15 | + |
| 16 | +- **Semplificare l'accesso ai dati**: Permettere agli utenti di trovare e comprendere i dataset Open Data utilizzando domande e comandi in linguaggio naturale |
| 17 | +- **Migliorare l'esperienza utente**: Fornire un'interfaccia conversazionale fluida e reattiva che guida l'utente attraverso il processo di ricerca dati |
| 18 | +- **Abilitare l'interazione tool-driven**: Utilizzare il modello Gemini per orchestrare chiamate a un server MCP (Microservice Controller Proxy) che a sua volta interagisce con i portali CKAN |
| 19 | +- **Gestire errori comuni**: Fornire feedback chiari e gestibili per errori di connessione al server MCP o problemi di quota dell'API Gemini |
| 20 | +- **Configurabilità**: Consentire agli utenti di configurare l'endpoint del server MCP per adattarsi a diversi ambienti o istanze |
| 21 | + |
| 22 | +--- |
| 23 | + |
| 24 | +## 3. Utenti Target / Personas |
| 25 | + |
| 26 | +- **Ricercatori e Analisti Dati (Principianti)**: Cercano dati specifici ma non hanno familiarità con le API CKAN o la navigazione approfondita dei portali |
| 27 | +- **Giornalisti o Cittadini Curiosi**: Vogliono esplorare i dati pubblici per storie o interessi personali senza barriere tecniche |
| 28 | +- **Sviluppatori (per testing)**: Potrebbero usarlo per testare il funzionamento del server MCP o per esplorare la capacità di Gemini di interpretare le richieste utente e tradurle in chiamate a tool |
| 29 | + |
| 30 | +--- |
| 31 | + |
| 32 | +## 4. Funzionalità |
| 33 | + |
| 34 | +### 4.1 Interfaccia di Chat in Linguaggio Naturale |
| 35 | + |
| 36 | +**Input Messaggi**: |
| 37 | +- Campo di testo per l'utente per digitare domande e comandi |
| 38 | +- Supporta l'invio tramite tasto Invio o un pulsante dedicato |
| 39 | + |
| 40 | +**Display Messaggi**: |
| 41 | +- Messaggi dell'utente visualizzati con sfondo grigio chiaro e testo nero |
| 42 | +- Messaggi dell'assistente visualizzati con sfondo bianco |
| 43 | +- Supporto per il rendering Markdown (tramite react-markdown e remark-gfm) |
| 44 | +- Icone chiare (User, Bot) per distinguere il mittente |
| 45 | + |
| 46 | +**Comportamenti**: |
| 47 | +- Scroll automatico verso il basso per mostrare l'ultimo messaggio |
| 48 | +- Messaggio di benvenuto iniziale per guidare l'utente |
| 49 | +- Suggerimenti di query iniziali per aiutare gli utenti a iniziare |
| 50 | + |
| 51 | +### 4.2 Integrazione con Gemini API per NLU e Tool Calling |
| 52 | + |
| 53 | +- **Orchestrazione Gemini**: L'API Gemini (gemini-3-pro-preview) viene utilizzata per comprendere le intenzioni dell'utente e decidere quali tool dell'MCP chiamare |
| 54 | +- **System Instruction**: Istruzione di sistema personalizzata che guida Gemini a comportarsi come "esperto assistente Open Data specializzato in portali CKAN" con regole rigide per l'utilizzo dei tool e la gestione degli errori CKAN |
| 55 | +- **Tool Calling**: Gemini identifica e formatta le chiamate ai tool (search_datasets, get_dataset) basandosi sul inputSchema fornito dal server MCP |
| 56 | +- **Ciclo di Tool Execution**: L'applicazione gestisce un ciclo di esecuzione dei tool, inviando le risposte dei tool a Gemini per ulteriori elaborazioni e generazioni di risposte in linguaggio naturale |
| 57 | +- **Visualizzazione Tool in Uso**: Durante l'esecuzione di un tool, viene visualizzato un messaggio "Utilizzo tool: [nome_tool]" con icona di caricamento e parametri JSON della chiamata tool (con break-all per adattamento a tutti i dispositivi) |
| 58 | + |
| 59 | +### 4.3 Integrazione con MCP (Microservice Controller Proxy) |
| 60 | + |
| 61 | +- **Endpoint Configurable**: L'URL del server MCP è configurabile tramite interfaccia utente dedicata (sezione "Impostazioni") |
| 62 | +- **Salute del Server**: Indicatore di stato che mostra se il server MCP è online, offline o in fase di verifica (CheckCircle2, XCircle, RefreshCw) |
| 63 | +- **Fallback Tool Definitions**: Se il server MCP non è raggiungibile, l'applicazione usa definizioni di tool di fallback per mantenere funzionalità minima |
| 64 | +- **Chiamate JSON-RPC**: Il servizio mcp.ts gestisce le chiamate JSON-RPC per listare i tool (tools/list) e chiamare i tool specifici (tools/call) |
| 65 | +- **Gestione CORS**: Include logica di fallback utilizzando proxy corsproxy.io se la richiesta diretta fallisce |
| 66 | +- **Output Tool**: L'output JSON dei tool viene parsato e visualizzato nella chat, con rendering specifico per DatasetCard |
| 67 | + |
| 68 | +### 4.4 Visualizzazione Dati (DatasetCard) |
| 69 | + |
| 70 | +- **Card Dettagli Dataset**: Quando Gemini restituisce risultati di dataset, questi vengono visualizzati come DatasetCard con informazioni chiave: titolo, descrizione, data di creazione, autore, licenza, tag e elenco di risorse (con link esterni) |
| 71 | +- **Formattazione**: Date formattate in modo leggibile, link alle risorse chiaramente distinguibili |
| 72 | +- **Troncamento**: Viene mostrato un numero limitato di risorse con messaggio "Mostrati i primi X risultati" se ce ne sono di più |
| 73 | + |
| 74 | +### 4.5 Gestione Errori e Feedback Utente |
| 75 | + |
| 76 | +**Errori Gemini API**: |
| 77 | +- Gestione specifica degli errori di quota (RESOURCE_EXHAUSTED, codice 429) |
| 78 | +- Banner di avviso (AlertTriangle) in caso di quota esaurita |
| 79 | +- Istruzione per selezionare chiave API da progetto a pagamento con link alla documentazione di fatturazione |
| 80 | +- Pulsante per aprire il selettore di chiavi API (se window.aistudio.openSelectKey disponibile) |
| 81 | + |
| 82 | +**Errori MCP**: |
| 83 | +- Messaggi di errore chiari se il server MCP non è raggiungibile o se una chiamata tool fallisce (es. Status 404) |
| 84 | +- Incoraggiamento a controllare l'URL dell'MCP nelle impostazioni |
| 85 | + |
| 86 | +**Stati di Caricamento**: |
| 87 | +- Indicatore "Gemini sta elaborando..." al centro dello schermo quando l'API Gemini è attiva ma non sta chiamando un tool |
| 88 | +- Indicatore "Utilizzo tool: [nome_tool]" quando un tool MCP è in esecuzione |
| 89 | +- Pulsante di invio disabilitato durante il caricamento, se l'input è vuoto, o se l'MCP è offline |
| 90 | + |
| 91 | +### 4.6 Configurabilità |
| 92 | + |
| 93 | +- **Sezione Impostazioni**: Icona Settings apre un pannello dove l'utente può visualizzare e modificare l'endpoint del server MCP e la propria API key di Gemini |
| 94 | +- **Salvataggio Endpoint**: Pulsante Applica salva il nuovo endpoint e verifica immediatamente la connettività MCP |
| 95 | +- **Gestione API Key**: L'utente inserisce la propria API key di Gemini tramite interfaccia dedicata (campo di input protetto). La chiave viene salvata nel browser storage (localStorage) e rimane disponibile per le sessioni successive |
| 96 | + |
| 97 | +--- |
| 98 | + |
| 99 | +## 5. Requisiti Tecnici |
| 100 | + |
| 101 | +### Frontend |
| 102 | + |
| 103 | +- **Framework**: React 19 (tramite react/) |
| 104 | +- **Linguaggio**: TypeScript |
| 105 | +- **Styling**: Tailwind CSS (con plugin typography) per design moderno e responsivo |
| 106 | +- **Icone**: Lucide React (lucide-react) per interfaccia visivamente accattivante |
| 107 | +- **Rendering Markdown**: react-markdown con remark-gfm per rendering robusto del testo generato da Gemini |
| 108 | +- **Gestione Moduli**: Utilizzo di importmap in index.html per caricamento diretto dei moduli ES6 |
| 109 | + |
| 110 | +### Backend (Implicito) |
| 111 | + |
| 112 | +- **Gemini API**: Comunicazione con gemini-3-pro-preview tramite @google/genai SDK |
| 113 | +- **MCP Server**: Interazione con un server MCP (es. ckan-mcp-server.andy-pr.workers.dev/mcp) che espone API JSON-RPC |
| 114 | +- **API Key Management**: L'API key di Gemini è inserita dall'utente tramite l'interfaccia di impostazioni. La chiave viene salvata in localStorage e recuperata in ogni sessione. Supporta anche process.env.API_KEY come fallback per ambienti di sviluppo. Include meccanismo per interagire con window.aistudio.openSelectKey() per selezione di chiave API a pagamento |
| 115 | +- **Error Handling**: Gestione robusta di errori HTTP, errori JSON-RPC e errori specifici dell'API Gemini |
| 116 | + |
| 117 | +--- |
| 118 | + |
| 119 | +## 6. Requisiti Non Funzionali |
| 120 | + |
| 121 | +### Performance |
| 122 | + |
| 123 | +- Caricamento rapido dell'interfaccia utente |
| 124 | +- Risposte della chat ottimizzate per la velocità, minimizzando la latenza delle chiamate API |
| 125 | +- Scroll fluido della chat, anche con molti messaggi |
| 126 | + |
| 127 | +### Usabilità (UX) |
| 128 | + |
| 129 | +- Interfaccia intuitiva e facile da usare per utenti di tutti i livelli tecnici |
| 130 | +- Feedback visivo chiaro per stati di caricamento, errori e successo delle operazioni |
| 131 | +- Messaggi di errore comprensibili e azioni suggerite |
| 132 | + |
| 133 | +### Reattività |
| 134 | + |
| 135 | +L'applicazione deve essere completamente responsiva e funzionare bene su desktop, tablet e dispositivi mobili |
| 136 | + |
| 137 | +### Accessibilità (A11Y) |
| 138 | + |
| 139 | +- Utilizzo di elementi HTML semantici |
| 140 | +- Contrasto colori adeguato |
| 141 | +- Navigazione da tastiera e supporto per lettori di schermo (da verificare e migliorare) |
| 142 | + |
| 143 | +### Compatibilità Cross-browser |
| 144 | + |
| 145 | +Funzionalità e aspetto devono essere coerenti sui principali browser moderni (Chrome, Firefox, Safari, Edge) |
| 146 | + |
| 147 | +### Sicurezza |
| 148 | + |
| 149 | +- La chiave API di Gemini è gestita tramite variabili d'ambiente e non esposta nel codice sorgente lato client |
| 150 | +- Il CORS proxy è usato come fallback, ma si raccomanda che il server MCP gestisca il CORS direttamente per maggiore sicurezza |
| 151 | + |
| 152 | +### Internazionalizzazione |
| 153 | + |
| 154 | +Attualmente l'interfaccia è interamente in italiano |
| 155 | + |
| 156 | +### Offline Functionality |
| 157 | + |
| 158 | +L'applicazione richiede una connessione internet attiva sia per l'API Gemini che per il server MCP, quindi non supporta la funzionalità offline |
0 commit comments