Analiza sentymentu zgłoszeń wsparcia technicznego przy użyciu MapForce i GPT-4
Automatyczna analiza sentymentu w tekstach, takich jak recenzje użytkowników, od dawna stanowiła wyzwanie. Ze względu na złożoność języka naturalnego, systemy napotykały trudności w analizowaniu kontekstu i subtelności. Wymagało to ogromnej ilości pracy ręcznej, aby pokonać te trudności.
Jedną z wielu przydatnych funkcji nowoczesnych systemów sztucznej inteligencji, opartych na dużych modelach językowych (LLM), takich jak GPT-4 firmy OpenAI, jest to, że są one bardzo dobre w analizie sentymentu w naturalnym języku. Możemy wykorzystać tę funkcję do stworzenia bardzo wydajnego rozwiązania bazodanowego w MapForce, które, na przykład, analizuje wszystkie nowe rekordy w bazie danych wsparcia i automatycznie określa, czy konkretne zgłoszenie wsparcia lub inne opinie klientów są pozytywne, negatywne, stanowią zgłoszenie błędu lub powinny być traktowane jako propozycja nowej funkcji.

Początkowe testy z wykorzystaniem GPT-4 w środowisku OpenAI Playground
Jeśli chcesz śledzić post na blogu lub ostatecznie chcesz wdrożyć to rozwiązanie w swoim własnym systemie baz danych, będziesz musiał założyć konto w OpenAI i uzyskać klucz API, który możesz wykorzystać w swojej implementacji. To również zapewni Ci dostęp do "Playground" na portalu OpenAI, gdzie możesz przeprowadzić wstępne testy i uzyskać przykładowe dane wejściowe w formacie JSON, które będą potrzebne do tworzenia poprawnych żądań JSON w MapForce.
Jak zawsze, jednym z najważniejszych kroków podczas pracy z systemem sztucznej inteligencji opartym na dużych modelach językowych (LLM) jest opracowanie odpowiedniego zapytania. Należy dążyć do jak największej precyzji, aby uzyskać oczekiwany rezultat. W naszym przypadku, będziemy pracować z następującym zapytaniem:
“Classify the sentiment in the following statement using these possible results: Negative, Positive, Feature Request, Bug Report.”
Następnie przeanalizujemy opinie klientów, które chcemy zbadać. Aby przetestować to w środowisku OpenAI Playground, wybieramy: tryb "Chat", model "gpt-4", temperaturę 1, maksymalną długość 512, wartość Top P równą 1, a kary za częstotliwość i obecność ustawiamy na 0. Następnie możemy wprowadzić zapytanie, wpisać pierwszą opinię klienta i kliknąć przycisk "Wyślij":

Model AI GPT-4 natychmiast zwraca odpowiedź "Pozytywna", co jest prawidłową odpowiedzią. Możemy przetestować kilka dodatkowych przykładów, aby potwierdzić, że nasz prompt działa poprawnie we wszystkich innych przypadkach i że otrzymujemy oczekiwane wyniki analizy sentymentu.
Następnie należy przejrzeć żądanie JSON, klikając przycisk "Wyświetl kod" i zmieniając język wyświetlany w oknie dialogowym z języka Python (domyślny) na język JSON. Następnie należy skopiować kod i wkleić go do programu XMLSpy, aby móc go lepiej przeanalizować Widok siatki danych w formacie JSON:

Struktura JSON wydaje się być dość prosta. To również pozwala nam automatycznie wygenerować schemat JSON na podstawie tego kodu, który później wykorzystamy do skonfigurowania żądania do usługi internetowej w programach XMLSpy i MapForce:

Testowanie API OpenAI za pomocą programu XMLSpy
Następnym krokiem jest upewnienie się, że poprawnie rozumiemy interfejs API czatu OpenAI i przeanalizujemy wynikowy format JSON. Przeprowadzimy ręczne testy, korzystając z dostępnych narzędzi Okno testowe HTTP W programie XMLSpy, który można znaleźć bezpośrednio pod głównym oknem roboczym, jako oddzielną zakładkę obok okna "Wiadomości".
W zakładce HTTP zmień metodę żądania HTTP na POST, wprowadź adres URL punktu końcowego API OpenAI Chat, który brzmi: https://api.openai.com/v1/chat/completions, i ustaw typ zawartości na application/json. Następnie wklej przykładowe żądanie JSON, które otrzymaliśmy z panelu Playground, do sekcji "Body":

Teraz musimy podać nasz tajny klucz API w nagłówkach, aby uwierzytelnić nasze żądanie. Kliknij więc zakładkę "Nagłówki" i dodaj wiersz z nagłówkiem "Authorization" oraz wartością, która zaczyna się od "Bearer ", po którym następuje spacja, a następnie nasz tajny klucz API. Jeśli posiadamy wiele kont w OpenAI i chcemy zapewnić prawidłowe rozliczenia, opcjonalnie możemy dodać drugi wiersz z nagłówkiem "OpenAI-Organization" i ustawić wartość na identyfikator naszej organizacji przypisanej przez OpenAI:

