[Модуль] API.AI (apiai)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Вс мар 11, 2018 5:33 pm

olehs писал(а):Ну, почти так. Контексты - это скорей условия, при которых Интент вообще будет проверятся.
Можете прикрепить сюда ответы в JSON на запросы в test query?

p.s. Я там накосячил немного с получением имени терминала назад из ответа API.AI, потому может не работать уточнение на MajorDroid через ask, а будет делаться sayReply. Я кинул PR, но пока Сергей не принял.
На скрепке экспортированный агент из dialogflow под названием Radio.

А вот ответ приходящий от dialogflow с запросом на уточнение названия станции.
СпойлерПоказать

Код: Выделить всё

{
    "id": "7bdf0f50-f61e-412b-82e2-267631f4da9b",
    "timestamp": "2018-03-11T14:31:50.616Z",
    "lang": "ru",
    "result": {
        "source": "agent",
        "resolvedQuery": "включи радио",
        "action": "turn.on.radio",
        "actionIncomplete": false,
        "parameters": [],
        "contexts": [
            {
                "name": "name-station",
                "parameters": [],
                "lifespan": 5
            }
        ],
        "metadata": {
            "intentId": "06a11ce7-4259-48cd-926b-b6d630efed72",
            "webhookUsed": "false",
            "webhookForSlotFillingUsed": "false",
            "intentName": "Online radio"
        },
        "fulfillment": {
            "speech": "Чтение мыслей запланировано в следующей версии. Название станции какое?",
            "messages": [
                {
                    "type": 0,
                    "speech": "Назовите название станции."
                }
            ]
        },
        "score": 1
    },
    "status": {
        "code": 200,
        "errorType": "success",
        "webhookTimedOut": false
    },
    "sessionId": ".5a9cfbdd69454"
} 
Вложения
Radio.zip
(5.66 КБ) 122 скачивания
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Вс мар 11, 2018 5:45 pm

так в догонку, мысли вслух.
В одном акаунте может быть несколько Agent ов. У каждого свой api key.
Получается что Ваш модуль может, без изменения api key, пользоваться только одним Агентом.
Как то возможно средствами гугла в Cloud Platform или в самом DialogFlow пользоваться "соседними" агентами.
Может конечно это и лишнее, что скорее всего, но можно было бы разделять сложные диалоги на разные агенты как бы разные проекты папки или подпроекты ...

А так все будет в одной кучи. Хотя может это и лишнее.
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Вс мар 11, 2018 5:58 pm

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

По поводу Вашего агента - ну он работает, так как и должен. Например даже в консоли:
Я: включи радио
Оно: Чтение мыслей запланировано в следующей версии. Название станции какое?
Я: рекорд
Оно: Такой станции я не знаю
Я: рекорд
Оно: Где включить музыку?
Я: в зале
Оно: Приятного прослушивания

при этом возвращает
roomName = @roomName

У вас неправильно составлены интенты, точнее параметры. sys.any - это вообще на крайний случай.
Вам нужно завести список станций и комнат как Entity (см. мой пример выше) и тогда построить этот запрос можно на одном интенте.
За это сообщение автора olehs поблагодарил:
lanket (Пн мар 12, 2018 2:17 pm)
Рейтинг: 1.16%
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Вс мар 11, 2018 8:19 pm

olehs писал(а):Тогда будет непонятно, в какой агент слать запрос.
...
Ну да, согласен. Перемудрил лишнего.
olehs писал(а): ...
По поводу Вашего агента - ну он работает, так как и должен. Например даже в консоли:
Я: включи радио
Оно: Чтение мыслей запланировано в следующей версии. Название станции какое?
Я: рекорд
Оно: Такой станции я не знаю
Я: рекорд
Оно: Где включить музыку?
Я: в зале
Оно: Приятного прослушивания

при этом возвращает
roomName = @roomName
...
В какой консоле?
Если в консоли на dialogflow, то я и писал что там превосходно работает и диалог с уточняющие вопросами строиться.

А вот на стороне мажордомо получив ответ от dialogflow в виде уточняющего вопроса по идее Мажордомо должен вызвать распознование в рамках текущей сессии диалога и отправлять распознанный текст в dialogflow не как новая команда а как ответ на пришедший от dialogflow уточняющий вопрос. Причём первая команда которая приводит к диалогу с ИИ в лице dialogflow может быть и набита клавиатурой а не голосом, соответственно надо ждать ответа в диалоговом окне того терминала где была первоначальная команда.
olehs писал(а): ...

У вас неправильно составлены интенты, точнее параметры. sys.any - это вообще на крайний случай.
Вам нужно завести список станций и комнат как Entity (см. мой пример выше) и тогда построить этот запрос можно на одном интенте.
Спасибо, буду дальше разбираться.

Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Вс мар 11, 2018 8:31 pm

