Top
Photo by Emmanuel Ikwuegbu on Unsplash

Dodawanie wyrażeń w LUIS poprzez REST API


Podczas pracy z usługą LUIS (Language Understanding Intelligent Service) firmy Microsoft najczęstszym scenariuszem jest wykorzystanie jej w procesach biznesowych. Bardzo ważną cechą serwisu jest to, że można go szkolić o nowe wyrażenia. Można to zrobić ręcznie, za pomocą interfejsu użytkownika lub… za pomocą interfejsu REST API usługi. Pokażę Ci, jak to zrobić za pomocą przepływu Power Automate.

Możliwość aktualizacji LUIS przez Rest API jest bardzo ważna, gdy mówimy o zautomatyzowanych procesach. Na przykład, gdy pojawi się nowe słowo kluczowe, które po aakceptacji użytkownika, powinno zostać zapisane w LUIS. Następnie oczywiście usługa powinna zostać wytrenowana i opublikowana. W ten sposób może automatycznie aktualizować modele w LUIS.

Endpointy Rest API

Chociaż LUIS jest teraz dostępny w wersji 3.0, endpointy tworzenia są nadal dostępne w wersji 3.0-preview. Ale dopóki działają, nie mamy powodów do narzekań 🙂 Aby zrealizować omawiany scenariusz, przepływ pracy musi wywołać poniższe punkty końcowe, w tej kolejności:

  1. POST: https://{endpoint}/luis/authoring/v3.0-preview/apps/{appId}/versions/{versionId}/example – dodać nowe wyrażenie do konkretnej intencji (dokumentacja);
  2. POST: https://{endpoint}/luis/authoring/v3.0-preview/apps/{appId}/versions/{versionId}/train – w celu rozpoczęcia trenowania modelu (dokumentacja);
  3. GET: Teraz proces musi wywołać https://{endpoint}/luis/authoring/v3.0-preview/apps/{appId}/versions/{versionId}/train w pętli tak długo, aż status dla modelu jest różny od „Success” (dokumentacja);
  4. POST: https://{endpoint}/luis/authoring/v3.0-preview/apps/{appId}/publish – w celu opublikowania ostatnie wersji modelu (dokumentacja).

Odnalezienie wartości {endpoint} i pozostałych parametrów

Najłatwiejszy sposób na uzyskanie wszystkich wymaganych wartości, czyli:

  • endpoint
  • appId
  • versionId
  • Ocp-Apim-Subscription-Key

Jest przejście do zakładki „Manage” w portalu LUIS:

  1. Tutaj od razu odnajdziesz wartość appId
  2. W tej części znajdziesz wartości dla endpoint i Ocp-Apim-Subscription-Key (Primary Key) – tylko pamiętaj, by się przełączyć na zakładkę „Authoring Resource”:
  1. I finalnie tutaj znajdziesz bieżącą wartość dla versionId (zwykle 1.0)

Implementacja w Power Automate

Najpierw użyj akcji do zainicjowania zmiennej, która będzie używana do zakończenia sprawdzania, czy trenowanie się powiodło. Użyj zmiennej boolean i ustaw jej wartość początkową na „fałsz”.

Następnie dodaj zapytanie http do pierwszego endpointa, aby dodać nowe wyrażenie:

To, co możesz tutaj dodatkowo zrobić, to oprócz dodania jedynie wyrażenia do określonej intencji, jest zaznaczenie tego fragmentu tekstu, który zawiera konkretną encję. W tym celu oczywiście musisz wiedzieć, co to za encja, a także gdzie w wyrażeniu się zaczyn i kończy. Request body wyglądałaby wówczas jak poniżej:

{
	"text": "@{triggerBody()['text']}",
	"intentName": "Invoices",
	"entityLabels":
	[
		{
			"entityName": "Invoices::Bill",
			"startCharIndex": 1,
			"endCharIndex": 23
		}
	]
}

Powyższe nie tylko doda wyrażenie, ale również ustawi tekst między 1 a 23 znakiem jako encję „Bill” z listy „Invoices”.

Następnie – uruchom trening.

A teraz przychodzi najlepsza część. W nieskończonej pętli sprawdź status treningu. Ja sprawdzam tylko status treningu modelu zbudowanego z mojej intencji, dlatego filtruję wszystkie zwrócone statusy, aby sprawdzić tylko ten pożądany:

  1. Wysyłam żądanie GET by sprawdzić status treningu wszystkich modeli w mojej aplikacji;
  2. Filtruję wynik, pozostawiając informacje jedynie o modelu zbudowanym dla tej intencji, do której dodaję wyrażenie;
  3. Sprawdzam, czy status jest inny niż „InProgress”. Może być także „Success”, „Failed” albo „UpToDate”.
  4. Jeśli status jest inny, wówczas ustawiam wartość zmiennej na true i kończę pętlę.
  5. W przeciwnym razie workflow czeka 5 sekund przed kolejnym sprawdzeniem.

Na koniec wyślij żądanie „Publish”, aby ostatnie zmiany były dostępne:

Podsumowanie

I to już wszystko. Proces jest naprawdę nieskomplikowany, więc możesz go równie łatwo wdrożyć w swoich przepływach pracy. To, co może być trudne, to ustalenie, jakie encje są obecne w wyrażeniu. Dla tego zadania nie mam żadnego automatycznego rozwiązania. Powiedziałbym, że Twój proces powinien po prostu dodawać nowe wyrażenia, ale zadanie oznaczania w nich encji powinno być wykonywane przez człowieka.

Pamiętaj też, że to podejście, które ci pokazałem, wymaga licencji premium na Power Automate.

Proszę, zostaw swoje komentarze i pytania poniżej. Dzięki!


Tomasz Poszytek

Cześć! Nazywam się Tomasz. Jestem ekspertem w dziedzinie automatyzacji procesów i budowaniu rozwiązań dla biznesu z użyciem Power Platform. Jestem Microsoft MVP i Nintex vTE.

Brak komentarzy

Wyślij komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.