Costruisci un chatbot con memoria: gestione della cronologia, personalità e istruzioni di sistema.
Nella guida sulle API hai inviato un singolo messaggio. Un vero assistente conversazionale deve "ricordare" cosa è stato detto prima: ogni nuova domanda va inviata insieme a tutta la cronologia precedente, perché il modello stesso non conserva memoria tra una chiamata e l'altra.
cronologia = [] def invia_messaggio(testo_utente): cronologia.append({"role": "user", "content": testo_utente}) risposta = client.messages.create( model="claude-sonnet-4-5", max_tokens=300, messages=cronologia ) testo_risposta = risposta.content[0].text cronologia.append({"role": "assistant", "content": testo_risposta}) return testo_risposta
Consiste semplicemente nel mantenere una lista crescente di messaggi (domande e risposte precedenti) da inviare a ogni nuova chiamata, così il modello "vede" tutto lo storico della conversazione.
Un'istruzione speciale, separata dai messaggi utente, che definisce il comportamento e la "personalità" dell'assistente per tutta la conversazione (es. "Rispondi sempre in modo formale e conciso").
Se vuoi che la conversazione sopravviva alla chiusura dello script, puoi salvare la cronologia su file (JSON, visto nella guida sui file) e ricaricarla all'avvio successivo.
Conversazioni molto lunghe possono superare il limite di token gestibile dal modello. Una tecnica comune è mantenere solo gli ultimi N messaggi, o riassumere periodicamente quelli più vecchi.
Un assistente avanzato può combinare la memoria conversazionale con il retrieval RAG visto nella guida precedente: a ogni domanda, recupera contesto rilevante e lo aggiunge, mantenendo comunque lo storico della chat.
Spunta ogni passaggio man mano che lo completi: sbloccherai l'attestato di questa guida al termine.
Esempio per il punto 1
cronologia = []
cronologia.append({"role": "user", "content": "Ciao, come ti chiami?"})
print(cronologia)
Esempio per il punto 2
def invia_messaggio(testo_utente, cronologia): cronologia.append({"role": "user", "content": testo_utente}) risposta = client.messages.create( model="claude-sonnet-4-5", max_tokens=300, messages=cronologia ) testo = risposta.content[0].text cronologia.append({"role": "assistant", "content": testo}) return testo, cronologia
Esempio per il punto 3
risposta = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=300,
system="Sei un assistente che risponde sempre con entusiasmo e in modo semplice.",
messages=cronologia
)
Esempio per il punto 4
import json with open("cronologia.json", "w") as f: json.dump(cronologia, f) with open("cronologia.json", "r") as f: cronologia_ricaricata = json.load(f)
Tocca ogni termine per vederne la definizione.
Crea un assistente con un system prompt che lo caratterizza come tutor di una materia a tua scelta. Fai una conversazione di almeno 4 scambi, verificando che ricordi il contesto dei turni precedenti.
Crea uno script che, all'avvio, ricarica la cronologia da un file JSON se esiste, altrimenti ne crea una vuota. Alla fine di ogni conversazione, salva la cronologia aggiornata su file.
Questo codice fa perdere la memoria all'assistente: a ogni nuovo messaggio si crea una lista messages vuota invece di riutilizzare la cronologia esistente. Spiega perché il modello sembra "non ricordare" nulla in questo caso.
Completa tutti i 5 passaggi della checklist per sbloccare il tuo attestato in PDF.