Получение имени пользователя без прямого запроса (Watson Assistant) - PullRequest
0 голосов
/ 29 апреля 2020

Я создаю чат-бота для развлечения и хочу реализовать что-то для сбора имени пользователя, но только если он говорит что-то вроде «меня зовут ...» или близко к этому; намерение дать имя будет исходить от пользователя, бот не будет запрашивать его, может быть, только предложит его. Вроде как в Google Assistant, я думаю. Таким образом, это может быть дано в любое время, когда пользователь хочет. Моя идея такова:

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

2nd использовать слоты и, если намерение обнаружено, сохранить его как переменную. До сих пор я справился.

3-й - это та часть, в которой я застрял, поскольку это всего лишь идея, и я не знаю, как мне это сделать. Это. Прежде чем сохранить весь текст как переменную, я хотел бы удалить часть, включенную в намерение ( мое имя ), и сохранить только оставшуюся часть в переменной. Так, например, пользователь говорит «меня зовут XXX» ; команда удаляет "мое имя" часть и сохраняет только "XXX" в $ name намерении.

Я не знаю, возможно ли это, так как я не знаю кодирования. Раньше я использовал какой-то особый синтаксис, например, прописную букву какой-то другой переменной, но я не знаю, как использовать редактор JSON.

Является ли моя идея жизнеспособной? Я не знаю, как я удалил соответствующую часть намерения и сохранил только оставшуюся часть как намерение. Не знаю, какой будет команда для этого, и где я бы это написал. Вы можете предложить что-то еще, если у вас есть идея. Последнее, я создал этот навык на португальском языке, поэтому нет доступа к сущности @ sys-person. Спасибо за чтение.

1 Ответ

0 голосов
/ 07 мая 2020

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

Использование намерений:

Когда намерение идентифицировано, бот снова спрашивает имя, сообщая пользователю, что он должен сказать только свое имя, Например, без «моего имени», затем сохраните весь ввод в переменной контекста, используя:

<? input.text ?>

Для встраивания таких логи c в слоты, вы, вероятно, должны будете использовать отступления.

Но это скучно для пользователя.

Использование сущностей:

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

<? input.text.substring(entities.name.location[1], input.text.length()) ?>

Entites будет «Меня зовут», «Люди зовут меня», «Меня зовут», «Я крещен» "," Я был крещен ".

Таким образом," Привет, меня зовут Густаво ", будет вырезано после окончания" моего имени ", что приведет к" Густаво ". Дополнительный ввод в начале игнорируется, но возникают проблемы с дополнительным вводом после имени. Кроме того, вам нужно определить больше «моих имен», подобных сущностей, вероятно, всех возможностей, которые потребуются при использовании намерений, потому что даже при нечетком сопоставлении при идентификации сущностей не учитывается синоним и аналогичные значения слов.

https://cloud.ibm.com/docs/assistant?topic=assistant-dialog-methods#dialog -методы-строки-подстроки

https://cloud.ibm.com/docs/assistant?topic=assistant-expression-language#expression -язык-доступ-объект

...