Jedną z bardzo potężnych funkcji Power Virtual Agent jest funkcjonalność o nazwie „Byty” (Entities). Jego głównym celem jest pozwolenie botowi zadać pytanie użytkownikowi, a następnie pozwolić użytkownikowi odpowiedzieć na pytanie w naturalnym języku, używając pełnego zdania, a na końcu wyodrębnić z odpowiedzi kluczowe punkty, które pozwolą botowi przejść dalej w rozmowie.

Ostatnio Jeff Zhang, Principal Product Manager z Microsoft, napisał ten krótki post opisujący możliwości wbudowanych funkcji ekstrakcji słów kluczowych w PVA: https://powervirtualagents.microsoft.com/en-us/blog/smart-entity-extraction-and-proactive-slot-filling/.

Ja postaram Ci się pomóc i zrozumieć, jak móc osiągnąć dużo ponad to 🙂

Dowiedz się więcej – obejrzyj screencast

Entities (Byty, Słowa kluczowe)

Funkcja jest łatwa do znalezienia – jest ona obecna w głównej nawigacji. Po otwarciu strony zauważysz długą listę predefiniowanych bytów, których użycie umożliwi np. wyodrębnienie wieku ze zdania. Na przykład – bot pyta użytkownika: „ile masz lat?”. Ale użytkownik nie musi odpowiadać przy użyciu samych cyfr, prawda? Załóżmy, że użytkownik odpowiada: „Mam czterdzieści lat”. W trakcie zwykłego przebiegu rozmowy bot zgubiłby się – nie wiedziałby, jaka jest odpowiedź na jego pytanie (przykład nr 1):

Ale w przypadku, gdyby projektant wybrał byt „Age” w celu zidentyfikowania odpowiedzi użytkownika, wówczas w procesie inteligentnej ekstrakcji słowa kluczowego zdanie zostałoby przetworzone jak poniżej:

Odpowiedź użytkownikaBytZapisana wartość
I am forty years old.forty years40

To jest bardzo przydatne! I jest gotowych do użycia wiele takich predefiniowanych bytów.

Własne byty

Projektanci mogą również tworzyć własne byty niestandardowe. Aby to zrobić, po prostu kliknij link powyżej tytułu:

W ten sposób projektant jest w stanie stworzyć własny zestaw słów kluczowych i ich synonimów. Jeśli zostaną następnie użyte w rozmowie, zostaną wyświetlone jako przyciski (3), jednak użytkownik będzie mógł również odpowiedzieć pełnym zdaniem (1). Ale – jeśli zdanie będzie zbyt skomplikowane, jeśli bot nie byłby w stanie dopasować go ani do słowa kluczowego, ani do jego synonimów, nie będzie w stanie go przeanalizować i utknie (2):

Ekstrakcja własnych bytów

Wszystko fajnie, ale co zrobić, jeśli chcesz po prostu zadać użytkownikowi pytanie i wyciągnąć z niego słowo kluczowe (ale nie używając jednego z wcześniej zdefiniowanych zestawów), aby przejść dalej? LUIS (Language Understanding Intelligent Service) firmy Microsoft jest tutaj, aby Ci pomóc! 🙂

Korzystając z LUIS, jesteś w stanie stworzyć własną ekstrakcję bytów. Pokażę ci krok po kroku jak to zrobić:

1) Skonfiguruj LUIS

Przejdź do https://www.luis.ai/ i zaloguj się.

Ważne! By zarejestrować się w usłudze LUIS musisz albo być tenant adminem, albo mieć zgodę administratora do używania jej.

Następnie utwórz usługę Language Understanding, do pracy z LUIS. Musisz to zrobić oczywiście w portal.azure.com. Usługa musi być skonfigurowana zarówno dla środowiska wykonawczego, jak i tworzenia (1). Możesz skorzystać z subskrypcji F0 (bezpłatnej, 2, 3), jeśli potrzebujesz tę usługę wyłącznie na potrzeby testów (mały ruch):

Teraz wróć do portalu LUIS i utwórz nową aplikację, wybierając subskrypcję użytą do stworzenia usługi (1), a następnie samą usługę (2), następnie kliknij przycisk „utwórz nową aplikację” (3) i wypełnij formularz (4).

Teraz możesz przejść do następnego kroku!

2) Konfigurowanie grup celów i bytów

Następnie utwórz grupy celów (intents). Grupa celów to zestaw przykładów służących do umożliwienia kwalifikacji danych od użytkowników do określonych grup. W moim przypadku mam tylko jedną grupę – przechowującą przykłady zdań, które użytkownicy mogą napisać do bota, gdy poprosi ich o opisanie ich problemu IT (oczywiście mogę utworzyć dwa: jeden dla każdego z oczekiwanych rodzajów problemów; software, hardware, a następnie przeszkolić LUIS, aby dopasowywać dane wejściowe użytkownika do jednego z nich).

Teraz przejdź do Bytów. Są to w zasadzie słowa kluczowe, które LUIS będzie mógł wydobyć z podanego celu na podstawie tego, jak dobrze zostały przygotowane. Najpierw utwórz byt. Istnieje wiele możliwych typów. W moim przypadku wybrałem „List”, ponieważ chcę wyodrębnić niektóre słowa kluczowe z danych wejściowych użytkownika i na ich podstawie ustalić, czy jest to problem z rodzaju Software, czy Hardware:

