CHATBOT CON ADRIANO OLIVETTI
Se sei qui, significa che vorresti avere un dialogo con Adriano Olivetti.
Beh, in realtà è molto semplice: grazie all’intelligenza artificiale, oggi puoi creare un Chatbot con Adriano Olivetti.
Qui sotto troverai tutte le istruzioni per crearlo.
Se vuoi approfondire la vita e il pensiero di Adriano Olivetti, visita il sito.
COSA DEVI FARE?
Mi raccomando: se non hai Python installato, devi installarlo. (puoi scaricarlo da qui: https://www.python.org/downloads/)
Istruzioni per creare il tuo Chatbot con Adriano Olivetti
- Apri Python e copia il codice qui sottostante
- Salva il file con nome
- Assicurati di avere i pacchetti python
-
- google-genai
- edge-tts
- playsound==1.2.2
Se ce li hai, salta direttamente al passaggio 5.
Altrimenti continua. -
- Apri il terminale (o Prompt dei comandi)
Scrivi “python -m pip install google-genai edge-tts playsound==1.2.2″
Dopo che li hai installati, ritorna sul tuo file. - Trova la riga:
API_KEY = “XXXX” - Sostituisci “XXXX” con la tua API Key di Google AI Studio
Puoi crearne una facilmente qui:
Google AI Studio - Salva il file ed eseguilo
Ed ora…?
Ed ora è il momento di far partire il file.
Che dirvi… buon divertimento!
Il codice che vi abbiamo dato è una versione semplice del chatbot. Abbiamo anche sviluppato una versione avanzata che anima le risposte di Olivetti. Questa però è più complessa da far partire su tutti i PC, ma se vi interessa vedere il risultato, potete cliccare qui.
E se gli proponessi una domanda che non è inerente ad Olivetti? Beh… Vi darà una risposta: siete curiosi di conoscerla? Allora cliccate qui
ECCO IL CODICE PER IL CHATBOT CON ADRIANO OLIVETTI…
import tkinter as tk from tkinter import scrolledtext import random from google import genai from google.genai import types import threading import uuid from playsound import playsound import asyncio import edge_tts import re
# ========================= # API GEMINI # ========================= API_KEY = "XXXX" #inserire la tua api_key client = genai.Client(api_key=API_KEY)
# =========================
# DATABASE CONOSCENZE
# =========================
knowledge =
# =========================
# DOMANDE QUIZ
# =========================
quiz_questions = [
"Quando nacque Adriano Olivetti?",
"Chi era il padre di Adriano Olivetti?",
"Quali servizi offriva agli operai?",
"Che cos'era la Programma 101?",
"Qual era la visione sociale di Olivetti?",
"Cos'era l'Elea 9003?"
]
# =========================
# FUNZIONE GEMINI
# =========================
def chiedi_gemini(domanda):
prompt = f"""
Sei un assistente esperto di Adriano Olivetti.
Rispondi in modo semplice per uno studente.
Domanda:
"""
try:
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=prompt,
config=types.GenerateContentConfig(
thinking_config=types.ThinkingConfig(thinking_budget=0)
),
)
return response.text
except Exception:
return "Errore nel collegamento con Gemini."
# =========================
# TROVA RISPOSTA
# =========================
def trova_risposta(domanda):
domanda_lower = domanda.lower()
for categoria in knowledge.values():
for keyword in categoria["keywords"]:
if keyword in domanda_lower:
return categoria["response"]
return chiedi_gemini(domanda)
def pulisci_testo(text):
# Rimuove gli asterischi
text = text.replace("*", "")
# (opzionale) rimuove altri caratteri strani
text = re.sub(r"[#_~`]", "", text)
return text
# =========================
# FUNZIONE PER PARLARE
# =========================
def speak(text):
# Crea un file mp3 unico
filename = f"output_.mp3"
async def generate():
communicate = edge_tts.Communicate(text, "it-IT-DiegoNeural")
await communicate.save(filename)
# Blocca qui finché l'audio non viene generato
asyncio.run(generate())
# Blocca qui finché l'audio non viene riprodotto tutto
playsound(filename)
# =========================
# INVIA MESSAGGIO
# =========================
def invia():
user_input = entry.get()
if user_input.strip() == "":
return
chat_area.insert(tk.END, "Tu: " + user_input + "\n", "user")
risposta = trova_risposta(user_input) # TESTO ORIGINALE
risposta_voce = pulisci_testo(risposta) # SOLO PER VOCE
chat_area.insert(tk.END, "Bot: " + risposta + "\n\n", "bot")
chat_area.yview(tk.END)
entry.delete(0, tk.END)
window.update()
speak(risposta_voce) #
# =========================
# MODALITÀ INTERROGAZIONE
# =========================
def domanda_casuale():
domanda = random.choice(quiz_questions)
chat_area.insert(tk.END, "Bot (Interrogazione): " + domanda + "\n\n", "quiz")
chat_area.yview(tk.END)
speak(domanda) # legge anche la domanda
# =========================
# INTERFACCIA GRAFICA
# =========================
window = tk.Tk()
window.title("Chatbot Adriano Olivetti")
window.geometry("700x600")
chat_area = scrolledtext.ScrolledText(window, wrap=tk.WORD, font=("Arial", 12))
chat_area.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
chat_area.tag_config("user", foreground="blue")
chat_area.tag_config("bot", foreground="green")
chat_area.tag_config("quiz", foreground="red")
entry = tk.Entry(window, font=("Arial", 12))
entry.pack(padx=10, pady=5, fill=tk.X)
entry.focus_set()
entry.bind("", lambda event: invia())
send_button = tk.Button(window, text="Invia", command=invia)
send_button.pack(pady=5)
quiz_button = tk.Button(window, text="Fammi una domanda (modalità interrogazione)", command=domanda_casuale)
quiz_button.pack(pady=5)
window.mainloop()
