Chatbot do kontroli zasobów

Oct 29 2020
W tym artykule tworzę chatbota do kontroli zasobów jako zabawny mały projekt. Czemu? Ponieważ od jakiegoś czasu chciałem zaimplementować chatbota - choćby po to, by zrozumieć, jak to zrobić - i robienie tego w domenie AC wydaje się po prostu naturalne.

W tym artykule tworzę chatbota do kontroli zasobów jako zabawny mały projekt. Czemu? Ponieważ od jakiegoś czasu chciałem zaimplementować chatbota - choćby po to, by zrozumieć, jak to zrobić - i robienie tego w domenie AC wydaje się po prostu naturalne. Zintegruję go również ze Slackiem, aby zobaczyć, jak to pasuje do moich już istniejących narzędzi i przepływu pracy.

Chatbot do czego?

Do tej pory spotkasz chatboty w wielu miejscach. Mogą znajdować się na stronach firmowych i pomagać w uzyskaniu odpowiedzi na często zadawane pytania, umożliwią dokonywanie rezerwacji itp.

W tym przypadku chcę zaimplementować prototyp chatbota do integracji ze Slackiem, który pozwoli mi komunikować się z Asset Control. Mogę poprosić o informacje o stanie mojego środowiska AC lub o dane.

Aby pokierować implementacją, użyłem następujących pytań, na które bot powinien być w stanie odpowiedzieć:

  • Jaka jest ostatnia cena za XYZ?
  • Jakie było w tym miesiącu maksimum dla XYZ?
  • Ilu podejrzanych dzisiaj?
  • Czy replikacja jest aktualna?

Czy więc wdrażamy bota od zera? Oczywiście nie. Istnieje wiele rozwiązań i szybko zdecydowałem się na Google Dialogflow. Zobaczmy, jak to działa.

Budowanie bota w Dialogflow

Aby zbudować naszego bota w Google Dialogflow , musimy zrozumieć kilka pojęć:

  • Intencje
  • Podmioty
  • Spełnienie

Zamiar obejmuje wszystko, co należy do określonego wąsko zdefiniowanego tematu, którym bot powinien się zająć. W naszym przypadku jest to pobranie ostatniej dostępnej ceny towaru z naszego systemu. Użyjemy Dialogflow, aby wyszkolić bota, aby rozumiał, kiedy rozmowa dotyczy takiego zamiaru, podając mu frazy szkoleniowe. Zobaczymy to za minutę.

Następnie byty są elementami składowymi, które składają się na naszą rozmowę i są szczególnie interesujące, abyśmy chcieli je wyłapać jako parametry. W naszym przypadku byłby to symbol giełdowy AAPL, gdy zadajemy pytanie „Jaka jest ostatnia cena AAPL?”

Wreszcie koncepcja realizacji pozwala nam dotrzeć do usług z tyłu chatbota za pośrednictwem webhooków. Oznacza to, że będziemy komunikować się z Asset Control, aby zapytać o dane akcje i pobrać ostatnią dostępną cenę.

Teraz stwórzmy naszego bota.

Krok 1: Skonfiguruj swojego bota.

Zmierzać do https://dialogflow.cloud.google.com/#/login i zaloguj się. Następnie utwórz agenta AcChatBot:

Krok 2: Utwórz jednostkę Stock

W menu po lewej stronie kliknij Plus obok Encje, nazwij go Zasoby i wpisz [A-Z][A-Z0-9]{1,6}jako wyrażenie regularne. Chociaż nie jest to całkowicie dopasowanie dla symboli giełdowych, jest wystarczające dla naszego przykładu i działa z kontrolami wyrażeń regularnych przeprowadzanymi przez sam Dialogflow (np. Niezbyt szerokie itp.). Następnie zapisz to.

Krok 3: Utwórz ostatnią docelową cenę

Czas na naszą ostatnią zamierzoną cenę. Ponownie, z menu po lewej stronie wybierz Plus obok Intencji, wywołaj go Last pricei kliknij DODAJ ZWROTY TRENINGOWE:

Wejdź What is the last price for AAPL?. Następnie zaznacz AAPLmyszką. Spowoduje to wyświetlenie wyskakującego okienka. Wyszukaj Stock, a następnie wybierz prezentowaną opcję:

Jeśli zrobisz to dobrze, wynik będzie wyglądał następująco, aby upewnić się, że Dialogflow poprawnie przechwytuje jednostkę Stock:

WAŻNY! Następnie przewiń w dół, otwórz sekcję Fulfillment, kliknij Enable Fulfillment, a następnie przełącz, aby Enable webhook call for this intentpolubić:

Dzięki temu możemy wywołać własną funkcję zaplecza i komunikować się z kontrolą zasobów.

Pamiętaj, aby zapisać intencję, zanim przejdziesz dalej.

