А у меня тем временем есть более абстрактный вброс для этой хмурой пятницы.
Поделитесь, пожалуйста, кто какие диалоговые менеджеры использует для goal-oriented навыков/ботов?
За время работы в Алисе я привык к примерно следующему стеку (он неплохо описан в
посте авторства Бори Янгеля):
- Запрос пользователя, как он есть;
- Разобранный запрос с выделенным интентом, слотами и сущностями - то, что лингвисты называют
semantic frame, а в API Яндекс.Диалогов называется
формой;
- "Состояние диалога" в виде мешка переменных (его тоже можно называть формой). Помимо слотов из запроса, там есть слоты, унаследованные из предыдущего диалога, притянутые из профиля пользователя или из внешних источников;
- ???
- Интерфейс, посылающий запросы в ручки тех сервисов, которые собственно и делают вашего бота полезным, и передающий их ответы в бота;
- Профит.
И вот что именно должно быть на месте знаков вопроса - не очевидно.
В Алисе в большинстве сценариев используется нехитрый dialog manager, который или сразу выдаёт ответ, определяемый текущим интентом, или дозапрашивает необходимые слоты (типа "куда вы хотите поехать?").
Проблема в том, что иногда для заполнения слота нужно выполнить отдельную цепочку действий. В Алисе, например, может состояться такой диалог:
- Вызови такси
- Куда вы хотите поехать?
- Домой
- А где находится дом?
- Красная площадь 1
- Ваш адрес - Красная площадь дом один, верно?
- Да
- Заказываю от адреса 3-я улица Строителей дом 25 до адреса Красная площадь дом 1, стоимость 350 рублей...
В этом примере сценарий запоминания адреса "вложен" в сценарий заказа такси. И вот в общем случае может существовать целый стек таких вложенных задач, необходимых для решения основной задачи. А плюс к основной задаче, у бота могут быть дополнительные - например, втюхать юзеру какую-нибудь услугу или собрать с него какой-нибудь фидбек. И отвлекаясь на вспомогательные задачи, надо не забывать про основную, и по возможности - про дополнительные.
И теперь собственно вопрос: как вы управляете задачами бота, когда их становится больше, чем одна?
Если вы пользуетесь готовым фреймворком для этого, будет клёво, если поделитесь текстом/видосом, где он разбирается.
Если вы накодили какой-то свой удачный велосипед, будет особенно любопытно послушать рассказ про его принципы 🙂