Io prima di rispondere la parte su come lo sto facendo : sto usando un MongoDB. Ho giocato con le idee che hai menzionato, ma rapidamente attraversato soluzioni in-memory (Memcached, Redis) con lo stesso motivo. La mia soluzione finale è sceso a uno un DB relazionale o un NoSQL come MongoDB. Per essere onesti, a scala di mio progetto, non pensavo circa robusto confrontare le prestazioni tra i tipi di DB.
Con la mia caratteristica particolare "tabella di marcia", ho deciso di andare con Mongo di avvicinare uno stile più "OOP" quando si tratta con l'utente "oggetto" senza dover definire in modo esplicito una classe utente, grazie alla struttura normalizzata di Mongo. Capisco lo stesso potrebbe essere fatto per MySQL, anche, solo che l'elaborazione jsondei dati è più "oggetto-like" per me e flask, cioè user = getUserFromMongo, che mi dà un dict in Python allora posso solo fare user['first_name']. I codici belows spiegano questa semplicità:
(In qualche modo questa è stata la sensazione di ... non dover scrivere comandi SQL per una semplice interazione con i database in Rails)
Il mio utente i dati oggetto MongoDB

Infine, da quanto riesco input dell'utente , ho adottato il concetto di Wit.ai di context. Non so come lo fanno esattamente, ma una contextper me è il tipo di scopo conversazione che sta succedendo. Io lo uso come una pila, e non appena il contesto attuale è fatto, pop fuori i dati di contesto dell'utente. Per ogni messaggio il bot riceve, il programma otterrà il contesto attuale e dirigere il flusso. Ogni volta che un errore sconosciuto si verifica (gestione delle eccezioni), molto probabilmente perché l'utente sta dicendo qualcosa che il bot non capisce, a cancellare i contextdati, anche.
La buona parte di MongoDB è che posso plasmare il contextperò che voglio e trattarlo come un oggetto. Un semplice è come {name: yelp-search, stage:ask-for-user-location}, e immagino che quelli complessi potrebbero essere costruiti su quella struttura, anche. Naturalmente, un'implementazione dello stack del contextnon tratta con la conversazione complessa con riferimento passato complesso.
Ho messo il mio progetto su Github , se si vuole dare un'occhiata a questo.