Как недавний выпускник модной дочерней компании WeWork и Первоклассного учебного лагеря по программированию Flatiron School, в настоящее время я занимаюсь программированием в бесплатном коворкинге, изучая Python и Flask бесплатно от Линды с моей библиотечной карточкой. И есть предварительно упакованные салаты от Торговца Джо, подавая заявление (читай: попрошайничество) о приеме на работу.

Однако, возвращаясь к нескольким неделям назад, я пытался создать свой последний проект в школе через выгорание и решил, что хочу реализовать что-то действительно крутое, что я видел, как люди реализовывали в своих последних проектах: IBM Watson.

Теперь Watson - это суперкомпьютерная система обучения с искусственным интеллектом, созданная IBM для множества приложений в здравоохранении, образовании и даже рекламе. Как показано на картинке выше, даже без подключения к Интернету он ДОМИНИРОВАЛСЯ в Jeopardy. Однако его также можно использовать в качестве API для студентов и предприятий.

Другой программист, гений Сукрит Валиа, использовал Watson для категоризации новостных статей, чтобы решить, к какой категории они попадают, и затем ежедневно рассылал их в виде дайджеста по электронной почте. Я решил последовать примеру другого гениального программиста, который был моим старшим учеником в школе, Роба Мехиа, в создании чат-бота, использующего Watson для дополнения уже существующего приложения, так что именно об этом я и расскажу здесь.

Шаг 1. Зарегистрируйтесь в IBM Cloud-

Достаточно просто, просто зайдите и создайте бесплатную учетную запись в IBM.

Шаг 2: Ознакомьтесь с этим руководством по началу работы -

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

Шаг 3. Изучите концепции -

По сути, с Watson Assistant вы будете иметь дело с несколькими концепциями:

  1. Действия. Большинство функций Watson Assistant представляют собой гигантские инструкции if / else из языка программирования. Watson's Assistant отлично справляется с «нечетким соответствием», будучи способным определить, что одно введенное в него значение похоже на другое, чему он научился, но ему нужно знать, что делать с этими вводными данными. Действия - это то, что нужно делать, когда Watson получает определенный ввод.

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

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

У вас также будет что-то, называемое шагами, которое является формой вспомогательного действия. Если мы посмотрим на мою исходную фотографию действия, вы увидите, что мое действие для входа в систему ведет к двум различным возможностям. Мне нравится думать об этом как о модели типа выбери свое собственное приключение, где на основе выбора, сделанного читателем, пользователем или покупателем, происходит другая ветвь истории. Но что это за выбор и как Ватсон может это распознать?

2. Сущности- Чтобы Watson мог распознать, ввел ли пользователь что-то помимо начального действия, Watson использует нечто, называемое объектами. Это способ распознавания различных шаблонов или входных данных.

Выше приведен пример простого объекта для «Да», выраженного как «@yes». Как и в случае действия «логин», существует массив синонимов, которые Watson использует с «нечетким соответствием», чтобы определить, близко ли что-то к «да».

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

Потерянный? Я знаю, что был на этом этапе. Здесь я чувствовал себя уверенно с React / Redux в конце моего учебного курса, и я никогда не имел дела с регулярными выражениями. Мне повезло, что мой блестящий одноклассник Гриффин Пул был там, чтобы наставляйте меня в этом. В этой версии объекта я пытался обнаружить шаблон, включающий любую строку без пробелов, что и было моей базой данных Rails. в состоянии определить как имя пользователя. Но что я мог сделать с этим именем пользователя, если бы обнаружил его?

3. Контекст- К счастью, в Watson есть способ хранения переменных, известных как контекст, чтобы их можно было повторно использовать на протяжении всего жизненного цикла вашего приложения.

Выше у вас есть шаг, который следует после моего действия входа в систему. Вы можете видеть, что для него установлено условие «если», равное объекту в шаблоне регулярного выражения «имя пользователя». Если Watson может определить имя пользователя на основе заданного шаблона, он может сохранить его как переменную, а затем вернуть обратно.

Обратите внимание: вы увидите забавную нотацию для хранения переменной, которая может быть вам знакома, если вы работали с PHP (я не знал!). На самом деле это SPeL для Java, которого я, конечно, не знаю, но смог достаточно хорошо поискать в Интернете, чтобы понять его.

Важно то, что я смог сохранить переменную и использовать ее для доставки сообщения моему пользователю. Но давайте сделаем еще один шаг! Я хочу больше, чем просто хранить переменную локально в Watson! Я хочу связаться с моим внутренним сервером Rails для моего проекта и посмотреть, есть ли этот пользователь в моей базе данных, и для этого мне понадобится новый инструмент.

4. Webhooks - Watson не просто виртуальное существо само по себе, но может вызывать единственную конечную точку API (по крайней мере, в бесплатной версии) для выполнения запроса POST в рамках действия. или шаг.

Выше мы видим, что если я получаю объект @yes, я говорю Watson сделать запрос на мой веб-перехватчик. Ваш веб-перехватчик можно настроить в разделе Параметры, и он должен быть URL-адресом бэкэнда, который в настоящее время находится в Интернете, поэтому я бы порекомендовал, если вы все еще разрабатываете серверное тестирование Rails / Django. он использует ngrok, у которого есть бесплатный план, и у моего коллеги Хоуп есть хороший блог о том, как его использовать.

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

