Вы не можете редактировать объект намерений, поэтому он делает то, что вы хотите сделать, сложно, но не невозможно.
В своем узле ответа добавьте переменную контекста, например $topic
. Вы заполняете это термином, который будет обозначать тему.
Тогда, если пользовательский вопрос не получен, вы можете проверить контекст темы и добавить его в новую переменную контекста. Эта новая переменная затем выбирается прикладным уровнем, чтобы повторно задать вопрос.
Пример:
User: tell me about the loyalty program
WA-> Found #Loyality-Define
Set $topic to "loyalty"
Return answer.
User: how to join
WA-> No intent found.
$topic is not blank.
Set $reask to "$topic !! how to join"
APP-> $reask is set.
Ask question "loyalty !! how to join"
Clear $reask and $topic
WA-> Found #Loyalty-join
$topic set to "loyalty"
Return answer
Теперь в последней ситуации, если даже с загруженным вопросом он не найден, очистка $ topic останавливает его зацикливание.
Еще одна вещь, которую нужно знать, это то, что если пользователь меняет тему, вы должны либо задать тему, либо очистить ее. Для предотвращения этого ковыряюсь в старых темах.
ПРИМЕЧАНИЕ: Вопрос был изменен, так что это технически другой вопрос. Оставляя предыдущий ответ ниже
Вы можете использовать объект intents[]
для анализа возвращаемых результатов.
Таким образом, вы можете проверить достоверность разницы между первым и вторым намерениями. Если они попадают в определенный диапазон, тогда вы можете принять меры.
Пример условия:
intents[0] > 0.24 && intents.[1] - intents[0] > 0.05
Проверяет, находятся ли два намерения в пределах 5% друг от друга. Пороговое значение 0.24
должно игнорировать второе намерение, поскольку оно, вероятно, упадет ниже 0.2
, что обычно означает, что намерение не должно выполняться.
Возможно, вы захотите поиграть с этим порогом.
Просто чтобы объяснить, почему вы это делаете. Посмотрите на эти две диаграммы. Во-первых, ясно, что задан только один вопрос. Второй график показывает, что два намерения близки друг к другу.
Для фактического действия лучше иметь закрытую папку (условие = false
). В этой папке вы ищете совпадения intents[1]
. Это снизит сложность в диалоге.
Если вы хотите что-то более сложное, вы можете использовать k-means на уровне приложений. Затем верните второе намерение на прикладном уровне, чтобы логика диалога начала действовать. Здесь есть пример .
Watson Assistant Plus также делает это автоматически с помощью функции устранения неоднозначности.