Ein Milchtee-Kellner-Chatbot für Chinesisch. Wenn Sie Rasa noch nicht kennen, sehen Sie sich das mini rasa tutorial
unten an
oder lesen Sie die offiziellen Rasa-Dokumente
Sie müssen bert_chinese_model herunterladen und zuerst entpacken : chinese_L-12_H-768_A-12
git clone https://github.com/BI4O/rasa_milktea_chatbot.git
cd rasa_milktea_chatbot
pip install -r requirements.txt -i https://pypi.tuan.tsinghua.edu.cn/simple
Starten Sie den Bert-Server
bert-serving-start -model_dir path/to/chinese_L-12_H-768_A-12/ -num_worker=1
Springe zu Milchtee
cd milktea
Aktionsserver starten
rasa run actions
Trainiere ein Modell
rasa train
Sprechen Sie mit Ihrem Chatbot
rasa shell
Sie können 3 verschiedene Produkte bestellen, weitere können hinzugefügt werden, um selbst zu modellieren
und wählen Sie 3 Größen
- Erstellen Sie ein neues Projekt
- NLU-Trainingsdaten anzeigen
- Definieren Sie die Modellkonfiguration und schreiben Sie die erste Geschichte
- Definieren Sie den Geltungsbereich dieser Story-Story
- Trainingsmodell
- Testen Sie den von Ihnen geschriebenen Helfer
Der Pfad zeigt auf einen neuen leeren Ordner cd path/to/a/blank/folder
Erstellen Sie ein neues Rasa-Projekt in diesem Ordner rasa init --no-prompt
Die folgenden Dateien werden im Ordner generiert:
__init__.py | Leere Datei, die zur Positionierung verwendet wird |
---|---|
Aktionen.py | Wird zum Definieren von Aktionen verwendet (benutzerdefinierter Skriptcode) |
config.yml | Konfigurieren Sie NLU- und Kernmodelle |
Anmeldeinformationen.yml | Details zur Verbindung mit anderen Servern (nicht häufig verwendet) |
data/nlu.md | Meine benutzerdefinierten NLU-Trainingsdaten |
data/stories.md | Meine individuellen Geschichten |
domain.yml | Die Domäne des Helfers ist Domian |
endpoints.yml | Tracks, die mit Facebook-Nachrichten usw. verbunden sind (nicht häufig verwendet) |
models/ | Modell und seine Parameterdateien |
cat data/nlu.md
Wird wie folgt angezeigt
# # intent:order
- [奶茶](type)
- [咖啡](type)
- 我想要一杯[奶茶](type)
- 要杯[奶茶](type)
- 有[奶茶](type)吗
- 有[奶茶](type)卖吗
- 想要一杯[咖啡](type)
- 要杯[咖啡](type)
- 有[咖啡](type)吗
- 我想要一杯[卡布奇诺](type)
- 要杯[卡布奇诺](type)
- [卡布奇诺](type)
# # intent:inform_size
- [中](size)
- [中](size)的
- [中](size)杯
- [中](size)杯吧
- 要[中](size)杯
- [大](size)
- [大](size)的
- [大](size)杯
- [大](size)杯吧
- 要[大](size)杯
- [特大](size)
- [特大](size)的
- [特大](size)杯
- [特大](size)杯吧
- 要[特大](size)杯
Absicht stellt Absicht dar und muss mit ## beginnen und mit einer neuen Zeile enden. Hier werden beispielsweise zwei Absichten dargestellt: 1. Eine Bestellung aufgeben, 2. Die Spezifikationen von Milchtee mitteilen. Die gesamte Rhetorik, die Kunden möglicherweise verwenden, sollte hier platziert und für das NLU-Modell verwendet werden, um zu verstehen, was a Person sagt.
Die [value](entity)
stellt die Entität dar, und der Wert stellt den spezifischen Wert der Entität dar. Nach dem Training kann das NLU-Modell Variablen zurückgeben, die dem Kernmodell ähneln: {"type":"奶茶","size":"大"}
, damit das Kernmodell basierend auf den beiden Parametern type
und size
entsprechend reagieren kann.
config.yml
definiert das vorherige NLU-Modul und die Kernelemente, die Ihr Modell verwenden wird. Dieses Mal verwenden wir von Experten geschriebene Komponenten. Es wird außerdem dringend empfohlen, dass jeder zu https://github.com/GaoQ1 / geht. rasa_nlu_gqGeschriebene Geschichten ansehen
cat data/stories.md
# # order naicha
- order{ " type " : "奶茶" }
- slot{ " type " : "奶茶" }
- utter_ask_size
- inform_size{ " size " : "大" }
- slot{ " size " : "大" }
- utter_affirm
- confirm
- action_charge
- utter_goodbye
Der Aufbau der Geschichte
##
gibt den Namen der Geschichte an, einen beschreibenden Namen##
*
beginnen, stellen die Absicht des Benutzers dar intent{"entity1": "value", "entity2": "value"}
-
Anfang zeigt die vom Roboter ausgeführten Aktionen an.Benutzerinformationen
Aktionsaktionen
Es gibt zwei Arten von Aktionen
utter_xxx kann die zu beantwortenden Wörter direkt zurückgeben. Sie müssen es nur in domain.yml erklären, um es zu verwenden.
action_xxx kann die gewünschten benutzerdefinierten Vorgänge ausführen. Zusätzlich zur Angabe in domain.yml muss es auch in der Datei aciton.py hinzugefügt werden. Sie möchten beispielsweise eine benutzerdefinierte Aktion action_HelloWorld
haben
Fügen Sie diese benutzerdefinierte Aktion zunächst zu domain.yml unter acitons hinzu
actions:
- aciton_HelloWorld
Fügen Sie dann eine neue Klasse in der Datei acitons.py hinzu
class YourCustomAction ( Action ):
def name ( self ):
# 这个返回的值必须和stories.md和domain.yml中说明的一致
return "action_HelloWorld"
def run ( self , dispatcher , tracker , domain ):
# 定义这个动作要执行的你想要的操作
# 比如我想在对话中返回给用户的是HellowWorld!
dispatcher . utter_message ( 'HelloWorld!' )
return []
cat domain.yml
intents:
- greet:
triggers: utter_greet
- goodbye:
triggers: utter_goodbye
- confirm
- deny
- order
- thanks
- inform_size
- unknown_intent
actions:
- utter_greet
- utter_ask_order_what
- utter_ask_size
entities:
- type
- size
slots:
type:
type: text
size:
type: text
templates:
utter_greet:
- text: "你好"
utter_ask_order_what:
- text: "想要喝点什么? "
utter_ask_size:
- text: "想要什么规格的呢?我们有中/大/特大杯"
In
Denn in diesem Fall besteht unsere Aktion nur darin, Wörter als utter_
an den Benutzer zu senden. Bei dieser Art von Aktion muss der Assistent eine Anweisung in den Vorlagen auswählen, um zu antworten Sie können auch weitere Aktionen definieren. Weitere Aktionen finden Sie unter Custom Actions
Verwenden Sie den folgenden Befehl, um die Unterschiede in Domäne/Stories/NLU automatisch zu überprüfen und das Modell neu zu trainieren. Das trainierte Modell wird als neuer Modell rasa train
mit einem Zeitstempel versehen
rasa shell