Статьи

Простой пример службы диалога Уотсона в Bluemix

С помощью службы IBM Watson Dialog в Bluemix разработчики могут создавать приложения с использованием естественного языка для автоматического ответа на вопросы пользователей, например, функций, помогающих пользователям сбросить свои пароли. Ниже приведен простой пример, демонстрирующий работу этого сервиса.

Через диалог пользователи могут ввести интересующую их тему, чтобы увидеть последние твиты с положительным или отрицательным настроением. Твиты принимаются через сервис Insights for Twitter .

dialogsimple

Диалог определяется через XML . Есть хорошее руководство, описывающее, как это работает. В моем примере я использую две переменные для хранения входных значений от пользователей. Посредством концепций вы также можете определять синонимы и использовать подстановочные знаки для реагирования на различные типы пользовательского ввода.

<?xml version="1.0" encoding="UTF-8"?>
<dialog xsi:noNamespaceSchemaLocation="WatsonDialogDocument_1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <flow>
        <folder label="Main">
            <output>
                <prompt selectionType="RANDOM">
                    <item>Hi, I'll show you the latest buzz around a topic of your choice. What topic are you interested in?</item>
                </prompt>
                <goto ref="getUserInput_2442994"/>
            </output>
            <output>
                <prompt selectionType="RANDOM">
                    <item>Bye</item>
                </prompt>
                <getUserInput id="getUserInput_2442994">
                    <search ref="folder_2442998"/>
                </getUserInput>
            </output>
        </folder>
        <folder label="Library">
            <folder label="Live Content" id="folder_2447777">
                <output>
                    <prompt selectionType="RANDOM">
                        <item>Alright. Open this URL to see the tweets: http://insights-search.mybluemix.net/api/1/messages/search?q={Topic}%20AND%20posted%3A2015-07-01%20AND%20sentiment%3A{Sentiment}</item>
                    </prompt>
                </output>
            </folder>
            <folder label="Live Content" id="folder_2442998">
                <input>
                    <grammar>
                        <item>*</item>
                    </grammar>
                    <action varName="Topic" operator="SET_TO_USER_INPUT"/>
                    <output>
                        <prompt selectionType="SEQUENTIAL">
                            <item>Are you interested in positive or negative tweets?</item>
                        </prompt>
                            <getUserInput>
                                <input>
                                    <grammar>
                                        <item>positive</item>
                                    </grammar>
                                    <action varName="Sentiment" operator="SET_TO">positive</action>
                                    <goto ref="folder_2447777"/>
                                </input>
                                <input>
                                    <grammar>
                                        <item>negative</item>
                                    </grammar>
                                    <action varName="Sentiment" operator="SET_TO">negative</action>
                                    <goto ref="folder_2447777"/>
                                </input>
                                <input>
                                    <grammar>
                                        <item>*</item>
                                    </grammar>
                                    <action varName="Sentiment" operator="SET_TO">nothing</action>
                                    <goto ref="folder_2442998"/>
                                </input>
                            </getUserInput>
                    </output>
                </input>
            </folder>
            <folder label="Storage"/>
        </folder>
        <folder label="Global"/>
        <folder label="Concepts">
            <concept>
                <grammar>
                    <item>positive</item>
                    <item>good</item>
                </grammar>
            </concept>
        </folder>
    </flow>
    <entities>
    </entities>
    <constants>
    </constants>
    <variables>
        <var_folder name="Home">
            <var name="Topic" type="TEXT"/>
            <var name="Sentiment" type="TEXT"/>
        </var_folder>
    </variables>
    <settings>
    </settings>
    <specialSettings>
    </specialSettings>
</dialog>

Для проверки вашего диалога есть инструмент диалога, который можно запустить либо локально, либо развернуть в Bluemix. Инструмент помогает тестировать диалог, а также обнаруживает синтаксические ошибки. Для развертывания вашего диалога вы можете использовать примеры приложений Java или Node.js.

Чтобы узнать больше, прочитайте документацию , документацию по API или попробуйте образец заказа пиццы онлайн .

В простом примере я отображаю только URL, который показывает твиты в формате JSON. Существует более продвинутый пример, который находит определенные фильмы на основе пользовательского ввода. Фильмы запрашиваются через REST API, предоставленный themoviedb.org. Для этого служба диалога возвращает JSON со всеми фильтрами в приложение Java.

<prompt selectionType="RANDOM">
   <item>"{Search_Now:"{Search_Now}", Recency:"{Recency_Preference}", Rating:"{Certification_Preference}", Genre:"{Genre_Preference}", Index:"{Current_Index}", Page:"{Page}"}"</item>
</prompt>

Когда служба диалога возвращает этот JSON в приложение Java , фильмы запрашиваются и возвращаются пользователю.

Conversation conversation = dialogService.converse(converseParams);
wdsMessage = StringUtils.join(conversation.getResponse(), " ");
processedText = matchSearchNowPattern(wdsMessage);
...
SearchTheMovieDbProxyResource tmdb = new SearchTheMovieDbProxyResource();
conversationPayload = tmdb.discoverMovies(UtilityFunctions.getPropValue(paramsObj, "Genre"),
   UtilityFunctions.getPropValue(paramsObj, "Rating"),
   UtilityFunctions.getPropValue(paramsObj, "Recency"),
   currentIndex, pageNum, nextSearch || newSearch);

Пост «  Простой пример службы диалога Уотсона» в Bluemix  впервые появился на Никласе Хайдлоффе .