Skip to content

Uso de slots e entidades

Matheus Miranda edited this page Mar 22, 2019 · 5 revisions

Uso de Slots

Os Slots funcionam como a memória do Bot. As informações dos slots serão armazenadas na forma de pares de chaves-valores.

Os Slots podem ou não influencia na tomada de decisões do bot, de acordo com o seu tipo.

O tipo text pode ser utilizado para coleta de informações diretas do usuário, por exemplo para pegar o nome de uma cidade, de um local, o CPF do usuário, etc. Para este tipo, durante o fluxo de conversa, só é possível saber quando o slot foi preenchido ou não.

Os tipos categorical ou bool devem ser usado quando o valor em questão é importante para tomada de decisões.

Em casos onde se quer apenas armazenar dados mas não se espera que o slot afete o fluxo de conversação, deve-se utilizar o tipo unfeaturized.

Configuração dos Slots

Para utilizar um slot é preciso incluí-lo no arquivo domain.yml, dentro de uma tag de slots:

slots:
  pronac:
    type: unfeaturized

Dentro das intents deve-se definir exemplos de entities, que terão seu valores preenchidos de acordo com o slot correspondente:

## intent:pronac
- meu pronac é [1234567](pronac)
- [98765](pronac)
- [098778](pronac)
- [97656](pronac)
- [1234567](pronac)
- o número do pronac é [6556789](pronac)
- o pronac do meu projeto é [093596](pronac)
- meu numero de pronac é [9104835](pronac)
- o pronac é [92749502](pronac)
- me fale sobre o projeto do pronac [0927493](pronac)
- quero saber do projeto [0439582](pronac)
- me fale sobre o projeto do pronac [029385](pronac)

Acessando e alterando valores dos Slots

Quando o slot é preeenchido, seu valor pode ser acessado dentro das Actions através do tracker. Ex:

class ActionInformacaoProjeto(Action):
  def name(self):
    return "informacao_projeto"

  def run(self, dispatcher, tracker, domain):
    pronac = tracker.current_slot_values()['pronac']

Definindo o valor de um Slot a partir de uma Custom Action

from rasa_core_sdk.actions import Action
from rasa_core_sdk.events import SlotSet
import requests

class ActionTipoDeProjeto(Action):
    def name(self):
        return "tipo_de_projeto"

    // Descobrir tipo de porjeto
    def run(self, dispatcher, tracker, domain):
        url = "http://projetos.com"
        data = requests.get(url).json
        return [SlotSet("tipo_de_projeto", data["tipo_de_projeto"])]

Definindo comportamento do bot de acordo com o Slot

Uma vez que os valores possíveis para um slot foram definidos no domain, deve-se escrever exemplos de caminhos a serem seguidos de acordo com o valor captado. Ex:

# story_01
* cumprimentar
  - action_tipo_de_projeto
  - slot{"tipo_de_projeto" : "tipo_1"}
  - utter_projeto_tipo_1

# story_02
* cumprimentar
  - action_tipo_de_projeto
  - slot{"tipo_de_projeto" : "tipo_2"}
  - utter_projeto_tipo_2

Tipos de Slots

  • Text
Referências:
Clone this wiki locally