Pular para o conteúdo

Como usar python transitions para criar transições de forma fácil?

[

Transições de estado pendentes em Python

Neste tutorial Python, vamos explorar as transições de estado pendentes em chatbots. Você aprenderá como implementar essa funcionalidade passo a passo, com exemplos de código executáveis e explicações detalhadas.

O que são transições de estado pendentes?

As transições de estado pendentes permitem que um chatbot interrompa brevemente o fluxo de uma conversa para realizar alguma ação antes de retornar ao tópico em discussão. Isso pode ser útil, por exemplo, para autenticar um usuário antes de prosseguir com o diálogo.

Definindo as regras de política

Para implementar as transições de estado pendentes, vamos criar um dicionário chamado policy_rules. As chaves deste dicionário serão tuplas do estado atual e a intenção recebida, e os valores serão tuplas contendo o próximo estado, a resposta do bot e um estado pendente para transição.

policy_rules = {
('INIT', 'order'): ('AUTHED', 'Please provide your number.', 'PENDING_AUTH'),
('AUTHED', 'cancel'): ('INIT', 'Your order has been cancelled.', None),
# Outras regras de política aqui
}

Neste exemplo, se o usuário estiver no estado inicial (‘INIT’) e tentar fazer um pedido (‘order’), o bot deve solicitar o número do usuário e criar uma transição pendente para o estado de autenticação (‘AUTHED’). Observe que a única regra de política que cria uma transição pendente é a primeira, as outras têm um valor de estado pendente igual a None.

Implementando as transições de estado pendentes

Para adicionar as transições de estado pendentes ao nosso chatbot, vamos modificar a função send_messages().

def send_messages(messages):
state = 'INIT'
pending = None
for message in messages:
intent = get_intent(message)
if (state, intent) in policy_rules:
next_state, response, pending_state = policy_rules[(state, intent)]
if pending_state:
pending = pending_state
state = next_state
print(response)
else:
print("I'm sorry, I don't understand.")
return state, pending

Nessa implementação, a cada mensagem recebida, verificamos se a combinação de estado atual e intenção está presente no dicionário policy_rules. Se estiver, atualizamos o próximo estado, a resposta do bot e o estado pendente (caso seja necessário). Se o estado pendente não for nulo, armazenamos esse valor na variável pending.

Exemplo completo

Aqui está um exemplo completo que utiliza as transições de estado pendentes em um chatbot:

policy_rules = {
('INIT', 'order'): ('AUTHED', 'Please provide your number.', 'PENDING_AUTH'),
('AUTHED', 'cancel'): ('INIT', 'Your order has been cancelled.', None),
# Outras regras de política aqui
}
def send_messages(messages):
state = 'INIT'
pending = None
for message in messages:
intent = get_intent(message)
if (state, intent) in policy_rules:
next_state, response, pending_state = policy_rules[(state, intent)]
if pending_state:
pending = pending_state
state = next_state
print(response)
else:
print("I'm sorry, I don't understand.")
return state, pending
# Exemplo de uso
messages = [
"I would like to place an order.",
"1234567890", # Número para autenticação
"cancel", # Intenção de cancelar o pedido
]
state, pending = send_messages(messages)
print("Current state:", state)
print("Pending state:", pending)

Este exemplo simula uma conversa em que o usuário faz um pedido, fornece um número para autenticação e em seguida cancela o pedido. O estado atual e pendente são impressos no final.

Conclusão

Neste tutorial, você aprendeu como implementar transições de estado pendentes em chatbots utilizando Python. Adicionando essa funcionalidade, você poderá criar bots mais sofisticados e interativos. Continue explorando as possibilidades do Python para aprimorar suas habilidades no desenvolvimento de chatbots.