AI Assistant - Quick Start Guide
AI Assistant - Quick Start Guide
🎯 Obiettivo: AI Assistant contestualizzato con costi <$5/mese
---
📋 Checklist Implementazione
✅ Fase 1: Database & Knowledge Base (Settimana 1-2)
1.1 Migrations
``bash
php artisan make:migration create_ai_assistant_tables
`Tabelle da creare:
- [ ]
ai_conversations (storico conversazioni)
[ ] ai_messages (messaggi chat)
[ ] ai_knowledge_templates (template risposte)
[ ] ai_cache (cache risposte)
[ ] ai_feedback (thumbs up/down)
[ ] ai_usage_analytics (metriche costi/uso)1.2 Seeding Knowledge Base
`bash
php artisan make:seeder AiKnowledgeTemplatesSeeder
`Template da creare (30-40 totali):
AMBITO_PRODUZIONE (8 template):
[ ] prod_daily - "produzione di ieri/oggi"
[ ] prod_weekly - "produzione questa settimana"
[ ] prod_monthly - "produzione questo mese"
[ ] prod_total - "totale pezzi"
[ ] prod_trend - "trend produzione"
[ ] prod_comparison - "confronta periodi"
[ ] prod_by_material - "produzione per materiale"
[ ] prod_by_operator - "produzione per operatore"AMBITO_DIAGNOSTICA (6 template):
[ ] diag_downtime - "perché fermata macchina"
[ ] diag_errors - "errori oggi/periodo"
[ ] diag_slow_ops - "operazioni lente"
[ ] diag_low_production - "produzione bassa"
[ ] diag_anomaly - "anomalia rilevata"
[ ] diag_gaps - "fermi non registrati"AMBITO_OPERATORI (5 template):
[ ] op_ranking - "ranking operatori"
[ ] op_best - "operatore migliore"
[ ] op_performance - "performance operatore X"
[ ] op_comparison - "confronta operatori"
[ ] op_avg_stats - "statistiche medie operatore"AMBITO_CONFIGURAZIONE (4 template):
[ ] config_profiles - "profili macchina"
[ ] config_fields - "campi disponibili"
[ ] config_last_import - "ultimo import CSV"
[ ] config_machine_info - "info macchina"AMBITO_PIANIFICAZIONE (5 template):
[ ] plan_deadline - "ce la facciamo entro X?"
[ ] plan_time_estimate - "quanto ci vuole per X pezzi"
[ ] plan_capacity - "capacità produttiva"
[ ] plan_forecast - "previsione completamento"
[ ] plan_working_days - "giorni lavorativi necessari"AMBITO_COMPARAZIONE (6 template):
[ ] comp_weeks - "questa settimana vs scorsa"
[ ] comp_days - "oggi vs ieri"
[ ] comp_months - "questo mese vs scorso"
[ ] comp_machines - "macchina A vs B"
[ ] comp_operators - "operatore A vs B"
[ ] comp_trend_7d - "trend ultimi 7 giorni"AMBITO_OTTIMIZZAZIONE (4 template - richiedono LLM):
[ ] opt_suggestions - "come migliorare"
[ ] opt_bottlenecks - "colli di bottiglia"
[ ] opt_best_practices - "best practices"
[ ] opt_efficiency - "aumentare efficienza"---
✅ Fase 2: Services Layer (Settimana 3)
2.1 Intent Router
`bash
php artisan make:service I40/AI/IntentRouterService
`File da creare:
[ ] app/Services/I40/AI/IntentPatterns.php (regex dictionary)
[ ] app/Services/I40/AI/IntentRouterService.php (pattern matching)Funzionalità :
[ ] Normalizza query (lowercase, rimuovi punteggiatura)
[ ] Pattern matching con regex
[ ] Entity extraction (date, numeri, nomi)
[ ] Confidence score (0-1) 2.2 Knowledge Base Service
`bash
php artisan make:service I40/AI/KnowledgeBaseService
`Funzionalità :
[ ] Template lookup da DB
[ ] Parameter binding (date, machine_id, etc.)
[ ] SQL execution (safe, timeout, validation)
[ ] Context enrichment (media, confronti)
[ ] Response formatting 2.3 Cache Service
`bash
php artisan make:service I40/AI/CacheService
`Funzionalità :
[ ] Query hash generation (MD5)
[ ] Cache storage (TTL configurabile)
[ ] Cache invalidation (su nuovi dati)
[ ] Hit rate tracking 2.4 LLM Fallback Service
`bash
php artisan make:service I40/AI/LLMFallbackService
`Funzionalità :
[ ] Minimal prompt building
[ ] OpenAI API integration
[ ] Token usage tracking
[ ] Cost estimation
[ ] Temperature control (0.2-0.3) 2.5 Main Orchestrator
`bash
php artisan make:service I40/AI/AiAssistantService
`Funzionalità :
[ ] Orchestrates all services
[ ] Decision tree (template → LLM fallback)
[ ] Conversation context management
[ ] Analytics tracking ---
✅ Fase 3: Controller & Routes (Settimana 4)
3.1 Controller
`bash
php artisan make:controller Admin/I40/AiAssistantController
`Metodi da implementare:
[ ] chat(Request) - POST /ai/chat
[ ] conversations() - GET /ai/conversations
[ ] show($id) - GET /ai/conversations/{id}
[ ] feedback(Request) - POST /ai/feedback
[ ] analytics() - GET /ai/analytics (admin)3.2 Routes
`php
// routes/i40.php
Route::prefix('ai')->name('ai.')->middleware('auth')->group(function () {
Route::post('/chat', [AiAssistantController::class, 'chat']);
Route::get('/conversations', [AiAssistantController::class, 'conversations']);
Route::get('/conversations/{id}', [AiAssistantController::class, 'show']);
Route::post('/feedback', [AiAssistantController::class, 'feedback']);
Route::middleware('role:admin')->group(function () {
Route::get('/analytics', [AiAssistantController::class, 'analytics']);
});
});
`---
✅ Fase 4: Frontend Widget (Settimana 5)
4.1 Blade Component
`bash
Crea file
touch resources/views/components/ai-chat-widget.blade.php
`Features da implementare:
[ ] Chat UI (messaggi user/assistant)
[ ] Input textarea + send button
[ ] Suggestions buttons (iniziali + follow-up)
[ ] Loading indicator (typing animation)
[ ] Feedback buttons (thumbs up/down)
[ ] Badge ambito corrente
[ ] Minimize/maximize widget
[ ] Scroll to bottom auto 4.2 Integrazione in Analyze View
`blade
<!-- resources/views/admin/i40/operations/analyze.blade.php -->@section('content')
<!-- ... existing content ... -->
<!-- AI Chat Widget (Fixed bottom-right) -->
@include('components.ai-chat-widget', [
'machine' => $selectedMachine,
])
@endsection
`4.3 Stile CSS
`bash
Aggiungi inline in widget oppure
touch public/css/ai-chat-widget.css
`Classi CSS da implementare:
[ ] .ai-chat-widget (container fisso bottom-right)
[ ] .chat-header (gradient, clickable)
[ ] .messages-container (scroll, padding)
[ ] .message.user / .message.assistant (bubble style)
[ ] .follow-up-suggestions (button grid)
[ ] .typing-indicator (3 dots animati)---
✅ Fase 5: Testing & Refinement (Settimana 6)
5.1 Unit Tests
`bash
php artisan make:test I40/AI/IntentRouterTest --unit
php artisan make:test I40/AI/KnowledgeBaseTest --unit
`Test da implementare:
[ ] Intent detection accuracy (70%+ coverage)
[ ] Entity extraction (date, numeri, nomi)
[ ] Template lookup (match corretto)
[ ] SQL safety (prevent injection)
[ ] Cache hit/miss
[ ] Cost estimation 5.2 Integration Tests
`bash
php artisan make:test I40/AI/AiChatFlowTest
`Scenarios da testare:
[ ] Query semplice (produzione ieri) → Template
[ ] Query complessa (ottimizzazione) → LLM
[ ] Cache hit (query ripetuta)
[ ] Feedback (thumbs up/down)
[ ] Conversation context (multi-turn) 5.3 User Acceptance Testing
[ ] 5 operatori testano con query reali
[ ] Raccolta feedback qualitativo
[ ] Identificazione template mancanti
[ ] Refinement pattern matching
[ ] Improvement response templates ---
📊 Dashboard Analytics (Admin)
View da creare
`bash
touch resources/views/admin/i40/ai/analytics.blade.php
`Metriche da mostrare:
Usage Stats:
[ ] Totale query (periodo)
[ ] Query con LLM (%)
[ ] Utenti attivi
[ ] Query per ambito (breakdown) Performance:
[ ] Latency media (ms)
[ ] Cache hit rate (%)
[ ] Template usage (top 10) Quality:
[ ] Satisfaction rate (%)
[ ] Feedback positivi/negativi
[ ] Query fallite (no template, no LLM response) Costs:
[ ] Totale tokens usati
[ ] Costo stimato ($)
[ ] Proiezione mensile Chart.js Graphs:
[ ] Query per giorno (line chart)
[ ] Query per ambito (pie chart)
[ ] Top template (bar chart)
[ ] Satisfaction trend (line chart) ---
🔧 Configuration
.env
`bash
AI Assistant
OPENAI_API_KEY=sk-proj-...
OPENAI_MODEL=gpt-4o-mini
OPENAI_MAX_TOKENS=300
OPENAI_TEMPERATURE=0.2AI_ENABLED=true
AI_CACHE_TTL=3600
AI_MAX_CONVERSATIONS_PER_USER=100
AI_MAX_MESSAGES_PER_CONVERSATION=50
`config/ai.php
`bash
php artisan vendor:publish --tag=openai-config
`Configurazioni custom:
`php
return [
'enabled' => env('AI_ENABLED', true),
'openai' => [
'api_key' => env('OPENAI_API_KEY'),
'model' => env('OPENAI_MODEL', 'gpt-4o-mini'),
'max_tokens' => env('OPENAI_MAX_TOKENS', 300),
'temperature' => env('OPENAI_TEMPERATURE', 0.2),
],
'cache' => [
'enabled' => true,
'ttl' => env('AI_CACHE_TTL', 3600),
'driver' => 'database', // o 'redis'
],
'limits' => [
'max_conversations_per_user' => 100,
'max_messages_per_conversation' => 50,
'max_query_length' => 500,
],
'cost_tracking' => [
'enabled' => true,
'input_cost_per_1m_tokens' => 0.15, // GPT-4o-mini
'output_cost_per_1m_tokens' => 0.60,
],
];
`---
🚀 Deployment
Pre-Deploy Checklist
[ ] Migrations run (production DB)
[ ] Seeder run (knowledge templates)
[ ] OpenAI API key configured
[ ] Cache driver configured (redis preferred)
[ ] Error logging configured
[ ] Analytics dashboard accessible (admin only) Post-Deploy Monitoring
[ ] Query success rate > 95%
[ ] LLM usage < 20%
[ ] Latency < 1s (p95)
[ ] Costi < $5/mese (primi 50 utenti)
[ ] Satisfaction rate > 85% ---
📈 Roadmap Evolutiva
Fase 2 (Mese 2-3)
[ ] Voice input (Speech-to-Text)
[ ] Export conversazioni (PDF/Excel)
[ ] Alert automation (notifiche proattive)
[ ] Multi-macchina queries ("confronta tutte le macchine")
[ ] Grafici inline (Chart.js embeddati in risposta) Fase 3 (Mese 4-6)
[ ] Fine-tuning LLM (modello custom su dominio)
[ ] Embeddings + Vector DB (semantic search)
[ ] Suggerimenti proattivi (dashboard insights)
[ ] Mobile app integration
[ ] Multi-lingua (EN, ES) ---
💰 Budget Stimato
Setup Iniziale (One-Time)
Sviluppo: 6 settimane × 40h = 240 ore
Testing: 1 settimana × 20h = 20 ore
Totale: ~260 ore Costi Mensili Operativi
| Voce | Costo |
|------|-------|
| OpenAI API (50 utenti, 20% LLM) | $3-5/mese |
| Hosting (cache Redis) | $0 (già incluso) |
| Manutenzione (1h/settimana) | ~4 ore/mese |Totale mensile: $3-5 + manutenzione
ROI Atteso
Risparmio tempo analisi dati: 30 min/giorno/utente → 25h/mese × 10 utenti = 250h/mese
Decisioni più rapide: Riduzione downtime macchina ~2h/mese = €400-1000/mese
ROI netto: €3.000-5.000/mese (conservativo) ---
✅ Success Criteria
Settimana 6 (MVP Launch)
✅ 80%+ query gestite da template (no LLM)
✅ Latency < 1s per 90% query
✅ Costi < $10/mese primi 50 utenti
✅ 5 operatori testano e approvano UX Mese 3 (Produzione)
✅ 60%+ utenti usano AI settimanalmente
✅ Satisfaction rate > 85%
✅ 50%+ domande risolte autonomamente
✅ ROI positivo (risparmi > costi) ---
🎯 Prossimo Step
1. Revisionare Documentazione:
- [ ] AI_ASSISTANT_ARCHITECTURE_v2.md (dettaglio tecnico)
- [ ] EXECUTIVE_SUMMARY_AI_ASSISTANT.md (visione business)
- [ ] QUICK_START_AI_IMPLEMENTATION.md (questa guida)
2. Decidere Priorità :
- Partire subito? (Settimana 1: Database + Templates)
- Testare PoC? (1 ambito, 5 template, controller minimo)
- Approfondire costi? (Budget planning dettagliato)
3. Setup Iniziale:
`bash
# OpenAI API Key
# Registrati su https://platform.openai.com
# Crea API key
# Aggiungi a .env
# Verifica connection
php artisan tinker
>>> OpenAI::chat()->create(['model' => 'gpt-4o-mini', 'messages' => [['role' => 'user', 'content' => 'Test']]]);
``---
Pronto? Iniziamo! 🚀
Analisi Codice
Blocco 1 bash
php artisan make:migration create_ai_assistant_tables
Blocco 2 bash
php artisan make:seeder AiKnowledgeTemplatesSeeder
Blocco 3 bash
php artisan make:service I40/AI/IntentRouterService
Blocco 4 bash
php artisan make:service I40/AI/KnowledgeBaseService
Blocco 5 bash
php artisan make:service I40/AI/CacheService
Blocco 6 bash
php artisan make:service I40/AI/LLMFallbackService
Blocco 7 bash
php artisan make:service I40/AI/AiAssistantService
Blocco 8 bash
php artisan make:controller Admin/I40/AiAssistantController
Blocco 9 php
// routes/i40.php
Route::prefix('ai')->name('ai.')->middleware('auth')->group(function () {
Route::post('/chat', [AiAssistantController::class, 'chat']);
Route::get('/conversations', [AiAssistantController::class, 'conversations']);
Route::get('/conversations/{id}', [AiAssistantController::class, 'show']);
Route::post('/feedback', [AiAssistantController::class, 'feedback']);
Route::middleware('role:admin')->group(function () {
Route::get('/analytics', [AiAssistantController::class, 'analytics']);
});
});
Blocco 10 bash
# Crea file
touch resources/views/components/ai-chat-widget.blade.php
Blocco 11 blade
<!-- resources/views/admin/i40/operations/analyze.blade.php -->
@section('content')
<!-- ... existing content ... -->
<!-- AI Chat Widget (Fixed bottom-right) -->
@include('components.ai-chat-widget', [
'machine' => $selectedMachine,
])
@endsection
Blocco 12 bash
# Aggiungi inline in widget oppure
touch public/css/ai-chat-widget.css
Blocco 13 bash
php artisan make:test I40/AI/IntentRouterTest --unit
php artisan make:test I40/AI/KnowledgeBaseTest --unit
Blocco 14 bash
php artisan make:test I40/AI/AiChatFlowTest
Blocco 15 bash
touch resources/views/admin/i40/ai/analytics.blade.php
Blocco 16 bash
# AI Assistant
OPENAI_API_KEY=sk-proj-...
OPENAI_MODEL=gpt-4o-mini
OPENAI_MAX_TOKENS=300
OPENAI_TEMPERATURE=0.2
AI_ENABLED=true
AI_CACHE_TTL=3600
AI_MAX_CONVERSATIONS_PER_USER=100
AI_MAX_MESSAGES_PER_CONVERSATION=50
Blocco 17 bash
php artisan vendor:publish --tag=openai-config
Blocco 18 php
return [
'enabled' => env('AI_ENABLED', true),
'openai' => [
'api_key' => env('OPENAI_API_KEY'),
'model' => env('OPENAI_MODEL', 'gpt-4o-mini'),
'max_tokens' => env('OPENAI_MAX_TOKENS', 300),
'temperature' => env('OPENAI_TEMPERATURE', 0.2),
],
'cache' => [
'enabled' => true,
'ttl' => env('AI_CACHE_TTL', 3600),
'driver' => 'database', // o 'redis'
],
'limits' => [
'max_conversations_per_user' => 100,
'max_messages_per_conversation' => 50,
'max_query_length' => 500,
],
'cost_tracking' => [
'enabled' => true,
'input_cost_per_1m_tokens' => 0.15, // GPT-4o-mini
'output_cost_per_1m_tokens' => 0.60,
],
];
Blocco 19 bash
# OpenAI API Key
# Registrati su https://platform.openai.com
# Crea API key
# Aggiungi a .env
# Verifica connection
php artisan tinker
>>> OpenAI::chat()->create(['model' => 'gpt-4o-mini', 'messages' => [['role' => 'user', 'content' => 'Test']]]);