Krok 4: Zaimplementuj usługę REST, aby pobrać dane kontroli zasobów

Ponownie, można to zrobić na wiele sposobów. Będziemy używać Spring Boot, ponieważ wykonuje on dla nas wszystkie ciężkie prace i pozostajemy w Javie, dzięki czemu możemy natychmiast skorzystać z tego samego interfejsu API Java do kontroli zasobów, którego używa Adetta .

Jeśli jeszcze tego nie wiesz, Adetta to nasze oprogramowanie do automatyzacji testów dla kontroli zasobów. Upewnij się, aby rzucić okiem na wstępie do Adetta tutaj .

Ciekawostką jest klasa AcBotControlleri jej handleIntentmetoda, jak pokazano poniżej:

Możesz zobaczyć, że element webhook dla realizacji Dialogflow obsługuje żądanie POST. Zarówno dane wejściowe, jak i wyjściowe to JSON. Używamy GoogleCloudDialogflowV2Webhook*klas do obsługi zarówno żądania, jak i odpowiedzi w formacie JSON za nas.

Faktyczna obsługa intencji jest przekazywana do obiektu AcBotIntentHandler, który otrzymujemy w wyniku wywołania AcBotIntents.getHandlerFor(request). Spójrzmy na tę klasę:

Tworzymy mapowanie intencji na procedury obsługi (pamiętasz nasz Last pricezamiar?) I implementujemy metodę pobierania odpowiedniej procedury obsługi, biorąc pod uwagę intencję zakodowaną w obiekcie żądania. Definiujemy również domyślną procedurę obsługi na wypadek, gdybyśmy nie mogli znaleźć rzeczywistej obsługi:

Teraz, aby uzyskać naszą ostatnią cenę dla danej akcji, spójrzmy na AcBotLastPriceIntentHandler:

Widzisz, jak pobieramy nasz parametr jednostki Stock z obiektu żądania za pomocą, request.getQueryResult().getParameters().getOrDefault("Stock", "")a następnie wywołujemy, getLastPriceMessageForStockjak pokazano tutaj:

Chronimy się przed brakiem wartości zapasów. W przeciwnym razie przeglądamy nasz system kontroli aktywów pod kątem akcji z podanym tickerem. Jeśli nie mamy takiego ADO, wyświetlamy odpowiedni komunikat. W przeciwnym razie nadal będziemy pobierać dane cenowe dla każdego znalezionego obiektu ADO (chociaż powinien to być tylko jeden obiekt ADO, implementacja zwróci w razie potrzeby wiele komunikatów).

Oto jak znajdujemy ostatnią cenę:

Wczytujemy czasy ADO, pobieramy ostatni rekord i - jeśli jest obecny - tworzymy wiadomość, która zostanie odczytana jako The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00. I znowu chronimy się przed przypadkami, w których nie możemy znaleźć ceny.

Za pomocą Spring Boot możemy to uruchomić i uruchomić naszą usługę REST na localhost: 8080 / ac-bot. Co następne?

Cóż, oczywiście trochę oszukujemy, ponieważ nigdzie nie wdrażamy tej usługi, więc aby udostępnić ją z zewnątrz, użyjemy ngrok do skonfigurowania dla nas tunelu:

Krok 5: Skonfiguruj własny webhook realizacji

Następnie musimy powiadomić Dialogflow, gdzie jest nasza usługa REST, więc wróć tam i kliknij Realizacja z menu po lewej stronie:

Następnie wprowadź https://...adres podany przez ngrok i upewnij się, że dodałeś /ac-botna końcu.

Ok, chwila prawdy. W prawym górnym rogu, gdzie jest napisane Try it now, możemy wpisać What is the last price for AAPL?i jeśli wszystko działa poprawnie, powinniśmy otrzymać następującą odpowiedź:

To ekscytujące!

Krok 6: Zintegruj naszego chatbota ze Slackiem

Teraz nie zamierzamy dalej używać konsoli Dialogflow do zabawy z naszym botem. Zamiast tego zintegrujemy go ze Slackiem. Wybierz Integrations z menu po lewej stronie, znajdź Slack i uruchom bota testowego:

Następnie przejdź do Slacka i zacznij rozmawiać z botem:

Następnie możemy powtórzyć cykl, aby zrealizować inne pytania / intencje nakreślone na początku artykułu.

Słowa końcowe

Pomyślałem, że to fajna zabawa. I łatwiej niż myślałem. Oczywiście wybrałem kilka skrótów:

  • Usługa działa tylko lokalnie.
  • Brak uwzględnienia bezpieczeństwa, kontroli dostępu i wyboru środowiska kontroli zasobów.
  • Bardzo ograniczone użycie bota.

Mam nadzieję, że podobał Ci się ten artykuł. Skontaktuj się, aby podzielić się swoimi przemyśleniami, zadać pytania itp. Jesteśmy tutaj, aby pomóc.