Шаг 4. Настройте серверную часть с помощью Watson-

Сначала я создал собственный маршрут в моем файле config / routes.rb моего приложения Rails, чтобы POST на http://myapp.com/watson отправлялся в WatsonController с методом под названием watson.

Затем я создал гигантский оператор if / else! Поскольку единственными параметрами, которые у меня были в моем запросе POST к единственной конечной точке в Watson, были параметры для сообщения, я знал, что могу сделать гигантский оператор if / else для маршрутизации того, что я хочу делать с моей базой данных и моделями ActiveRecord, учитывая, что данные отправлено и параметры.

Тем, кто говорит мне, я мог бы использовать изложение дела: заткнись, я тебя ненавижу! Но да, наверное, мог бы. Мне было комфортно делать это таким образом, поэтому я был здесь. Возвращаясь к нашему предыдущему примеру с Watson, когда мой шаг распознал объект @yes, он обратился к веб-перехватчику с пара ключ / значение params "логин", а затем переменная контекста "$ username".

Те, кто понимает Rails, могут видеть выше, что это мой первый случай для моего оператора if, и что он делает в случае наличия параметров входа в систему, так это то, что он проверяет базу данных, чтобы увидеть, есть ли там имя пользователя, а затем, если оно существует, возвращает имя пользователя в объекте JSON, иначе он выдает ошибку, которую мой Watson обрабатывает с помощью функции множественных ответов.

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

Это много бэкэнда, и для большинства чат-ботов вам понадобится прогрессивный цикл операторов if / else, сущностей, шагов и контекста переменные, чтобы создать динамический опыт для вашего пользователя, где они могут сохранять данные.

Вы также можете протестировать эти функции в любое время с помощью кнопки Попробовать, которая есть на большинстве консолей в пользовательском интерфейсе Watson Assistant.

Но для меня это было много, и я думаю, что дал вам основу для начала. Итак, как насчет того, чтобы интегрировать это в ваше приложение для реагирования?

Есть несколько интересных вещей, которые вы можете делать с виджетами чат-ботов и загрузками на ваш бэкэнд, подключая Rails API к Watson, но на тот момент в моем проекте это заняло у меня несколько дней, и я был просто выдохся. Так что же я сделал? Я СМУХЛЕВАЛ.

Шаг 5. Интеграция вашего Watson Bot с React-

Пробная версия IBM Cloud PLUS бесплатна в течение 30 дней, поэтому я ее использовал. Это позволяет вам использовать бета-версию обычного JS Web Bot! Использование этой опции фактически даст вам фрагмент, основанный на всей проделанной вами работе. Это будет выглядеть примерно так:

Выглядит неплохо! Но ждать! Если вы используете React и его виртуальный DOM, это приведет к тому, что JS-скрипты, которые вы импортируете из Watson, не будут работать, поскольку различные скрипты для вашего приложения загружаются асинхронно! Было бы неплохо, если бы был модуль React, который я мог бы импортировать для IBMWatson, но его нет, хотя для Node! Я не хотел переделывать все свое приложение, поэтому оно было на Vanilla JS! К счастью, мой сообразительный тренер Ники Довер смог научить меня, как интегрировать это в мое приложение.

Сначала я просто вставил тег скрипта src в верхнюю часть моего index.html, чтобы он загрузился как можно скорее.

Затем я поместил JS-функции, предоставляемые IBM, в начало своего проекта в App.js.

Я спрятал все свои значения, поддерживающие PWN, используя файл ENV, который я настоятельно рекомендую и использовал ловушку useEffect для загрузки функции IBM, когда мой компонент приложения монтировался вместе с моими выборками в бэкэнд.

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

И, наконец, как мне обновить React, когда я обновил свою базу данных с помощью Watson? Роберт Мехиа порекомендовал проверить push-уведомления и сервис-воркеров. В более ранней реализации Watson я думал об использовании ответа на сообщение от выборки через мое приложение Rails для выполнения условного рендеринга, но, в конце концов, я сделал что-то еще более глупое. Я это спрятал.

Я просто сделал так, чтобы, когда кто-то приходил проверять свои сохраненные экземпляры, на моем сервере в фоновом режиме выполнялась другая выборка, чтобы узнать, было ли обновление. Ленивый! Любительский. ФУНКЦИОНАЛЬНЫЙ.

Вот и все. Кто-то может назвать это неряшливым, ленивым или хромым, но на самом деле я не претендую на звание гения или идеального инженера по машинному обучению.

Я утверждаю, что являюсь собачником, который вообще не знал кода в июле 2019 года и, которому исполнилось 32 года, решил кое-что изучить и к январю 2020 года смог развернуть функциональный ИИ IBM Watson с полнофункциональным React / Redux. / Интеграция Rails в Интернет, где вы сами можете ею пользоваться! Я очень горжусь этим.

Если вы хотите проверить, как это выглядит или другие мои приложения, взгляните на мое портфолио или HMU в LinkedIn.

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

Это можжевельник, он же Джун, он же Юний. Она милашка, у нее длинный язык, она любит обниматься и целовать, хотя и скулит, если вы не даете ей угощения. Она заслуживает их, хотя с этим кудрявым хвостом.

Варф.