um chatbot de garçom de chá com leite para chinês, se você ainda não conhece o rasa, consulte o mini rasa tutorial
abaixo
ou leia os documentos oficiais da rasa
você precisa baixar bert_chinese_model e descompactá-lo primeiro: 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
iniciar servidor bert
bert-serving-start -model_dir path/to/chinese_L-12_H-768_A-12/ -num_worker=1
pule para o milktea
cd milktea
iniciar servidor de ação
rasa run actions
treinar um modelo
rasa train
fale com seu chatbot
rasa shell
você pode solicitar 3 produtos diferentes, mais podem ser adicionados para modelar você mesmo
e escolha 3 tamanhos
- Crie um novo projeto
- Ver dados de treinamento NLU
- Defina a configuração do modelo e escreva a primeira história
- Defina o domínio do escopo desta história
- Modelo de treinamento
- Teste o auxiliar que você escreveu
O caminho aponta para uma nova pasta vazia cd path/to/a/blank/folder
Crie um novo projeto rasa nesta pasta rasa init --no-prompt
Os seguintes arquivos serão gerados na pasta:
__init__.py | Arquivo vazio usado para posicionamento |
---|---|
ações.py | Usado para definir ações (código de script personalizado) |
configuração.yml | Configurar NLU e modelos principais |
credenciais.yml | Detalhes para conexão com outros servidores (não comumente usados) |
dados/nlu.md | Meus dados de treinamento NLU personalizados |
dados/stories.md | Minhas histórias personalizadas |
domínio.yml | O domínio do ajudante é domian |
pontos de extremidade.yml | Faixas conectadas a mensagens do Facebook etc. (não comumente usadas) |
modelos/ | Modelo e seus arquivos de parâmetros |
cat data/nlu.md
Exibido da seguinte forma
# # 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)杯
A intenção representa a intenção e precisa começar com ## e terminar com uma nova linha. Por exemplo, há duas intenções mostradas aqui: 1. Fazer um pedido, 2. Informar as especificações do chá com leite. Toda a retórica que os clientes possam usar deve ser colocada aqui, e usada para o modelo nlu para aprender como entender o que é um. pessoa diz.
[value](entity)
entidade representa a entidade e valor representa o valor específico da entidade. Após o treinamento, o modelo nlu pode retornar variáveis semelhantes a esta para o modelo principal: {"type":"奶茶","size":"大"}
, para que o modelo principal possa responder adequadamente com base nos dois parâmetros type
e size
.
config.yml
definirá o módulo NLU anterior e os elementos principais que seu modelo usará. Desta vez, usaremos componentes escritos por especialistas. Também é altamente recomendável que todos acessem https://github.com/GaoQ1/. rasa_nlu_gqVeja histórias escritas
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
A composição da história
##
indica o nome da história , um nome descritivo##
*
representam a intenção do usuário intent{"entity1": "value", "entity2": "value"}
-
início indica as ações realizadas pelo robô.Informações do usuário
Ações de ação
Existem dois tipos de ações
total_xxx pode retornar diretamente as palavras a serem respondidas. Você só precisa explicá-lo em domain.yml para usá-lo.
action_xxx pode executar as operações personalizadas desejadas. Além de ser especificado em domain.yml, ele também precisa ser adicionado no arquivo aciton.py. Por exemplo, você deseja ter uma ação personalizada action_HelloWorld
Primeiro adicione esta ação personalizada a domain.yml em acitons
actions:
- aciton_HelloWorld
Em seguida, adicione uma nova classe no arquivo 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: "想要什么规格的呢?我们有中/大/特大杯"
em
Porque neste caso, nossa ação é apenas enviar palavras ao usuário como resposta. Essas ações simples são todas ações que começam com utter_
. também poderádefinir mais Para mais acções veja Custom Actions
Use o comando a seguir para verificar automaticamente as diferenças em domínio/histórias/NLU e treinar novamente o modelo. O modelo treinado terá carimbo de data/hora como o novo modelo rasa train
rasa shell