Пропустить до содержимого

Как использовать библиотеку Python Transitions?

[

Переходы в ожидании состояния | Python

1. Chatbots 101 Free

В этой главе вы узнаете, как создать своего первого чатбота. Получив немного исторического контекста, вы настроите основную структуру для приема текста и ответа на пользователей, а затем узнаете, как добавить основные элементы индивидуальности. Затем вы построите базирующиеся на правилах системы для разбора текста. Подробнее о главе.

2. Понимание естественного языка

Здесь вы будете использовать машинное обучение для преобразования естественного языка в структурированные данные с помощью spaCy, scikit-learn и rasa NLU. Вы начнете с краткого повторения теоретических основ, а затем перейдете к созданию моделей, используя набор данных ATIS, который содержит тысячи предложений от реальных людей, взаимодействующих с системой бронирования авиабилетов. Подробнее о главе.

3. Создание виртуального помощника

В этой главе вы построите личного помощника, чтобы помочь вам спланировать поездку. Он сможет отвечать на вопросы вроде “есть ли дешевые отели на севере города?” путем поиска соответствующих результатов в базе данных отелей. Подробнее о главе.

4. Диалог

Все, что вы построили до сих пор, связывало намерения с действиями и ответами. Удивительно, как далеко вы продвинулись! Однако, чтобы создавать более сложные боты, всегда стоит добавлять некоторую состоятельность. Вы это сделаете здесь, создавая чатбота, который помогает пользователям заказывать кофе. Подробнее о главе.

Переходы в ожидании состояния

Часто вам может потребоваться временно отклониться от потока разговора, например, для проверки подлинности пользователя, прежде чем вернуться к теме обсуждения. В таких случаях часто проще и легче отлаживать сохранение некоторых действий/состояний в ожидании, а не добавлять все более сложные правила. Здесь вы будете определять словарь policy_rules, где ключи - это кортежи текущего состояния и полученного намерения, а значения - кортежи следующего состояния, ответа чатбота и состояния, для которого нужно установить ожидаемый переход.

policy_rules = {
('INIT', 'order'): ('AUTHED', 'What is your number?', 'AUTHED'),
('Ordering', 'number'): ('PLACED', 'Your order has been placed.', None),
('PLACED', 'order'): ('PLACED', 'Your order has already been placed.', 'PLACED'),
('END', 'order'): ('AUTHED', 'What is your number?', 'AUTHED'),
('END', 'number'): ('AUTHED', 'What is your number?', 'AUTHED'),
}

Здесь мы определяем правила для перехода из текущего состояния в следующие состояния, основываясь на полученных намерениях пользователя. Например, если пользователь находится в состоянии INIT и пытается сделать заказ, мы запрашиваем его номер и создаем ожидающий переход в состояние AUTHED.

def send_message(state, pending, message):
if pending is not None:
next_state, response, pending_state = policy_rules[(state, pending)]
else:
next_state, response, pending_state = policy_rules[(state, message)]
print('USER :', message)
print('BOT :', response)
return next_state, response, pending_state
state = 'INIT'
pending = None
state, response, pending = send_message(state, pending, 'order')
print('Next state:', state)
print('Pending:', pending)

Мы создали функцию send_message, которая принимает текущее состояние, ожидание и сообщение пользователя. Затем мы проверяем, существует ли ожидание, и в зависимости от этого выбираем следующие состояние, ответ чатбота и состояние для ожидаемого перехода.

Выполнив этот код, вы увидите ответ чатбота и информацию о следующем состоянии и состоянии ожидания.

Мы можем вызвать функцию send_message снова, передав вводные значения state, response и pending до получения окончательного ответа от чатбота.

Поздравляем!

Вы успешно научились использовать переходы в ожидании состояния в Python! Теперь вы можете более эффективно управлять разговорными ботами и создавать более сложные диалоги с пользователями.