Используйте многоязычную библиотеку для настройки повторного намерения в Dialogflow для VUI - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь настроить мой VUI на повторение предложения в диалоге, когда его об этом попросят. Немного предыстории, я помогаю разработать социального робота для пожилых людей, поэтому повторение предложения является очень необходимой функцией. Я только начал работать над этим проектом, и предыдущий разработчик, ответственный за это, ушел и не доступен, также у меня нет опыта в Node.js.

. Я ищу использовать multivocal для это. Вот шаги, которые я сделал до сих пор:

  1. Создано намерение под названием «Повторить».
  2. Добавлены обучающие фразы для намерения
  3. Добавлен 'multivocal.repeat 'как действие
  4. Включен вызов webhook для этого намерения
  5. В Node.js добавлен' intentMap.set ('Repeat', repeat); ' к моей существующей карте intentMap
// Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('Game_Rock_Paper_Scissors - Result', game_stone_paper_scissors);
  intentMap.set('Game_Rock_Paper_Scissors - Result - yes', game_stone_paper_scissors_again);
  intentMap.set('Conversation tree', conversation_tree);
  intentMap.set('Question date', question_date);
  intentMap.set('Question time', question_time);
  intentMap.set('Music', music);
  intentMap.set('Repeat', repeat);

Далее, на вкладке «Выполнение», я хочу ввести функцию на вкладке «Индекс встроенного редактора». js »и убедиться в ее« пакете ». . json ', что многофункциональная библиотека установлена ​​и может использоваться. Пока в моем пакете есть несколько вещей: json

  "name": "dialogflowFirebaseFulfillment",
  "description": "This is the default fulfillment for a Dialogflow agents using Cloud Functions for Firebase",
  "version": "0.0.1",
  "private": true,
  "license": "Apache Version 2.0",
  "author": "Google Inc.",
  "engines": {
    "node": "8"
  },
  "scripts": {
    "start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
    "deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
  },
  "dependencies": {
    "actions-on-google": "^2.2.0",
    "firebase-admin": "^5.13.1",
    "firebase-functions": "^2.0.2",
    "dialogflow": "^0.6.0",
    "dialogflow-fulfillment": "^0.5.0"
  }
}

Итак, как мне установить библиотеку? В файле Read.me написано: «Вы можете установить его, используя npm install --save multivocal». Но где бы я это установить? Поместить ли я это где-нибудь в индекс. js или в пакеты. js?

Кроме того, в этом примере он показывает индекс. js код:

const Color = require('./color.js');
Color.init();

const Multivocal = require('multivocal');
exports.webhook = Multivocal.processFirebaseWebhook;

Должен ли я просто добавить это в конец моего индекса. js? Или это должно быть включено в функцию? Извините, что не так опытен в этом, но я надеюсь, что объяснил это ясно.

1 Ответ

4 голосов
/ 05 февраля 2020

Некоторые ответы по использованию мультивалюты с помощью встроенного редактора Dialogflow:

Как включить это в файл package.json?

Указания по использованию npm если вы пишете исполнение локально и не используете редактор.

Вам необходимо добавить эту строку в раздел dependencies:

    "multivocal": "^0.14.0"

и облачные функции Dialogflow / Firebase позаботится об импорте библиотеки. Вам не понадобятся библиотеки "actions-on-google", "dialogflow" или "dialogflow-выполнение", поэтому раздел может выглядеть примерно так:

  "dependencies": {
    "firebase-admin": "^5.13.1",
    "firebase-functions": "^2.0.2",
    "multivocal": "^0.14.0"
  }

Как мне напишите мой индекс. js?

Простой пример предполагает, что вы можете поместить свою конфигурацию и код в отдельный файл ("color. js" в примере). Поскольку вы не можете сделать это с помощью встроенного редактора, общий шаблон вашего кода будет выглядеть примерно так:

// Import the library on the first line, so you can call methods on it to setup your configuration
const Multivocal = require('multivocal');

// Your configuration and code go here

// Setup the webhook as the final line
exports.dialogflowFirebaseFulfillment = Multivocal.processFirebaseWebhook;

Где находится регистрация и функции Intent Handler go?

В отличие от библиотеки выполнения диалогового потока, многоязычный не использует явный intentMap. Он поддерживает себя один, поэтому для регистрации функции Intent Handler вы должны использовать что-то вроде

Multivocal.addIntentHandler( intentName, handlerFunction );

НО , имейте в виду, что функции обработчика также немного отличаются.

Что? Чем они отличаются?

Multivocal имеет множество вещей, которые обрабатываются с помощью конфигурации, а не кода. Таким образом, нет никакого прямого аналога вызова функции agent.add(), который вы имели бы с диалоговым потоком-выполнением или библиотекой actions-on-google.

Вместо этого ваша функция Intent Handler должна выполнять любую логи c вызовы базы данных или что-то еще, чтобы получить значения, которые будут использоваться в ответах, и сохранить их в среде. Каждый обработчик должен возвратить Обещание, содержащее среду.

Вы также должны установить конфигурацию для своего намерения - наиболее распространенным из которых является установка возможных шаблонов "Ответ". Самые простые шаблоны ответов просто включают текст и куда вставлять значения из окружения. Также рекомендуется запрашивать у пользователя, что он может делать дальше, поэтому мы можем настроить шаблон «Суффикс», который будет использоваться по умолчанию, или шаблон, используемый для указания c Intents, Actions или Outents.

Таким образом, если у вас был Intent с именем «color.favorite», и у вас было значение в среде, называемое «color» (которое ваш обработчик мог загрузить из базы данных), конфигурация для этого ответа в Engli sh может выглядеть что-то вроде этого. Он также включает суффикс по умолчанию, чтобы подсказать пользователю, что он может делать дальше.

  const config = {
    Local: {
      en: {
        Response: {
          "Intent.color.favorite": [
              "{{color}} is one of my favorite colors as well.",
              "Oh yes, {{color}} can be quite striking.",
              "I can certainly understand why you like {{color}}."
          ]
        },
        Suffix: {
          Default: [
            "What other color do you like?"
            "Tell me another color."
          ]
        }
      }
    }
  }

, и вы зарегистрируете эту конфигурацию с

  new Multivocal.Config.Simple( config );

Вы можете (и ожидаете) зарегистрироваться несколько конфигураций, хотя вы можете объединить их в один объект. Таким образом, приведенный выше раздел Response может содержать разделы ответов для каждого из ваших Интентов по имени.

Хорошо, но как мне обработать "повторное" намерение?

Все, что вам нужно , нужно , чтобы предоставить Intent, для которого «Action» установлено значение «multivocal.repeat» в интерфейсе Dialogflow, и для которого включен webhook. Так что-то вроде этого будет работать:

Intent illustrating where to configure the Action value

Multivocal уже зарегистрировал обработчик и конфигурацию, основанную на этом.

Если вы хотите изменить возможные ответы, вы можете добавить конфигурацию для действия «multivocal.repeat». Что может выглядеть примерно так:

const enRepeat = [
  "Sorry about that, let me try again.",
  "I said:"
];

const config = {
  Local: {
    en: {
      Response: {
        "Action.multivocal.repeat": enRepeat
      }
    }
  }
}

, а затем либо объединить эту конфигурацию с другими конфигурациями, которые вы написали, либо загрузить ее, как указано выше.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...