Используйте многоязычную библиотеку для настройки повторного намерения в Dialogflow для VUI

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

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

  1. Создал намерение под названием «Повторить».
  2. Добавлены обучающие фразы для намерения
  3. Добавлено действие "multivocal.repeat".
  4. Включен вызов веб-перехватчика для этого намерения
  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);

Затем на вкладке «Выполнение» я хочу ввести функцию внутри вкладки «index.js» встроенного редактора и убедиться в «package.json», что мультивокальная библиотека установлена ​​и пригодна для использования. Пока что в моем package.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». Но где бы это установить? Я могу поместить это где-нибудь в index.js или packages.js?

Кроме того, в этом примере показан index.js код должен быть:

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

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

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


person DeMelkbroer    schedule 05.02.2020    source источник
comment
Вы уже видели базовое руководство по NPM? Он расскажет вам, как устанавливать пакеты, такие как многоязычные, с помощью командной строки. w3schools.com/nodejs/nodejs_npm.asp   -  person Jordi    schedule 05.02.2020
comment
Да, я видел их, но не думаю, что у меня есть командная строка, поскольку я использую встроенный редактор.   -  person DeMelkbroer    schedule 05.02.2020


Ответы (1)


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

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

Инструкции по использованию npm: если вы пишете выполнение локально, а не используете Редактор.

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

    "multivocal": "^0.14.0"

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

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

Как мне написать свой index.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;

Куда делись регистрация и функции обработчика намерений?

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

Multivocal.addIntentHandler( intentName, handlerFunction );

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

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

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

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

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

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

  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 раздел выше может содержать разделы ответа для каждого из ваших намерений по имени.

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

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

Намерение, показывающее, где настроить значение действия

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

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

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

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

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

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

person Prisoner    schedule 05.02.2020
comment
Я немного добавил к своему первоначальному вопросу. Итак, я думаю, что теперь мне следует добавить функцию под названием «repeat (agent)» во вторую часть вашего шаблона, которая использует библиотечную функцию multivocal.repeat, это правильно? Будет ли реализация выглядеть примерно так: developers.google.com/assistant/conversational/tips#nodejs? - person DeMelkbroer; 05.02.2020
comment
Вам не нужно добавлять реализацию - многоголосый в основном сделал это за вас. Смотрите обновления ответа. - person Prisoner; 05.02.2020
comment
Верно ли, что если вы используете: 'exports.dialogflowFirebaseFulfillment = Multivocal.processFirebaseWebhook;' вы не можете использовать 'exports.dialogflowFirebaseFulfillment = functions.https.onRequest ((request, response) = ›...'? У робота уже есть функции, реализованные таким образом, так что, возможно, использование мультивокала не самый простой способ в этом смысле. Может ли VoiceRepeater уйти в этом смысле? - person DeMelkbroer; 05.02.2020
comment
Это правильно. Как я уже упоминал выше и в других вопросах, multivocal - это библиотека, которая делает то же самое, что и выполнение диалога, поэтому она заменяет ее. Эти двое не работают вместе. Теоретически VoiceRepeater будет работать, но он был разработан для библиотеки actions-on-google v1 и потребует обширного переписывания для работы с библиотекой выполнения диалогового потока. Но методы, описанные там и на странице Действия в Google, на которую вы ссылались выше, могут быть применены, если вы решите не переключаться на многоязычный. - person Prisoner; 05.02.2020