Un Assistente AI per Ristoranti: come automatizzare gli ordini con Gemini e i QR Code
25 Maggio 2025

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.

Torna al blog