я. Есть ли лучший способ справиться с этим требованием?
Из того, что я помню, postText
- это просто способ вручную подключать и отправлять пользовательские входы к вашему боту Lex, вместо того, чтобы проходить через Facebook Messenger для пример. Так что postText
не обрабатывает никакого распознавания слотов, намерений или чего-то подобного. Это все сделано Лексом, а затем обработано с помощью Lambda.
Так что я бы предложил использовать sessionAttributes
, чтобы запоминать как last_question
, так и last_response
через несколько ходов. Затем снова используйте postText
, чтобы просто отправить большие пальцы вверх или вниз по рейтингу.
Затем лямбда распознает вход рейтинга как свой собственный слот и извлечет last_question
и last_response
из sessionAttributes
, а затем выполните сохранение и отслеживание рейтинговой системы по своему усмотрению.
Пример:
Пользователь : "... (Вопрос A) ... «
postText
передает вопрос А Лексу - Лекс получает вопрос А, интерпретирует намерение и слоты и передает Лямбде
- Лямбда получает вход, намерение и данные слота
- Лямбда сохраняет вопрос A в
sessionAttributes
как last_question
- Лямбда определяет ответ A - правильный ответ
- Лямбда сохраняет ответ A в
sessionAttributes
as last_answer
и переходит к Lex - Lex получает Ответ A от Lambda и отвечает пользователю Ответом A
Bot : ". .. (Ответ А) .... Пожалуйста, оцените этот ответ. "
- Ответ Lex поступил через выходной канал.
Пользователь : «Недурно».
postText
проходит. Недурно до Лекса. -> Лекс интерпретирует. Лямбда получает. - Лямбда сохраняет ввод пользователя как
user_rating
- Лямбда находит
last_question
и last_answer
в sessionAttributes
- Лямбда сохраняет
last_question
, last_answer
и user_rating
в базе данных - Лямбда стирает
last_question
и last_answer
с sessionAttributes
для повторного запуска. - Лямбда отвечает -> Лекс отвечает -> Выходной канал отображает ответ.
Бот : «Спасибо, пожалуйста, задайте еще один вопрос.»
ii. Как пользовательские слоты работают в одном запросе с несколькими сведениями, что я должен отправлять на lex?
Похоже, что у вас возникает путаница в том, что вы должны подготовить отформатированные данные перед отправкой в Lex внутри postText
, когда это намного проще, чем это. Просто передайте пользовательский ввод и позвольте Лексу разобраться в зависимости от того, как вы настроили намерения и слоты. Вот как это должно быть go для многослотового одиночного входа.
Lex получает пользовательский ввод в виде строки и пытается проанализировать строку на предмет намерений и слотов, ища наилучшие совпадения. Вы просто подготавливаете консоль Lex с намерениями и слотами, а также настраиваемыми слотами и значениями слотов, чтобы повысить точность ее соответствия.
Итак, предположим, вы знаете, что пользователь может предоставить один ввод с несколькими сведениями, которые вы хотели бы поймать например, отдельные слоты:
«Сколько времени в Нью-Йорке?»
Вы, вероятно, хотите уловить тип вопроса, поэтому у вас есть слот для определить, запрашивает ли пользователь «время», «погоду» или «население». Таким образом, они будут сделаны как один слот question_type
, с этими параметрами в качестве значений слотов.
Тогда вы также захотите узнать, о чем идет речь, чтобы у вас был другой слот, чтобы определить, спрашивал ли пользователь о «Нью-Йорк» или «Париж» или «Бангкок». Таким образом, они будут сделаны как один слот question_location
с этими параметрами в качестве значений слотов.
После того, как вы подготовите эти слоты и значения слотов в консоли Lex, вы также захотите подготовить Lex для этого типа. ввод, сужая, где в предложении Лекс, вероятно, найдет, какие слоты. Это были бы высказывания для этого намерения, помещающие имена слотов внутри фигурных скобок "{}":
что такое {question_type} в {question_location}
Тогда представьте себе больше способов и в разных порядках, которые пользователь может задать эти вопросы:
что {question_type} это в {question_location}
in {question_location} что такое {question_type}
Lex проанализирует вход и заполнит слоты тем, что было обнаружено в этой части вход. Затем в Lambda вы сравниваете слоты с тем, что ожидаете, и определяете лучший ответ.