Ich werde zuerst den Teil über beantworten, wie ich es mache: Ich benutze eine MongoDB. Ich habe mit den von Ihnen erwähnten Ideen gespielt, aber aus dem gleichen Grund schnell In-Memory-Lösungen (Memcached, Redis) durchgestrichen. Meine endgültige Lösung kam entweder zu einer relationalen DB oder zu einer NoSQL wie MongoDB. Um ehrlich zu sein, habe ich auf der Ebene meines Projekts nicht daran gedacht, die Performance zwischen DB-Typen zu vergleichen.
Mit meiner speziellen Funktion "Roadmap" entschied ich mich, mit Mongo einen "OOP" -Stil beim Umgang mit dem Benutzer "Objekt" zu erreichen, ohne eine Benutzerklasse explizit definieren zu müssen, dank der normalisierten Struktur von Mongo . Ich verstehe das gleiche könnte auch für MySQL getan werden, nur dass die Verarbeitung json
Daten ist mehr "Objekt-like" für mich und flask
, d. H. user = getUserFromMongo
, die mir ein Diktat in Python gibt dann kann ich einfach tun user['first_name']
. Die Codes belows werden diese Einfachheit erklären:
(Irgendwie fühlte sich wie ... nicht in Rails SQL-Befehle für die einfache Datenbank-Interaktion schreiben)
Meine Benutzerobjektdaten auf MongoDB
Schließlich, wie zu , wie ich Benutzereingabe verwalte, adoptierte ich Wit.ai-Konzept von context
. Ich weiß nicht, wie sie es genau machen, aber eine context
für mich ist die Art der Konversation Zweck, der vor sich geht. Ich benutze es wie einen Stapel und sobald der aktuelle Kontext fertig ist, öffne ihn aus den Kontextdaten des Benutzers. Für jede Nachricht, die der Bot erhält, erhält das Programm den aktuellen Kontext und leitet den Fluss. Immer wenn ein unbekannter Fehler auftritt (Ausnahmenbehandlung), lösche ich höchstwahrscheinlich die Daten context
, weil der Benutzer etwas sagt, was der Bot nicht versteht.
Der gute Teil über MongoDB ist, dass ich die context
gestalten kann, wie ich will und behandeln Sie es nur als ein Objekt. Ein einfacher ist wie {name: yelp-search, stage:ask-for-user-location}
, und ich kann mir vorstellen, dass auch komplexe auf dieser Struktur gebaut werden können. Natürlich befasst sich eine Stapelimplementierung der context
nicht mit einer komplexen Konversation mit einer komplexen Vergangenheitsreferenz.
I put my project on Github wenn Sie es sich ansehen möchten.
Das ist sehr ähnlich zu der Lösung, mit der ich endete. Ich habe mySQL anstelle von mongo benutzt (nur weil ich mehr damit vertraut bin und keine neuen Erfahrungen sammeln wollte). MongoDB wäre definitiv der richtige Weg. Ich auch Wit AI und wenn der Kontext der Antwort eine Frage beantwortet, die nicht beantwortet wurde, dann speichere ich das gegen den Benutzer. Vielen Dank für Ihre Antwort. Wird Ihren Code überprüfen :) – Stretch0