un chatbot serveur de thé au lait pour le chinois, si vous ne connaissez pas encore rasa, référez-vous au mini rasa tutorial
ci-dessous
ou lisez la documentation officielle de rasa
vous devez télécharger bert_chinese_model et le décompresser d'abord : chinois_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
démarrer le serveur Bert
bert-serving-start -model_dir path/to/chinese_L-12_H-768_A-12/ -num_worker=1
passer au thé au lait
cd milktea
démarrer le serveur d'action
rasa run actions
former un modèle
rasa train
parlez à votre chatbot
rasa shell
vous pouvez commander 3 produits différents, d'autres peuvent être ajoutés pour vous modéliser
et choisissez 3 tailles
- Créer un nouveau projet
- Afficher les données de formation NLU
- Définir la configuration du modèle et écrire la première histoire
- Définir le domaine de portée de cette histoire
- Modèle de formation
- Testez l'assistant que vous avez écrit
Le chemin pointe vers un nouveau dossier vide cd path/to/a/blank/folder
Créez un nouveau projet rasa dans ce dossier rasa init --no-prompt
Les fichiers suivants seront générés dans le dossier :
__init__.py | Fichier vide utilisé pour le positionnement |
---|---|
actions.py | Utilisé pour définir des actions (code de script personnalisé) |
config.yml | Configurer NLU et les modèles principaux |
informations d'identification.yml | Détails pour la connexion à d'autres serveurs (pas couramment utilisés) |
données/nlu.md | Mes données d'entraînement NLU personnalisées |
données/histoires.md | Mes histoires personnalisées |
domaine.yml | Le domaine de l'assistant est domian |
points de terminaison.yml | Pistes connectées aux messages Facebook, etc. (pas couramment utilisés) |
modèles/ | Modèle et ses fichiers de paramètres |
cat data/nlu.md
Affiché comme suit
# # 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)杯
L'intention représente l'intention et doit commencer par ## et se terminer par une nouvelle ligne. Par exemple, deux intentions sont présentées ici : 1. Passer une commande, 2. Informer les spécifications du thé au lait. Toute la rhétorique que les clients peuvent utiliser doit être placée ici et utilisée pour le modèle nlu pour apprendre à comprendre ce qu'est un thé au lait. dit la personne.
L'entité [value](entity)
représente l'entité et la valeur représente la valeur spécifique de l'entité. Après l'entraînement, le modèle nlu peut renvoyer des variables similaires à celle-ci au modèle principal : {"type":"奶茶","size":"大"}
, afin que le modèle principal puisse répondre en conséquence en fonction des deux paramètres type
et size
.
config.yml
définira le module NLU précédent et les éléments Core que votre modèle utilisera. Cette fois, nous utilisons des composants écrits par des experts. Il est également fortement recommandé à tout le monde d'aller sur https://github.com/GaoQ1/. rasa_nlu_gqVoir les histoires écrites
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
La composition de l'histoire
##
indique le nom de l'histoire , un nom descriptif##
*
représentent l'intention de l'utilisateur intent{"entity1": "value", "entity2": "value"}
-
début indique les actions effectuées par le robot.Informations utilisateur
Actions
Il existe deux types d'actions
utter_xxx peut renvoyer directement les mots auxquels il faut répondre. Il vous suffit de l'expliquer dans domain.yml pour l'utiliser.
action_xxx peut effectuer les opérations personnalisées souhaitées. En plus d'être spécifié dans domain.yml, il doit également être ajouté dans le fichier aciton.py. Par exemple, vous souhaitez avoir une action personnalisée action_HelloWorld
Ajoutez d'abord cette action personnalisée à domain.yml sous acitons
actions:
- aciton_HelloWorld
Ajoutez ensuite une nouvelle classe dans le fichier acitons.py
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: "想要什么规格的呢?我们有中/大/特大杯"
dans
Parce que dans ce cas, notre action consiste simplement à envoyer des mots à l'utilisateur en guise de réponse. Ces actions simples sont toutes des actions commençant par utter_
. En fait, vous devez sélectionner une instruction dans les modèles. peut également en définir davantage. Pour plus d'actions, voir Custom Actions
Utilisez la commande suivante pour vérifier automatiquement les différences entre domaine/histoires/NLU et recycler le modèle. Le modèle entraîné sera horodaté comme le nouveau modèle rasa train
rasa shell