luktom.net
  • blog
  • kontakt
  • english





Chatboty i sztuczna inteligencja – część 5: integracja kodu z Wit.ai

24 cze, 2017
Chatboty
Brak komentarzy
Odsłony : 2517

W ostatnim odcinku zbudowaliśmy model w Wit.ai obsługujący rozgałęzienia oraz „dopytywanie” użytkownika o brakujące informacje. Po dłuższej przerwie spowodowanej urlopem, dzisiaj zajmiemy się integracją kodu z Wit.ai, przy czym samego kodu w tym odcinku nie będzie :P – poruszę natomiast kwestie jak taką integrację wykonać dobrze i podzielę się kilkoma odkryciami i dobrymi praktykami w tym zakresie.

Komunikacja z Wit.ai

Z Wit.ai komunikujemy się po prostu za pomocą HTTPS. Tutaj warto zwrócić uwagę na kilka rzeczy:

  • Zapytania są typu POST.
  • W parametrach zapytania HTTP przesyłamy session id oraz tekst wprowadzony przez użytkownika.
  • W body zapytania HTTP przesyłamy zserializowany kontekst (jako application/json).
  • Zapytania należy uwierzytelnić przy użyciu bearer authentication, token pozyskujemy ręcznie ze strony ustawień aplikacji Wit.ai.

Pętla zapytań

W wyniku pojedynczego zapytania Wit.ai może wykonać kilka akcji (np. „wywołać” kilka funkcji lub odpowiedzieć tekstem do użytkownika w kilku osobnych wiadomościach). Konieczne jest zatem zaimplementowanie pętli zapytań, która będzie:

  • Odpytywać Wit.ai zapytaniem HTTP
  • Przetwarzać wynik otrzymany z Wit.ai
  • W zależności od rezultatu zapytania wypisać coś do użytkownika (akcje typu msg) lub wywołać funkcję w kodzie użytkownika (akcje typu action).
  • Jeśli w rezultacie otrzyma akcję typu stop to należy zaprzestać dalszego przetwarzania.

Brzmi całkiem prosto, jednak dochodzi tutaj kilka problemów:

  • Należy obsługiwać resety konwersacji – Wit.ai bazuje na modelu z kontekstem i session_id – powinniśmy je resetować tuż po wykryciu końca konwersacji (logicznego, a nie tego w wyniku akcji typu stop) lub po wykryciu zmiany tematu (intent) konwersacji – w praktyce polecam w ramach projektowania historii w Wit.ai zawsze ręcznie wywoływać funkcję odpowiedzialną za reset konwersacji.
  • W przypadku zmiany tematu konwersacji pożądanym jest (a przynajmniej tak wynika z moich obserwacji), aby dokonać powyższego resetu konwersacji i odpytać usługę ponownie – czyli nie kontynuujemy przetwarzania rezultatu zapytania, zamiast tego porzucamy je, resetujemy stan i zaczynamy od nowa – taki mechanizm zauważalnie poprawia dokładność przetwarzania Wit.ai.
  • Czasami Wit.ai nie zwraca intent w rezultacie zapytania – tutaj nie udało mi się określić dokładnej reguły kiedy to następuje, jednakże to się zdarza i jeśli chcemy na tym bazować to należy to obsłużyć. W modelu, który zaprezentuję w przyszłych wpisach polegam na posiadaniu zawsze ustawionego intent do określania jaka klasa ma obsłużyć daną akcję, a więc w moim przypadku okazało się to bardzo istotne, aby mieć zawsze ustawiony intent.
  • Ponieważ aplikacja Wit.ai jest tworzona w pewien sposób niezależnie od kodu, który z nią współpracuje należy szczególnie zwrócić uwagę na obsługę fallbacków – np. gdy kod z nową funkcją nie trafił jeszcze na produkcję, a aplikacja w Wit.ai odwołuje się do tej nowej funkcji – nie powinno to zepsuć przetwarzania, a tym bardziej stanu konwersacji.