lanket писал(а): В какой консоле?
Если в консоли на dialogflow, то я и писал что там превосходно работает и диалог с уточняющие вопросами строиться.
Да, именно там. А по другому и быть не может: интент, который уточняет станцию, всегда будет спрашивать ее второй раз
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Вс мар 11, 2018 9:42 pm

olehs писал(а):
lanket писал(а): В какой консоле?
Если в консоли на dialogflow, то я и писал что там превосходно работает и диалог с уточняющие вопросами строиться.
Да, именно там. А по другому и быть не может: интент, который уточняет станцию, всегда будет спрашивать ее второй раз
Так в результате диалог не реализован?

К примеру я говорю:
'Включи радио максимум'
Во первых dialogflow должен уточнить название станции, так как его нет в списке. Во вторых спросить в какой комнате (терминале) включить.
И если диалоги не реализованны, то такой фокус не получится.
Получается я должен произнести полную фразу с правильным названием станции и терминала чтобы dialogflow передал МД команду на включение радио так как возможность уточнить не реализована.

Так вот я так и не понял реализовано или нет такие диалоги с dialogflow?
У меня например диалоги, в данном случае с применением context, не работают. В консоле dialogflow работает а из МД каждый отправленный текст в dialogflow воспринимается как новая команда. Хотя текст отправленный в dialogflow с терминала куда пришёл уточняющий вопрос должен восприниматься dialogflow как ответ на поставленный вопрос.

Блин не знаю как объяснить. Грубо :
Работает только так :
Голосовая/текстовая команда в МД - > dialogflow как новая команда - > в МД action с параметрами
Не работает, а хотелось бы :
Голосовая/текстовая команда в МД - > dialogflow как новая команда, но в данном случае интенту не хватило переменной- > в МД уточняющий вопрос в тот терминал откуда пришла первоначальная Голосовая/текстовая команда - > dialogflow получает ожидаемый ответ на уточняющий вопрос далее ((в случае если 'больше вопросов нет ' то - > в МД action с параметрами)|(в случае если не есть context или нет обязательных параметров то возвращаемся на пункт ранее где dialogflow отправляет в МД уточняющий вопрос с целью выяснить значение обязательного параметра)

То есть
текст - > ИИ - > команда
Работает

А
текст - > диалог с ИИ - > команда
У меня лично нет.

Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Вс мар 11, 2018 10:04 pm

МЖД тут ни при чем.
Вы неправильно строите интент. Вы мой пример смотрели? Там полноценный диалог с запросом радиостанции либо без запроса, если вы ее скажете сразу. И не нужны там никакие доп. контексты и все делается в одном интенте, т.к. в Вашей фразе нет диалога, а есть уточнение обязательных параметров.

Чтобы добавить туда запрос комнаты достаточно нажать кнопку send на rooms и два слова дописать в примерах фраз. Возможно, сначала придется еще добавить синонимов к названиям комнат.
1.png
1.png (38.92 КБ) 4115 просмотров
При такой схеме action будет вызываться каждый раз с имеющимися параметрами, но реагировать на него нужно только когда заданы и комната, и станция. Собственно, в предыдущем примере эту проверку в обработчике Action тоже видно.
За это сообщение автора olehs поблагодарил:
lanket (Пн мар 12, 2018 2:17 pm)
Рейтинг: 1.16%
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Пн мар 12, 2018 12:18 pm

olehs писал(а):...

Запрос на включение радио можно полностью обрабатывать на стороне сервиса. Список радиостанций можно передать в Entity.

Код: Выделить всё

$stations = SQLSelect('select ID, TITLE from ru101_stations');
$total = count($stations);
$entries = array();
for($i=0; $i<$total; $i++) {
 $entries[] = array(
  'value' => $stations[$i]['ID'], 
  'synonyms' => array($stations[$i]['TITLE'])
 );
}

$entity = array(
 'name' => 'radio-station',
 'entries' => $entries
);
Затем нажать на нем кнопку Send.
...
Поправь пожалуйста пост, чтобы другие не ломали голову почему не работатет
В конце не хватает строчки

Код: Выделить всё

return $entity;
За это сообщение автора lanket поблагодарил:
olehs (Пн мар 12, 2018 1:25 pm)
Рейтинг: 1.16%
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Пн мар 12, 2018 2:17 pm

Опа.
Только заметил отсутствие привязки терминала к помещению.
Ведь часть терминалов стационарны. Это телевизоры, всякие планшеты вмурованные в стенки, стационарные компы.
Не уж то ни разу никому не нужна была такая привязка.
То же радио, кстати заработало за что отдельное СПАСИБО, включи на кухне. Или тот же планшет какой либо на котором нажали кнопку включи свет должен знать сто он висит гдето чтобы включить свет там где он висит
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Пн мар 12, 2018 2:21 pm

Да, есть такое. Я давно себе завел класс Terminals и привязал терминалы к его объектам. Для дроидовских терминалов еще прикрутил удаленный вызов функций.
Ответить