Sentimentanalyse van supportverzoeken met behulp van AI, met MapForce en GPT-4
De automatische analyse van de sentimenten in tekst, zoals gebruikersrecensies, is historisch gezien een uitdaging geweest. Vanwege de vele complexiteiten van natuurlijke taal hadden systemen moeite met het analyseren van de context en nuances. Dit vereiste een aanzienlijke hoeveelheid handmatig werk om dit te overwinnen.
Een van de vele nuttige mogelijkheden van moderne AI-systemen die gebaseerd zijn op grote taalmodellen (LLM's), zoals OpenAI's GPT-4, is dat ze zeer goed zijn in het analyseren van de sentimenten in natuurlijke tekstinvoer. We kunnen die mogelijkheid gebruiken om een zeer efficiënte databaseoplossing te bouwen in MapForce, die bijvoorbeeld alle nieuwe binnenkomende gegevens in een supportdatabase doorloopt en automatisch bepaalt of een specifieke supportaanvraag of andere klantfeedback positief, negatief is, een bugrapport vormt, of als een functieaanvraag moet worden beschouwd.

Eerste tests met GPT-4 in de OpenAI-omgeving
Als u deze blogpost wilt volgen of uiteindelijk deze aanpak in uw eigen databasesysteem wilt implementeren, heeft u een account nodig bij OpenAI en moet u een API-sleutel verkrijgen die u kunt gebruiken in uw implementatie. Dit geeft u ook toegang tot de "Playground" op het OpenAI-platform, waar u enkele eerste tests kunt uitvoeren en voorbeelden van JSON-invoer kunt verkrijgen, die u nodig heeft om de juiste JSON-verzoeken in MapForce te construeren.
Zoals altijd is het ontwikkelen van een goede prompt een van de belangrijkste stappen bij het werken met een LLM-AI-systeem. U wilt zo precies mogelijk zijn, zodat u het gewenste resultaat krijgt. Voor onze doeleinden gaan we werken met de volgende prompt:
“Classify the sentiment in the following statement using these possible results: Negative, Positive, Feature Request, Bug Report.”
En daarna volgt de feedback van klanten, die we willen analyseren. Om dit te testen in de OpenAI Playground, selecteren we de instellingen: Mode=Chat, Model=gpt-4, Temperature=1, Maximale lengte=512, Top P=1, en we laten zowel de frequentie- als de aanwezigheidspenaliteit op 0 staan. Vervolgens kunnen we de prompt invoeren, onze eerste feedbackopmerking van een klant toevoegen en op de knop "Verzenden" klikken:

De GPT-4 AI geeft direct "Positief" terug, wat het juiste antwoord is. We kunnen hier nog een paar voorbeelden testen om te verifiëren dat onze prompt goed werkt in alle andere gevallen, en dat we de verwachte sentimentresultaten krijgen.
Vervolgens is het tijd om de JSON-verzoek te bekijken. Klik hiervoor op de knop "Code bekijken" en wijzig de taalinstelling in het pop-upvenster van Python (de standaardinstelling) naar JSON. Kopieer vervolgens de code en plak deze in XMLSpy, zodat we deze beter kunnen bekijken in de JSON-weergave

De JSON-structuur lijkt vrij eenvoudig. Dit stelt ons ook in staat om direct een JSON-schema te genereren op basis van deze code, wat we later zullen gebruiken om de web service-aanvraag in XMLSpy en MapForce in te stellen:

Test van de OpenAI API vanuit XMLSpy
Als volgende stap willen we er zeker van zijn dat we de OpenAI chat API correct begrijpen en we gaan kijken naar de resulterende JSON-uitvoer. We gaan een handmatige test uitvoeren met behulp van het handige HTTP-testvenster in XMLSpy, dat u kunt vinden direct onder uw hoofdwerkvenster, als een apart tabblad naast het venster voor berichten.
In het tabblad "HTTP" moet u de HTTP-aanvraagmethode wijzigen naar POST, de URL voor het OpenAI Chat API-eindpunt invoeren, namelijk https://api.openai.com/v1/chat/completions, en het inhoudstype instellen op application/json. Vervolgens kunt u het voorbeeld van de JSON-aanvraag, die we hierboven van de Playground hebben verkregen, in het gedeelte "Body" plakken:

Nu moeten we onze geheime API-sleutel toevoegen aan de headers om onze aanvraag te authenticeren. Klik daarom op het tabblad "Headers" en voeg een rij toe met de header "Authorization" en een waarde die begint met "Bearer", gevolgd door een spatie, en vervolgens de geheime API-sleutel. Als u meerdere accounts heeft bij OpenAI en ervoor wilt zorgen dat de facturering correct is, kunt u optioneel een tweede rij toevoegen met de header "OpenAI-Organization" en de waarde instellen op de organisatie-ID die aan uw account is gekoppeld bij OpenAI:

Uiteraard hebben we in de bovenstaande screenshot de exacte waarden van onze geheime sleutel en organisatie-ID verborgen.
Nu zijn we klaar om op de "Verzenden"-knop te klikken om de bovenstaande HTTP-verzoek naar het OpenAI API-eindpunt te sturen, zodat we kunnen zien welk antwoord we terugkrijgen:

Het eerste goede nieuws is dat we binnen 780 milliseconden een "200 OK" antwoord hebben ontvangen, samen met inhoud van het type "application/json". Dit is onze respons in JSON-formaat, en het bevat een bericht met het antwoord dat de AI-"assistent" heeft gegeven, in de vorm van de inhoud "Positief". We hebben dus met succes onze eerdere test in de OpenAI Playground kunnen repliceren, vanuit XMLSpy, door een daadwerkelijke HTTP-verzoek naar de API te sturen en de juiste respons te ontvangen.
Om verder te gaan, slaan we deze reactie op in een bestand met behulp van de knop "Opslaan in bestand" in het venster van de HTTP-tester. Vervolgens kunnen we dat bestand openen en XMLSpy gebruiken om automatisch een JSON-schema te genereren op basis van de voorbeeld-JSON-reactie. Dit keer beschrijft het schema de structuur van de verwachte JSON-uitvoer van de webservice, die we vervolgens in MapForce willen verwerken.

Voorbeeld van een ondersteuningsdatabase
De meeste systemen voor het beheer van technische ondersteuning zijn gebaseerd op een SQL-database of een andere database, waardoor deze aanpak eenvoudig kan worden toegepast op al deze systemen. Voor dit blogartikel gebruiken we echter een vereenvoudigde versie van een database voor klantfeedback, die is opgeslagen in SQLite:

En we hebben enkele voorbeelddata inbegrepen, waarmee we onze integratietests in MapForce kunnen uitvoeren en de sentimenten in al deze klantreacties kunnen analyseren:
![[FeedbackDatabaseData.png]]
Het maken van de database-mapping in MapForce
Nu hebben we alle benodigde componenten klaar om ons MapForce-transformatie- of ETL-project te creëren. Dit project zal alle gegevens uit de database lezen, de OpenAI API aanroepen om sentimentanalyse uit te voeren, en de resultaten vervolgens weer terugschrijven naar de database.
De eerste stap bij het ontwerpen van onze ETL-mapping is om ons databaseobject "CustomerFeedback" twee keer in de mapping te plaatsen: één keer als invoer (het "extract-gedeelte van ETL) en vervolgens ook als de uiteindelijke uitvoer. Verbind vervolgens het hoofdtafelobject en de ID. MapForce zal het waarschijnlijk erg handig vinden om ook alle andere kolommen te verbinden, maar we hebben die verbindingen eigenlijk niet nodig, dus u kunt ze weer verwijderen totdat u dit ontwerp heeft:

We laten veel ruimte tussen de invoer en uitvoer, omdat we daar binnenkort onze web service aanroep gaan plaatsen. Maar voordat we dat doen, laten we eerst precies definiëren welke databasebewerkingen we willen uitvoeren (het "laden" onderdeel van ETL) door dubbel te klikken op het juiste databaseobject:

Zorg ervoor dat de eerste radiobutton is ingesteld op "Geen", omdat we niets bijzonders willen doen voordat de eerste record wordt verwerkt. Vervolgens, wijzig de kolomkop van de tweede kolom naar "Bijwerken als..." en de combobox in de rij met de ID naar "gelijk aan". Dit instrueert MapForce om de gegevens in de database bij te werken voor elk record waarbij de ID, zoals die via de mapping wordt aangeleverd, gelijk is aan een ID die al bestaat in de database. Dit is alles wat we hier hoeven te doen, dus u kunt opnieuw op OK klikken.
Nu is het tijd om de web service component toe te voegen om de OpenAI API aan te roepen. Klik op de knop "Web Service Functie invoegen" in de werkbalk. Configureer vervolgens de benodigde instellingen voor de API-aanroep, gebaseerd op het werk dat we eerder hebben gedaan toen we de API vanuit XMLSpy hebben getest.
Net als voorheen moeten we de HTTP-verzoekmethode instellen op POST en de headers zo configureren dat ze onze geheime API-sleutel bevatten, en eventueel ook onze organisatie-ID. We moeten MapForce vertellen wat de structuur van de aanvraag- en antwoordgegevens is, en daarvoor de twee JSON-schema's gebruiken die we eerder hebben gemaakt:

Zodra dat is gedefinieerd, verschijnt het webservice-object in het ontwerpvenster van MapForce, en kunnen we beginnen met het verbinden van de lijnen om de functionaliteit te implementeren. In eerste instantie willen we de webservice één keer aanroepen voor elk record in de tabel "CustomerFeedback", dus we verbinden dat met de invoer "Request":
![[InsertWebServiceIntoMapping.png]]
En de resultaten worden aangeleverd in het "content"-attribuut van het bericht dat door de AI wordt geretourneerd, dus we koppelen dat aan de kolom "sentiment" in ons database-object.
Wat nu nog moet gebeuren, is het verbinden van alle andere invoergegevens voor de web service aanvraag met de API. We kunnen ons voorbeeld-JSON-bestand van hierboven gebruiken om precies te weten welke invoergegevens nodig zijn. Veel van deze invoergegevens zullen constanten zijn, zoals "gpt-4" voor het model, en verschillende waarden voor de andere parameters.
De belangrijkste informatie die we gebruiken bestaat uit de initiële vraagstelling, aangevuld met feedback uit de database. We combineren deze informatie en voeren deze vervolgens in als invoer voor de contentmodule van de webdienst
![[FinalMapping.png]]
Normaal gesproken zouden we op dit punt klaar zijn met het ontwerpen van onze ETL-mapping en zouden we nu onze transformatie kunnen uitvoeren. Echter, omdat GPT-4 het meest geavanceerde model is en veel mensen het gebruiken, heeft OpenAI beperkingen ingesteld voor het aantal web service verzoeken dat u per minuut kunt versturen. Als we deze transformatie nu zouden uitvoeren, zouden we die limieten gemakkelijk overschrijden.
Daarom moeten we een kleine "wacht"-functie (sleep) toevoegen tussen onze aanroepen naar de OpenAI-webservice, om onze aanroepen ongeveer 1 seconde uit elkaar te zetten. Dit kunnen we eenvoudig doen met behulp van de nieuwe, ingebouwde "wacht"-functie (sleep()) die beschikbaar is in MapForce v2024:
![[MF-Sentiment-Analysis-With-Sleep.png]]
In MapForce, op het tabblad "Voorbeeld van de uitvoer", kunt u nu het resultaat van deze transformatie bekijken. Zodra u op dit tabblad klikt, voert MapForce het ETL-mappingproject uit en genereert de benodigde SQL-statements die uw database op de juiste manier bijwerken met de resultaten van de sentimentanalyse die door de AI is uitgevoerd

En u kunt deze SQL-code nu rechtstreeks vanuit MapForce uitvoeren om daadwerkelijk de gegevens in uw database bij te werken.
Natuurlijk, in een praktische implementatie wilt u dit proces verder automatiseren, zodat nieuwe binnenkomende supportverzoeken automatisch worden geanalyseerd. U kunt dit eenvoudig realiseren door dit ETL-mappingproject te implementeren op een MapForce Server-instantie, ofwel in uw eigen IT-infrastructuur, ofwel in uw private of publieke cloud. Vervolgens kunt u de workflow-vereisten automatiseren, dat wil zeggen, bepalen wanneer deze analyse moet worden uitgevoerd op basis van bepaalde triggers of gebeurtenissen, met behulp van FlowForce Server.
Overigens zijn alle screenshots van XMLSpy en MapForce in dit blogbericht gemaakt met behulp van het nieuwe donkere thema, omdat dat mijn persoonlijke voorkeur heeft, maar u kunt onze producten uiteraard ook gebruiken met het nieuwe lichte thema, of met het klassieke thema, afhankelijk van uw persoonlijke voorkeur.
Om data transformatie met behulp van AI in MapForce te proberen, of om te experimenteren met AI-webservice API's in XMLSpy, kunt u een gratis proefversie van 30 dagen van beide producten, en verschillende andere nuttige ontwikkeltools, downloaden door de nieuwste Altova MissionKit van onze website te downloaden. We raden aan om de 64-bits versie van de Enterprise Edition te gebruiken voor al het werk dat betrekking heeft op AI.