Dialogflow - Повторите последнее предложение (голос) для пожилого социального робота - PullRequest
1 голос
/ 22 января 2020

Я использую Actions-on-Google и Dialogflow для создания социального робота для пожилых людей.

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

Одним из способов было бы повторение намерений повторения в Dialogflow, но это довольно тяжело, поскольку:

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

Другим способом было бы использование контекста Dialogflow. Отправляя сообщение, вы также можете добавить это сообщение в контекст (например, вы можете назвать его «last_message»). После этого у вас может быть другое намерение, которое принимает в качестве входного контекста контекст «last_message» и, если оно запущено, использует значение, сохраненное в контексте, для его повторения.

  • Однако у меня все еще есть проблема, заключающаяся в том, что Мне нужно добавить контекст ко всем моим намерениям, которых много.

Кто-нибудь знает, как это сделать быстрее? 1025 *? Я нашел этот пакет, но он находится в JS, и он мне нужен Python: https://github.com/SysCoder/VoiceRepeater/pulls.

Как мне реализовать эту библиотеку VoiceRepeater? Помещаю ли я код в выполненную мной функцию выполнения «повтор» и сопоставил ее с намерением «повторить», которое отвечает на высказывания типа «Извините, не могли бы вы повторить»? Кроме того, где я могу установить библиотеку VoiceRepeater (код: npm установить Voice-Repeater --save)?

1 Ответ

2 голосов
/ 22 января 2020

Использование Followup Intents, вероятно, является неправильным способом сделать это. Как вы заметили, это слишком тяжело для более чем нескольких намерений. Это может быть полезно в определенных обстоятельствах, если вы хотите, чтобы «повторное» сообщение разъясняло ответ по-другому, но в целом оно не очень полезно. (Следует также отметить, что Followup Intents используют контексты, но не так, как описано ниже.)

Вам не нужно добавлять контекст в пользовательский интерфейс как часть исходящего контекста - вы должны установить это как часть вашего выполнения. Он будет включать параметр, который либо содержит именно то, что вы сказали, либо информацию, необходимую для воссоздания того, что вы сказали (возможно, в другой форме, если это уместно). В своем «повторном» намерении вы прочтете значение, которое вы сохранили в этом контексте, и снова отправите его в качестве вывода. Если вы используете SSML, вы можете wi sh изменить скорость или громкость, если это уместно.

Обновление на основе новых вопросов

The readme для VoiceRepeater содержит основы того, что вам нужно сделать, чтобы использовать его, но предполагает небольшое знакомство с Node. Но в целом, да, вы устанавливаете его так, как вы описываете, настраиваете Intent, который захватывает запросы на повторение и регистрирует функцию-обработчик (repeatLastStatement(app) в файле readme), которая обрабатывает Intent для отправки ответа через voiceRepeater.lastPromptWithPrefix().

Также может предположить, что вы используете версию 1 библиотеки действий на Google. Я не слишком углубился в код, но похоже, что он заменяет библиотечную функцию ask своей собственной, и я не уверен, насколько хорошо это работает с версией 2 библиотеки actions-on-google.

В отличие от Voice Repeater, мультивалютный режим не требует особой регистрации обработчиков, поскольку он пытается скрыть как можно больше шаблонов под крышками. Вам просто нужно определить ответы, которые вы, возможно, захотите использовать. Он использует схему контекста, которую я обрисовал выше, чтобы хранить ответы и делать их доступными, когда пользователь просит повторить их.

Нет видео о использовании multivocal , но простой пример включает в себя конфигурацию, иллюстрирующую, как настроить ответы для намерения «multivocal.repeat». Несмотря на то, что VoiceRepeater работает с библиотекой Actions-on-Google, Multivocal является полной заменой, предлагая более основанный на шаблонах подход к выполнению.

Однако ни один из них не поможет вам напрямую, если вы хотите реализовать его для Python. Но если вы посмотрите на источник для VoiceRepeater, вы сможете понять, как реализовать его самостоятельно в Python.

Бит ключа находится на строке 47 , где он сохраняет ответ в контексте. (Он также сохраняет ответ с префиксным сообщением.) Затем он вызывает исходную функцию, которая отправит ответ:

  app.setContext("last_prompt", 100,
    {
      "last_prompt": textToSpeech,
      "prefixed_last_prompt": repeatPrefix + lastStatement,
    });
  originalAsk(response);

Позже, при вызове lastPromptWithPrefix () , он использует содержимое контекста для отправки ответа.

  lastPromptWithPrefix() {
     return this.app.getContext("last_prompt") !== null
         ? this.app.getContextArgument("last_prompt", "prefixed_last_prompt").value
         : "um....I don't remember what I said!";
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...