Oczywiście, w powyższym zrzucie ekranu celowo ukryliśmy dokładne wartości naszego tajnego klucza oraz identyfikatora organizacji.
Teraz możemy kliknąć przycisk "Wyślij", aby przesłać powyższy żądanie HTTP do interfejsu API OpenAI i zobaczyć, jaką odpowiedź otrzymamy

Pierwsza dobra wiadomość to fakt, że otrzymaliśmy odpowiedź z kodem 200 OK w czasie 780 ms, a w treści znajdowały się dane w formacie application/json, czyli nasza odpowiedź w formacie JSON. Zawierała ona komunikat z odpowiedzią, którą "asystent" AI przekazał w postaci treści "Positive". Dzięki temu udało nam się odtworzyć nasze wcześniejsze testy w środowisku OpenAI Playground, wysyłając rzeczywisty żądanie HTTP do API i otrzymując prawidłową odpowiedź, wszystko to z poziomu programu XMLSpy.
Aby kontynuować, zapiszemy tę odpowiedź do pliku, korzystając z przycisku "Zapisz do pliku" w oknie testera HTTP. Następnie możemy otworzyć ten plik i użyć programu XMLSpy, aby automatycznie utworzyć schemat JSON na podstawie przykładowej wiadomości JSON. Tym razem schemat opisuje strukturę oczekiwanego wyniku JSON z usługi internetowej, którą następnie będziemy chcieli przetworzyć w programie MapForce.

Przykładowa baza danych wsparcia
Większość systemów zarządzania wsparciem technologicznym opiera się na bazie danych SQL lub innej bazie danych, dlatego to podejście można łatwo zastosować do wszystkich z nich. Jednak w tym przykładzie, który prezentujemy w tym wpisie na blogu, użyjemy uproszczonej wersji bazy danych opinii klientów, zaimplementowanej w SQLite:

Mamy również w nim przykładowe dane, które pozwolą nam przeprowadzić testy integracyjne w MapForce i określić sentyment wyrażony we wszystkich tych opiniach klientów:
![[FeedbackDatabaseData.png]]
Tworzenie mapowania bazy danych w programie MapForce
Teraz mamy wszystkie niezbędne elementy, aby stworzyć nasz projekt transformacji danych lub ETL za pomocą MapForce, który będzie odczytywał wszystkie rekordy z bazy danych, korzystał z API OpenAI w celu przeprowadzenia analizy sentymentu i zapisywał wyniki z powrotem do bazy danych.
Pierwszym krokiem w projektowaniu mapowania ETL jest dwukrotne umieszczenie obiektu bazy danych "CustomerFeedback" w mapowaniu – raz jako źródło danych (input), a drugi raz ekstrakt części procesu ETL) oraz jako wynik końcowy, a także połączyć główny obiekt tabeli oraz identyfikator. MapForce z łatwością połączy również pozostałe kolumny, ale w rzeczywistości te połączenia nie są nam potrzebne, więc można je usunąć, aż do uzyskania następującego schematu:

Zostawiamy sporo miejsca między danymi wejściowymi a wyjściowymi, ponieważ wkrótce w tym miejscu umieścimy wywołanie naszego serwisu internetowego. Ale zanim to zrobimy, zdefiniujmy dokładnie operacje na bazie danych, które generują dane wyjściowe (część ładowania w procesie ETL), klikając dwukrotnie prawym przyciskiem myszy na odpowiednim obiekcie bazy danych:

Upewnij się, że pierwsze pole wyboru jest ustawione na "Brak", ponieważ nie chcemy wykonywać żadnych specjalnych operacji przed pierwszym rekordem. Następnie zmień nagłówek drugiej kolumny na "Aktualizuj, jeśli..." oraz rozwijaną listę w wierszu "id" na "równa się". To instruuje MapForce, aby aktualizował dane w bazie danych dla każdego rekordu, w którym wartość "id" przekazywana przez mapowanie jest równa wartości "id", która już istnieje w bazie danych. To wszystko, co musimy tutaj zrobić, więc możesz ponownie kliknąć OK.
Teraz nadszedł czas, aby dodać komponent usługi internetowej, który będzie wywoływał API OpenAI. Kliknij przycisk "Wstaw funkcję usługi internetowej" na pasku narzędzi. Następnie skonfiguruj niezbędne ustawienia wywołania API, bazując na pracy, którą wykonaliśmy wcześniej, podczas testowania API w programie XMLSpy.
Podobnie jak wcześniej, musimy skonfigurować metodę żądania HTTP jako POST, a nagłówki powinny zawierać nasz tajny klucz API, a opcjonalnie również identyfikator naszej organizacji. Musimy również poinformować MapForce, jaka będzie struktura danych przesyłanych w żądaniu i odpowiedzi, wykorzystując dwa schematy JSON, które wcześniej utworzyliśmy