Te i inne problemy rozwiązałem w bibliotece o której opowiem więcej następnym razem. Dzisiaj jeszcze poruszę jeden temat, mianowicie:

Kontekst i persystencja

Projektując integrację z Wit.ai musimy zwrócić uwagę na jeszcze jeden aspekt: nietrwałość kontekstu. Z moich obserwacji wynika, że aplikacje Wit.ai działają najlepiej jeśli kontekst jest ściśle powiązany z danym intent oraz konkretną historią, a co za tym idzie – jest on bytem z natury krótkotrwałym.

Tworząc chatbota chcemy jednak niektóre informacje przechowywać na dłużej, celem ich wykorzystania w przyszłości. Powstaje więc potrzeba wdrożenia jakiegoś mechanizmu, który pozwoli zapamiętywać informacje z kontekstu oraz przywracać je do kontekstu jeśli tylko zajdzie taka potrzeba.

Na tę chwilę tylko notyfikuję problem, przykład jego rozwiązania podam w kolejnych wpisach.

W następnych częściach…

… zaczniemy rozwiązywać wspomniane wyżej problemy oraz zapoznawać się z moją biblioteką, którą na te potrzeby stworzyłem.

Aby nie przegapić kolejnych wpisów zapraszam do śledzenia tego bloga, czy to przez kanał RSS, czy też poprzez stronę na Facebooku.



Tagi :   aichatbotywit.ai

Powiązane wpisy

  • Anatomia chatbota – część 6: PromptDialog

  • Ikonka dla SmogBota

  • Chatboty i sztuczna inteligencja – część 4: encje i rozgałęzienia w Wit.ai

  • DSP2017 – organizacja repozytorium konkursowego

  • Dodaj komentarz

    Click here to cancel reply

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>





    Łukasz Tomaszkiewicz

    Łukasz Tomaszkiewicz

    Pasjonat chmury, szczególnie AWSa, który nieustannie automatyzuje powtarzające się czynności i optymalizuje procesy, przy okazji wdrażając dobre praktyki dotyczące bezpieczeństwa. Jego szerokie doświadczenie w zakresie tworzenia oprogramowania, projektowania baz danych, a także wirtualizacji serwerów i zarządzania infrastrukturą w chmurze pozwala mu spojrzeć przekrojowo na współczesny stack technologiczny.

    W wolnym czasie fotograf, sporadycznie piszący blogger :) a także regularny prelegent na krakowskich grupach związanych z IT.

    Wyznawca Vim'a :)

    Kategorie

    • Ansible
    • AWS
    • C#
    • Chatboty
    • Cloud
    • Daj się poznać 2017
    • Docker
    • Inne
    • Linux
    • Open source
    • Organizacyjne
    • Prelekcje
    • Sieci komputerowe
    • SQL Server
    • Windows
    • Windows Server
    • Wirtualizacja

    Najczęściej czytane

    • Creating single node VSAN cluster
    • SQL Server – walidacja numerów PESEL i NIP
    • Konfiguracja serwera DHCP na routerach Cisco
    • Aktywacja routingu IP w Windows 7 / Windows Server 2008
    • Konwersja maszyn wirtualnych z ESXi do Hyper-V przy użyciu SCVMM 2012
    • Jak podłączyć program R do SQL Servera?

    Tagi

    .net ai ansible asp.net mvc aws aws cli bot builder bot framework c# centos certyfikaty chatbot chatboty cisco cmd docker dsp2017 esxi hyperv kontenery konteneryzacja linux mvc nlp openvpn plssug pobieranie powershell prelekcje rancher redhat router sieci smogbot sql server ssd ssl vmware vsphere windows windows mobile windows server wirtualizacja wit.ai wrzuta

    Copyright © 2006-2018 by Łukasz Tomaszkiewicz. Wszelkie prawa zastrzeżone