IBM Watson Assistant: Как динамически установить целевой узел «перейти к» (т. Е. С помощью переменных контекста) - PullRequest
1 голос
/ 14 мая 2019

Я хочу перейти от узла диалога к узлу, идентификатор которого хранится в переменной контекста.

Я пытаюсь решить проблему, связанную с отступлением и описанную здесь:

Условно возврат от отступления в помощнике Ватсона

Особенно эта диаграмма визуализирует проблему:

По моему мнению, А.Х. поставил очень разумный и актуальный вопрос, на который не удалось найти жизнеспособного ответа.

Насколько я вижу, проблема не может быть решена с помощью настроек отступления. Либо узел корневого уровня (вызванный совпадением намерения # Want_to_speak_to_someone) установлен на «возврат после отступления», либо это не так.

Если настройка отступления этого узла отклонения установлена ​​на «возврат», он всегда будет возвращаться - независимо от того, что происходит дальше в диалоговом потоке этого отклонения. Даже если пользователь подтверждает, что хочет поговорить с человеком (то есть он не хочет возвращаться), диалог вернется к узлу, с которого началось отступление.

Это даже происходит, когда я прыгаю с да-узла (пользователь подтверждает, что он хочет поговорить с человеком) на любой другой узел. Как только ветвь (или ветвь, к которой перешел пользователь) заканчивается, диалог возвращается к узлу, с которого началось отступление.

Однако если для параметра отступления этого узла отклонения установлено значение «не возвращается», возврат невозможен - даже если пользователь решает не разговаривать с человеком и предпочитает вернуться туда, где он находился.

То, что А.Х. и я хочу, - это чтобы пользователь мог отступить от диалогового потока и все еще мог решить, хочет ли он вернуться или нет. Я думаю, что это довольно естественная и важная особенность диалога. Людям нравится отменять свое решение или, может быть, они даже непреднамеренно отвлекаются от заданного диалогового потока.

Akaykay предложил иметь два разных узла - «да-узел», который позволяет возвращать, и «нет-узел», который не позволяет возвращать. Но это не работает, потому что до этого у меня должен быть другой узел, который запрашивает у пользователя подтверждение - и этот «узел подтверждения» должен быть установлен либо на «возврат», либо на «не возврат» (что приводит к проблемам, описанным выше). ).

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

Это контекстная переменная


"context": {
        "last_node": "<? output.nodes_visited [0]?>",
        ...
      },

, который обновляется в каждом узле диалогового потока, который допускает отступление.

В этом примере я мог бы затем вернуться к $ last_node, если пользователь хочет вернуться, и я могу перейти к другому (фиксированному) узлу, если пользователь хочет поговорить с человеком - настройки отклонения 'узла отклонения' будут не вмешивается и может быть установлен как «не возвращается».

Затем я попытался отредактировать соответствующий узел (из которого можно вернуться к $ last_node) в файле json моего навыка:

"next_step": {
        "behavior": "jump_to",
        "selector": "user_input",
        "dialog_node": "$last_node"
      },

Но при повторном импорте файла skill-json я получаю следующее сообщение об ошибке:

Error - we could not import your skill. Can only contain word, underscore, space, ...

Я бы согласился с любым решением - тем, которое использует настройки отступления, или тем, которое позволяет динамически устанавливать целевой узел «Jump to». Я глубоко ценю любую помощь - спасибо!

1 Ответ

1 голос
/ 16 мая 2019

Если вы не хотите, чтобы Watson Assistant возвращался из отступления, просто вызовите функцию <? clearDialogStack() ?> в узле, где вы не хотите, чтобы Watson Assistant возвращался из отступления, и все.

На вашем графике вы должны написать "Ok, click here. <?clearDialogStack()?>" в выходном тексте узла "Хорошо, нажмите здесь".и это должно сработать.

Вот в документе в этом разделе: https://cloud.ibm.com/docs/services/assistant?topic=assistant-dialog-runtime#dialog-runtime-digressions

Также обратите внимание, что в настоящее время невозможно создать динамические gotos с помощью Watson Assistant,Единственное, что вы можете сделать, это создать диалоговый узел со всеми необходимыми gotos, обусловленными чем-то под ним, и тогда вы перейдете к этому узлу.Это трудно создать вручную, но оно может быть сгенерировано автоматически.Для большего волшебства с WA проверьте этот проект:

https://github.com/IBM/watson-assistant-workbench

Можно разработать чат-ботов с WA полностью без UI.

...