Kiedy skończysz konfigurować byty, wróć do swoich grup celów i sprawdź, czy słowa kluczowe użyte w twoich przykładach zdań zostały zaznaczone (1, 2). Jeśli nie, po prostu zaznacz je i wybierz właściwy byt (3):

Gotowe! Teraz wciśnij przycisk „Train” w prawym górnym rogu, a następnie: „Publish” (wybierając miejsce do publikowania: Staging lub Production).

Teraz przejdź do „Manage” – informacja tutaj są wymagane do skonfigurowania komunikacji pomiędzy Power Automate i LUIS.

Dlaczego więc konfigurować cele i byty? Zasadniczo w scenariuszu, który opisuję, całkowicie wystarczyłoby mi posiadanie jedynie dwóch grup celów i dobrze wytrenowaną usługę. Jednak użycie Bytów i ich dopasowanie do słów kluczowych w celach poprawia prawidłowe rozpoznanie wpisanego zdania i przyporządkowanie go do określonej grupy.

Ale dlaczego byty? Zasadniczo, jeśli chciałbym pójść o krok dalej, bot mógłby poprosić użytkownika o opisanie problemu według określonego szablonu, np. pytając o system, szczegóły komputera, nazwę aplikacji, typ urządzenia itp … Wtedy dzięki użyciu wyodrębniania bytów bot dokładnie znałby wszystkie szczegóły problemu, nawet gdyby jego opis został napisany pełnym zdaniem i naturalnym językiem. To jest potęga! 🙂

Np. dla takiego przykładu: „Mam problem z arkuszem kalkulacyjnym Excel. Aplikacja nie chce zapisać dokumentu informując o braku uprawnień do biblioteki SharePoint.”

Bot dostałby informacje:
Rodzaj problemu: Software
Aplikacja: Excel
Akcja: zapis pliku
Problem: uprawnienia
Lokalizacja: biblioteka SharePoint

Które mógłby wykorzystać w dalszej komunikacji z użytkownikiem lub do wygenerowania zadania w helpdesk poprawnie ustawiając jego parametry.

3) Power Automate – flow

Utwórz nowy przepływ. Jako wyzwalacz użyj nowej, wciąż w trybie preview, akcji o nazwie „When Power Virtual Agents call a flow”:

Zdefiniuj zmienną dla danych wejściowych – będzie to informacja od użytkownika – opis problemu.

Następnie wstaw akcję HTTP do wysłania żądanie do LUIS. Możesz wybrać metodę GET lub POST. Jeśli treść, którą chcesz wysłać, jest bardziej złożona, sugeruję użycie POST i umieszczenie jej w treści żądania (źródło):

Dobrym pomysłem jest teraz wykonanie połączenia testowego przy użyciu na przykład Postmana, aby uzyskać JSON treści odpowiedzi, a następnie użyć go do konfiguracji akcji „Parse JSON”. Poniżej znajdziesz przykład tego samego zdania, którego mój niestandardowy byt stworzony w PVA nie był w stanie przenalizować i zrozumieć. Korzystanie z LUIS jest mniej niż łatwe, a działa wyśmienicie:

Rozwiązanie jakie ja zbudowałem, liczyło na podstawie ilości faktycznych dopasowań do jednego lub drugiego bytu, czy opisywany przez użytkownika problem jest z rodzaju Software, czy Hardware. Informację tę przepływ następnie zwraca do PVA. Mógłby dodatkowo zwracać jeszcze znalezione encje, które mogłyby zostać użyte w komunikacji bota z użytkownikiem.

A zatem, w moim działającym scenariuszu bot pyta użytkownika o problem (1) – nie musi już najpierw pytać o problem, a potem o jego rodzaj – nowy sposób jest znacznie wygodniejszy (i bardziej inteligentny ;)) dla użytkownika. Użytkownik odpowiada używając pełnego zdania, które zostaje zapisane jako zmienna (2). Następnie jest ono przekazywane jako parametr wejściowy do przepływu (3), który wywołuje LUIS, a następnie wylicza, czy problem dotyczy oprogramowania (4) czy sprzętu.

Krótkie podsumowanie

Osobiście jestem pod ogromnym wrażeniem, jak łatwo jest dzisiaj stworzyć naprawdę działającego bota konwersacyjnego, z którego firmy mogą korzystać zarówno do celów wewnętrznych, jak i zewnętrznych.

Wciąż jednak głównym celem projektantów powinno być tworzenie rozmów, aby użytkownicy mogli brać w nich udział w jak najbardziej naturalny sposób. A to oznacza zarówno kanał, w którym uzyskują do nich dostęp (Teams bot, Facebook bot, czat online), a także sposób prowadzenia rozmów. Im mniej bot zadaje pytań „krok po kroku”, zamiast tego będąc w stanie zrozumieć język naturalny, tym mniej frustracji spowoduje to po stronie użytkownika.

Mam nadzieję, że te informacje okażą się dla Ciebie przydatne. Zostaw komentarz, jeśli masz jakieś pytania!