
Nel mondo della ristorazione moderna, l'automazione dei processi può semplificare significativamente l'esperienza sia per i clienti che per il personale. In questo articolo, esploreremo come creare un semplice ma efficace sistema di ordinazione automatizzata utilizzando il modello Gemini di Google, Python e la generazione di codici QR.
Un Assistente AI per Ristoranti: Automatizzare gli Ordini con Gemini e l'uso dei QR Code
Nel mondo della ristorazione moderna, l'automazione dei processi può semplificare significativamente l'esperienza sia per i clienti che per il personale. In questo articolo, mostreremo attraverso un prototipo come creare un semplice ma efficace sistema di ordinazione automatizzata utilizzando il modello Gemini di Google, Python e la generazione di codici QR.
L'idea del progetto
Il nostro sistema si presenta come un cameriere virtuale che:
1. Conosce il menù del ristorante
2. Interagisce con i clienti per prendere gli ordini
3. Genera automaticamente un codice QR contenente l'ordine finale
Il tutto funziona da terminale Ubuntu, rendendolo perfetto come prototipo e per ristoranti che vogliono esaminare una soluzione spartana ma funzionale. Il prodotto finale andrebbe pensato nella forma di un'app per Android e per iOS.
Architettura del Sistema
Componenti Principali
A) Il Menù Digitale:
Un semplice file di testo ( menu.txt ) che contiene l'elenco dei piatti:
B) Generazione QR Code:
Utilizziamo qrencode, un tool da riga di comando disponibile su Ubuntu (sudo apt install qrencode)
C) Script ed LLM:
Uno script Python che utilizza il modello Gemini per simulare un cameriere esperto.
Implementazione del codice
import google.generativeai as genai
import subprocess
import os
from datetime import datetime
class RistoranteAI:
def __init__(self, api_key, menu_file="menu.txt"):
# Configurazione Gemini
genai.configure(api_key=api_key)
# Selezione del modello
self.model = genai.GenerativeModel('gemini-2.0-flash-lite')
# Caricamento menù
self.menu = self.carica_menu(menu_file)
# Prepara le istruzioni di sistema per includerle nella history
# Il "system instruction" dedicato non è supportato dal vecchio pacchetto.
self.system_instruction = f"""
Sei un cameriere esperto e cordiale in un ristorante italiano.
Il tuo compito è prendere gli ordini dai clienti basandoti esclusivamente
su questo menù:
{self.menu}
Comportamenti da seguire:
- Saluta cordialmente il cliente
- Presenta il menù se richiesto
- Aiuta nella scelta dei piatti
- Conferma sempre l'ordine prima di concludere
- Quando il cliente conferma l'ordine finale, includi nella risposta
la stringa "##ORDINE CONCLUSO##" seguita dall'ordine dettagliato
- Sii professionale ma amichevole
"""
def carica_menu(self, file_path):
"""Carica il menù dal file di testo"""
try:
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()
except FileNotFoundError:
return "Menù non disponibile al momento."
def genera_qr_code(self, ordine_text):
"""Genera un QR code contenente l'ordine"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
qr_filename = f"ordine_{timestamp}.png"
try:
# Comando per generare il QR code
cmd = [
'qrencode',
'-o', qr_filename,
'-s', '8', # Dimensione
ordine_text
]
subprocess.run(cmd, check=True)
print(f"\n🔲 QR Code generato: {qr_filename}")
print("Il codice contiene l'ordine del cliente per la cucina.")
except subprocess.CalledProcessError:
print("❌ Errore nella generazione del QR code")
except FileNotFoundError:
print("❌ qrencode non installato. Installa con: sudo apt install qrencode")
def avvia_conversazione(self):
"""Avvia la conversazione con il cliente"""
print("=== RISTORANTE AI - SISTEMA ORDINAZIONE ===\n")
print("Premi Ctrl+C per uscire\n")
# Inizializza la chat includendo le istruzioni di sistema all'inizio della history.
# Il parametro 'system_instruction' non è supportato dal vecchio pacchetto.
chat = self.model.start_chat(history=[
# Inseriamo il system_instruction come primo messaggio del "modello" o "utente"
# per guidare il comportamento. Useremo "user" per coerenza con l'inizializzazione.
{"role": "user", "parts": self.system_instruction},
{"role": "model", "parts": "Benvenuto! Sono il tuo cameriere virtuale. In cosa posso aiutarti oggi?"}
])
print(f"🤖 Cameriere: Benvenuto! Sono il tuo cameriere virtuale. In cosa posso aiutarti oggi?\n")
try:
while True:
# Input del cliente
user_input = input("👤 Cliente: ")
# Invia messaggio a Gemini
response = chat.send_message(user_input)
ai_response = response.text
print(f"\n🤖 Cameriere: {ai_response}\n")
# Verifica se l'ordine è concluso
if "##ORDINE CONCLUSO##" in ai_response:
self.gestisci_ordine_concluso(ai_response)
break
except KeyboardInterrupt:
print("\n\n👋 Arrivederci e grazie per aver utilizzato il nostro sistema!")
def gestisci_ordine_concluso(self, response):
"""Gestisce la conclusione dell'ordine e genera il QR"""
print("\n" + "="*50)
print("🎉 ORDINE CONFERMATO!")
print("="*50)
# Estrae l'ordine dalla risposta
ordine_dettagliato = response.split("##ORDINE CONCLUSO##")[1].strip()
# Genera il QR code
ordine_completo = f"ORDINE RISTORANTE\n{datetime.now().strftime('%d/%m/%Y %H:%M')}\n\n{ordine_dettagliato}"
self.genera_qr_code(ordine_completo)
print(f"\n📋 Dettagli ordine:\n{ordine_dettagliato}")
print("\n✅ Sistema pronto per il prossimo cliente.")
# Utilizzo del sistema
if __name__ == "__main__":
# Inserisci qui la tua API key di Gemini
# Assicurati di non esporre la tua API key in un ambiente di produzione.
# Considera di caricarla da variabili d'ambiente (es. os.getenv("GEMINI_API_KEY"))
API_KEY = "*****************************"
# Avvia il sistema
ristorante = RistoranteAI(API_KEY)
ristorante.avvia_conversazione()
File di configurazione del Menù
Il file menu.txt contiene l'elenco dei piatti e risiede nella stessa cartella del file python. Ecco un esempio:
Antipasti
Bruschette Miste - €7.00
Antipasto della Casa - €12.00
Primi Piatti
Spaghetti alla Carbonara - €12.00
Penne all'Arrabbiata - €10.00
Risotto ai Funghi Porcini - €14.00
Secondi Piatti
Bistecca alla Griglia - €18.00
Salmone in Crosta - €16.00
Pollo alle Erbe - €13.00
Dolci
Tiramisu della Casa - €6.00
Panna Cotta ai Frutti di Bosco - €5.50
Bevande
Acqua Naturale - €2.00
Vino della Casa (bicchiere) - €4.00
Caffè Espresso - €1.50
Come Funziona il Sistema
Flusso Operativo
1. Avvio: Il sistema carica il menù e inizializza Gemini con le istruzioni del cameriere
2. Accoglienza: L'AI saluta il cliente e si presenta
3. Ordinazione: Il cliente può chiedere informazioni sui piatti e fare l'ordine
4. Conferma: L'AI riepiloga l'ordine e chiede conferma
5. Generazione QR: Quando il cliente conferma, viene generato automaticamente un QR
code
6. Completamento: Il sistema è pronto per il prossimo cliente
Il Trigger dell'Ordine
L'elemento chiave del sistema è il trigger ##ORDINE CONCLUSO## . Quando Gemini include
questa stringa nella risposta, il sistema:
• Estrae i dettagli dell'ordine
• Genera un timestamp
• Crea un QR code contenente tutte le informazioni
• Salva il file PNG del QR code
Vantaggi del Sistema
Semplicità: Funziona da terminale, non richiede interfacce grafiche complesse
Flessibilità: Il menù può essere facilmente modificato editando il file di testo
Automazione: Il QR code viene generato automaticamente senza intervento umano
Tracciabilità: Ogni ordine ha un timestamp e un file QR univoco
Possibili Estensioni
Questo prototipo può essere esteso in vari modi:
• Integrazione con sistemi di pagamento
• Database per memorizzare ordini e statistiche
• Interfaccia web per una migliore user experience
• Integrazione con stampanti per ricevute automatiche
• Sistema di notifiche per la cucina
Conclusioni
Questo progetto dimostra come l'intelligenza artificiale possa essere integrata
efficacemente nei processi di ristorazione. Con poche righe di codice Python e gli strumenti
giusti, è possibile creare un assistente digitale che migliora l'efficienza del servizio
mantenendo un'interazione naturale e cordiale con i clienti.
Il sistema rappresenta un ottimo punto di partenza per ristoranti che vogliono sperimentare
con l'automazione senza investimenti significativi in infrastrutture complesse.