Po zdefiniowaniu tych parametrów, obiekt usługi internetowej pojawi się w panelu projektowania MapForce, a my możemy zacząć łączyć elementy, aby zaimplementować odpowiednią funkcjonalność. Najpierw chcemy wywołać usługę internetową raz dla każdego rekordu w tabeli "CustomerFeedback", dlatego łączymy ją z wejściem "Request":
![[InsertWebServiceIntoMapping.png]]
Wynik, który otrzymamy, zostanie umieszczony w atrybucie "content" w wiadomości zwróconej przez sztuczną inteligencję, dlatego łączymy go z kolumną "sentiment" w naszym obiekcie bazy danych.
Teraz pozostaje jedynie połączyć wszystkie pozostałe dane wejściowe dla żądania do usługi internetowej z interfejsem API. Możemy wykorzystać nasz przykładowy plik JSON, o którym wspomniano wcześniej, aby dokładnie wiedzieć, jakie dane wejściowe są wymagane. Wiele z nich będzie wartościami stałymi, takimi jak "gpt-4" dla modelu, oraz różne wartości dla pozostałych parametrów.
Najważniejszym elementem wejściowym jest zapytanie wraz z informacjami z bazy danych, dlatego łączymy te elementy przed przekazaniem ich do pola wprowadzania treści w usłudze internetowej
![[FinalMapping.png]]
Zazwyczaj w tym momencie kończylibyśmy projektowanie naszego mapowania ETL i moglibyśmy przystąpić do realizacji transformacji. Jednakże, ponieważ GPT-4 jest najbardziej zaawansowanym modelem i jest intensywnie wykorzystywany przez wielu użytkowników, firma OpenAI wprowadziła ograniczenia dotyczące liczby zapytań do usług internetowych, które można wysłać w ciągu minuty. Jeśli uruchomilibyśmy teraz tę transformację, łatwo przekroczylibyśmy te limity.
Dlatego musimy dodać krótką funkcję pauzy (sleep) pomiędzy naszymi wywołaniami interfejsu usługi OpenAI, aby oddzielać je o około 1 sekundę. Możemy to łatwo zrobić za pomocą nowej, wbudowanej funkcji sleep(), dostępnej w MapForce v2024:
![[MF-Sentiment-Analysis-With-Sleep.png]]
Zakładka "Podgląd wyników" w programie MapForce umożliwia teraz wyświetlenie rezultatu tej transformacji. Po kliknięciu tej zakładki, program MapForce uruchomi projekt mapowania ETL i wygeneruje niezbędne instrukcje SQL, które zaktualizują bazę danych zgodnie z wynikami analizy sentymentu przeprowadzonej przez sztuczną inteligencję

Teraz można bezpośrednio uruchamiać ten kod SQL z poziomu MapForce, aby faktycznie zaktualizować dane w bazie danych.
Oczywiście, w rzeczywistej implementacji, warto zautomatyzować ten proces, aby nowe zgłoszenia serwisowe były automatycznie analizowane. Można to łatwo osiągnąć, wdrażając ten projekt mapowania ETL na instancję serwera MapForce Server, umieszczoną w infrastrukturze IT firmy lub w prywatnej lub publicznej chmurze. Następnie można zautomatyzować wymagania dotyczące przepływu pracy, czyli określić, kiedy uruchamiać tę analizę w oparciu o określone wyzwalacze lub zdarzenia, za pomocą serwera FlowForce Server.
Przy okazji, wszystkie zrzuty ekranu z programów XMLSpy i MapForce, które znajdują się w tym wpisie na blogu, zostały wykonane przy użyciu nowego motywu ciemnego, ponieważ to jest mój osobisty preferencja, ale oczywiście można korzystać z naszych produktów również w nowym motywie jasnym, a także w klasycznym motywie, w zależności od indywidualnych preferencji.
Aby przetestować transformację danych opartą na sztucznej inteligencji w programie MapForce lub eksperymentować z interfejsami API usług internetowych wykorzystujących sztuczną inteligencję w programie XMLSpy, można pobrać bezpłatną 30-dniową wersję próbną obu produktów oraz kilku innych przydatnych narzędzi dla programistów, pobierając najnowszą wersję Altova MissionKit ze naszej strony internetowej. Zalecamy korzystanie z 64-bitowej wersji edycji Enterprise do wszystkich zadań związanych ze sztuczną inteligencją.