luktom.net
  • blog
  • kontakt
  • english





Anatomia chatbota – cześć 3: wstęp do systemu dialogów Bot Buildera

14 kw., 2017
Chatboty, Daj się poznać 2017
Brak komentarzy
Odsłony : 4177

Microsoft Bot Framework, poza Bot Connectorem dostarcza także całkiem rozbudowany system zarządzania przepływem rozmowy z botem wymodelowany podobnie do przepływu między oknami, znanego z WinForms lub WPFa.

Podstawowymi elementami tego rozwiązania są tworzone przez użytkownika klasy opisujące dialogi. Dialog można określić jako fragment rozmowy realizujący konkretny cel – przykładowo dialog może obsługiwać wyświetlanie przycisków z menu do wyboru dla użytkownika lub też zbierać informacje od użytkownika na dany temat. To od wizji dewelopera zależy ile rzeczy będzie obsługiwał pojedynczy dialog, ja natomiast radzę powtarzające się rzeczy (np. pobranie daty i czasu, ich walidacja itd.) wydzielać do poddialogów, dzięki czemu zachowujemy przejrzystość kodu.

Dialogi w wykonaniu Bot Framework mają kilka cech charakterystycznych:

  • Każdy dialog musi być oznaczony atrybutem Serializable – Bot Framework automatycznie zapamiętuje nie tylko w którym dialogu jesteśmy (czyli cały dialog stack), ale także stan poszczególnych dialogów, włączając w to wszystkie properties oraz pola klasy implementującej dialog. O ile do prostych zastosowań jest to w miarę ok, o tyle na dłuższą metę rozwiązanie tego w ten sposób sprawia ogromy ból, zwłaszcza jeśli zależy nam na czystości kodu oraz stosowaniu dependency injection.
  • Konsekwencją powyższego jest konieczność „hackowania” tego systemu poprzez użycie Service Locatora (a tego nie lubimy) w ramach metody oznaczonej atrybutem OnDeserialized, co ogólnie jest dość słabą opcją…
  • Zapomnijcie także o lambdach, Action i kilku innych wygodnych rzeczach, które nie dają się łatwo serializować – użycie jakiegokolwiek mechanizmu tego typu wysypie cały dialog stack.
  • Do dialogów dostarczany jest tzw. kontekst dialogu. Niestety ten kontekst też staje się bolesny przy dłuższej przygodzie z dialogami, gdyż jest to rodzaj „superobiektu”, który ma bardzo dużą odpowiedzialność i naprawdę ciężko testować dialogi właśnie z racji ich dużej zależności od dostarczanego obiektu kontekstu.
  • Przepływ kontroli w ramach dialogu musi zawsze kończyć się wywołanie na obiekcie kontekstu jednej z trzech operacji: Call – wywołującej inny dialog, Done – kończący obecny dialog i przekazujący wynik do dialogu nadrzędnego lub Wait – który oczekuje na nastepną wiadomość od użytkownika.
  • Powyższe oznacza w szczególności, że jeśli nie wywołacie jednej z tych trzech metod (np. w wyniku nieobsłużonego wyjątku) to… tak, dialog stack się sypie :P
  • Wersjonowanie dialog stacka to kolejny słaby punkt tego rozwiązania. Dlaczego? Otóż jeśli Bot Framework nie jest w stanie poprawnie zdeserializować dialog stacka (serializacja binarna wbudowana w .NET z wszystkimi jej wadami i zaletami) to… resetuje go powodując tym samym utratę stanu poszczególnych properties lub pól klasy. Co prowadzi nas do wniosku, żeby lepiej nie bazować na tym automatycznym mechanizmie i samemu zająć się zapisem i odczytem stanu w ramach danego dialogu, a więc domyślną serializację sprowadzamy do bycia wyłącznie wadą tego rozwiązania.

Czy więc dialogów da się używać? Tak, da się. Czy to jest przyjemne? No cóż… jak dla mnie nie bardzo, ale to raczej kwestia tego, że lubię tworzyć kompaktowy kod, który można ponownie używać w wielu miejscach. System dialogów Bot Buildera niestety w wielu wypadkach nie pozwala na użycie pełni możliwości C#.
Jakie mamy alternatywy? O tym w przyszłych wpisach :)

W następnych częściach…

… pokażę jak w praktyce używać systemu dialogów oraz jak zrobić te kilka hacków, które pozwalają go użyć zgodnie „ze sztuką”.

A później przejdziemy do sztucznej inteligencji w zastosowaniach związanych z chatbotami :)

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

 



Tagi :   bot builderbot frameworkchatbotydsp2017

Powiązane wpisy

  • SmogBot – kilka dobrych praktyk z zakresu bezpieczeństwa bazy danych

  • Ikonka dla SmogBota

  • SmogBot – stack technologiczny

  • Anatomia chatbota – część 5: przejścia między dialogami

  • 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