Je vais d' abord répondre à la partie sur la façon dont je le fais : J'utilise un MongoDB. Je jouai avec les idées que vous avez mentionnés, mais rapidement biffé solutions en mémoire (Memcached, Redis) avec la même raison. Ma solution finale est descendu soit un DB relationnelle ou un NoSQL comme MongoDB. Pour être honnête, à l'échelle de mon projet, je ne pensais pas à comparer les performances entre les types robustement DB.
Avec ma caractéristique particulière « feuille de route », je décide d'aller avec Mongo d'approcher un style plus « POO » lorsqu'ils traitent avec l'utilisateur « objet » sans avoir à définir explicitement une classe d'utilisateurs, grâce à la structure normalisée de Mongo. Je comprends la même chose pourrait être fait pour MySQL, aussi, juste que le traitement des jsondonnées est plus « objet comme » pour moi et flask, ce user = getUserFromMongoqui me donne un dict en Python alors je peux le faire user['first_name']. Les codes belows expliquer cette simplicité:
(D'une certaine manière ce fut l'impression que ... ne pas avoir à écrire des commandes SQL pour une interaction simple base de données dans Rails)
Mon objet utilisateur des données sur MongoDB

Enfin, quant à la façon dont je gère l' entrée d'utilisateur , j'ai adopté le concept de Wit.ai de context. Je ne sais pas comment ils le font exactement, mais contextpour moi le type de fin de conversation qui se passe. Je l' utilise comme une pile, et dès que le contexte actuel est fait, pop hors les données de contexte de l'utilisateur. Pour chaque message que le bot reçoit, le programme aura le contexte actuel et de diriger le flux. Chaque fois qu'une erreur inconnue se produit (traitement des exceptions), très probablement parce que l'utilisateur dit quelque chose que le robot ne comprend pas, j'effacer les contextdonnées, aussi.
La bonne nouvelle à propos de MongoDB est que je peux façonner le contextmais je veux et le traiter comme un objet. Un simple est comme {name: yelp-search, stage:ask-for-user-location}, et j'imagine que les complexes pourraient être construits sur cette structure, aussi. Bien sûr, une implémentation de la pile de contextne traite pas de la conversation complexe avec référence complexe passé.
Je mets mon projet sur Github si vous voulez jeter un coup d' oeil.