32 KiB
Zrozumienie języka
Szkic autorstwa Nitya Narasimhan. Kliknij obrazek, aby zobaczyć większą wersję.
Quiz przed wykładem
Wprowadzenie
W poprzedniej lekcji przekształciłeś mowę na tekst. Aby użyć tego do zaprogramowania inteligentnego timera, Twój kod musi zrozumieć, co zostało powiedziane. Możesz założyć, że użytkownik wypowie ustaloną frazę, taką jak „Ustaw timer na 3 minuty”, i przeanalizować to wyrażenie, aby określić, jak długo timer powinien działać, ale to nie jest zbyt przyjazne dla użytkownika. Jeśli użytkownik powie „Ustaw timer na 3 minuty”, Ty lub ja zrozumiemy, co ma na myśli, ale Twój kod nie, ponieważ oczekuje ustalonej frazy.
Tutaj wkracza zrozumienie języka, wykorzystując modele AI do interpretacji tekstu i zwracania potrzebnych szczegółów, na przykład zdolność do zrozumienia zarówno „Ustaw timer na 3 minuty”, jak i „Ustaw timer na 3 minuty”, że wymagany jest timer na 3 minuty.
W tej lekcji dowiesz się o modelach zrozumienia języka, jak je tworzyć, trenować i używać w swoim kodzie.
W tej lekcji omówimy:
- Zrozumienie języka
- Tworzenie modelu zrozumienia języka
- Intencje i jednostki
- Użycie modelu zrozumienia języka
Zrozumienie języka
Ludzie używają języka do komunikacji od setek tysięcy lat. Komunikujemy się za pomocą słów, dźwięków lub działań i rozumiemy, co zostało powiedziane, zarówno znaczenie słów, dźwięków czy działań, jak i ich kontekst. Rozumiemy szczerość i sarkazm, pozwalając tym samym słowom oznaczać różne rzeczy w zależności od tonu naszego głosu.
✅ Pomyśl o niektórych rozmowach, które prowadziłeś ostatnio. Jak wiele z tych rozmów byłoby trudnych do zrozumienia dla komputera, ponieważ wymagałyby kontekstu?
Zrozumienie języka, zwane również zrozumieniem języka naturalnego, jest częścią dziedziny sztucznej inteligencji zwanej przetwarzaniem języka naturalnego (NLP) i dotyczy rozumienia tekstu, próbując zrozumieć szczegóły słów lub zdań. Jeśli używasz asystenta głosowego, takiego jak Alexa czy Siri, korzystasz z usług zrozumienia języka. Są to usługi AI działające w tle, które przekształcają „Alexa, odtwórz najnowszy album Taylor Swift” w moją córkę tańczącą po salonie do swoich ulubionych utworów.
💁 Komputery, mimo wszystkich swoich postępów, wciąż mają przed sobą długą drogę, aby naprawdę zrozumieć tekst. Kiedy mówimy o zrozumieniu języka przez komputery, nie mamy na myśli niczego nawet zbliżonego do zaawansowanej komunikacji międzyludzkiej, lecz raczej wyciąganie kluczowych szczegółów z tekstu.
Jako ludzie rozumiemy język bez większego zastanowienia. Jeśli poproszę innego człowieka, aby „odtworzył najnowszy album Taylor Swift”, instynktownie zrozumie, co mam na myśli. Dla komputera jest to trudniejsze. Musiałby wziąć słowa, przekształcone z mowy na tekst, i wyodrębnić następujące informacje:
- Muzyka musi zostać odtworzona
- Muzyka pochodzi od artystki Taylor Swift
- Konkretna muzyka to cały album składający się z wielu utworów w określonej kolejności
- Taylor Swift ma wiele albumów, więc trzeba je posortować chronologicznie, a najnowszy jest tym, który jest wymagany
✅ Pomyśl o innych zdaniach, które wypowiadałeś, składając prośby, na przykład zamawiając kawę lub prosząc członka rodziny o podanie czegoś. Spróbuj rozłożyć je na części informacji, które komputer musiałby wyodrębnić, aby zrozumieć zdanie.
Modele zrozumienia języka to modele AI, które są trenowane do wyodrębniania określonych szczegółów z języka, a następnie są trenowane do konkretnych zadań za pomocą transferu uczenia, w taki sam sposób, w jaki trenowałeś model Custom Vision za pomocą małego zestawu obrazów. Możesz wziąć model, a następnie trenować go za pomocą tekstu, który chcesz, aby rozumiał.
Tworzenie modelu zrozumienia języka
Możesz tworzyć modele zrozumienia języka za pomocą LUIS, usługi zrozumienia języka od Microsoftu, która jest częścią Cognitive Services.
Zadanie - utwórz zasób autorski
Aby korzystać z LUIS, musisz utworzyć zasób autorski.
-
Użyj następującego polecenia, aby utworzyć zasób autorski w swojej grupie zasobów
smart-timer
:az cognitiveservices account create --name smart-timer-luis-authoring \ --resource-group smart-timer \ --kind LUIS.Authoring \ --sku F0 \ --yes \ --location <location>
Zamień
<location>
na lokalizację, którą użyłeś podczas tworzenia grupy zasobów.⚠️ LUIS nie jest dostępny we wszystkich regionach, więc jeśli otrzymasz następujący błąd:
InvalidApiSetId: The account type 'LUIS.Authoring' is either invalid or unavailable in given region.
wybierz inny region.
To utworzy zasób autorski LUIS w wersji darmowej.
Zadanie - utwórz aplikację zrozumienia języka
-
Otwórz portal LUIS pod adresem luis.ai w swojej przeglądarce i zaloguj się na to samo konto, którego używasz w Azure.
-
Postępuj zgodnie z instrukcjami w oknie dialogowym, aby wybrać swoją subskrypcję Azure, a następnie wybierz zasób
smart-timer-luis-authoring
, który właśnie utworzyłeś. -
Z listy Conversation apps wybierz przycisk New app, aby utworzyć nową aplikację. Nazwij nową aplikację
smart-timer
i ustaw Culture na swój język.💁 Istnieje pole dla zasobu predykcji. Możesz utworzyć drugi zasób tylko do predykcji, ale darmowy zasób autorski pozwala na 1000 predykcji miesięcznie, co powinno wystarczyć na potrzeby rozwoju, więc możesz pozostawić to pole puste.
-
Przeczytaj przewodnik, który pojawi się po utworzeniu aplikacji, aby zrozumieć kroki potrzebne do trenowania modelu zrozumienia języka. Zamknij ten przewodnik, gdy skończysz.
Intencje i jednostki
Zrozumienie języka opiera się na intencjach i jednostkach. Intencje to cel wypowiedzianych słów, na przykład odtwarzanie muzyki, ustawianie timera czy zamawianie jedzenia. Jednostki to to, do czego odnosi się intencja, na przykład album, długość timera czy rodzaj jedzenia. Każde zdanie interpretowane przez model powinno mieć co najmniej jedną intencję i opcjonalnie jedną lub więcej jednostek.
Kilka przykładów:
Zdanie | Intencja | Jednostki |
---|---|---|
„Odtwórz najnowszy album Taylor Swift” | odtwórz muzykę | najnowszy album Taylor Swift |
„Ustaw timer na 3 minuty” | ustaw timer | 3 minuty |
„Anuluj mój timer” | anuluj timer | Brak |
„Zamów 3 duże pizze z ananasem i sałatkę cezar” | zamów jedzenie | 3 duże pizze z ananasem, sałatka cezar |
✅ Z zastanowionymi wcześniej zdaniami, jaka byłaby intencja i jakie jednostki w tych zdaniach?
Aby trenować LUIS, najpierw ustawiasz jednostki. Mogą to być ustalone listy terminów lub wyuczone z tekstu. Na przykład możesz dostarczyć ustaloną listę jedzenia dostępnego w menu, z wariantami (lub synonimami) każdego słowa, takimi jak bakłażan i oberżyna jako warianty oberżyny. LUIS ma również wbudowane jednostki, które można wykorzystać, takie jak liczby i lokalizacje.
Dla ustawiania timera możesz mieć jedną jednostkę korzystającą z wbudowanych jednostek liczbowych dla czasu i drugą dla jednostek, takich jak minuty i sekundy. Każda jednostka miałaby wiele wariantów, aby uwzględnić formy pojedyncze i mnogie - takie jak minuta i minuty.
Po zdefiniowaniu jednostek tworzysz intencje. Są one wyuczone przez model na podstawie przykładów zdań, które dostarczasz (znanych jako wypowiedzi). Na przykład dla intencji ustaw timer możesz dostarczyć następujące zdania:
ustaw timer na 1 sekundę
ustaw timer na 1 minutę i 12 sekund
ustaw timer na 3 minuty
ustaw timer na 9 minut i 30 sekund
Następnie informujesz LUIS, które części tych zdań odpowiadają jednostkom:
Zdanie ustaw timer na 1 minutę i 12 sekund
ma intencję ustaw timer
. Ma również 2 jednostki z 2 wartościami każda:
czas | jednostka | |
---|---|---|
1 minuta | 1 | minuta |
12 sekund | 12 | sekunda |
Aby wytrenować dobry model, potrzebujesz różnych przykładów zdań, aby uwzględnić wiele różnych sposobów, w jakie ktoś może poprosić o to samo.
💁 Jak w przypadku każdego modelu AI, im więcej danych i im bardziej dokładne dane użyjesz do trenowania, tym lepszy będzie model.
✅ Pomyśl o różnych sposobach, w jakie możesz poprosić o to samo i oczekiwać, że człowiek to zrozumie.
Zadanie - dodaj jednostki do modeli zrozumienia języka
Dla timera musisz dodać 2 jednostki - jedną dla jednostki czasu (minuty lub sekundy) i jedną dla liczby minut lub sekund.
Instrukcje dotyczące korzystania z portalu LUIS znajdziesz w Quickstart: Build your app in LUIS portal documentation on Microsoft docs.
-
Z portalu LUIS wybierz zakładkę Entities i dodaj wbudowaną jednostkę number, wybierając przycisk Add prebuilt entity, a następnie wybierając number z listy.
-
Utwórz nową jednostkę dla jednostki czasu, używając przycisku Create. Nazwij jednostkę
time unit
i ustaw typ na List. Dodaj wartości dlaminute
isecond
do listy Normalized values, dodając formy pojedyncze i mnogie do listy synonyms. Naciśnijreturn
po dodaniu każdego synonimu, aby dodać go do listy.Wartość znormalizowana Synonimy minuta minuta, minuty sekunda sekunda, sekundy
Zadanie - dodaj intencje do modeli zrozumienia języka
-
Z zakładki Intents wybierz przycisk Create, aby utworzyć nową intencję. Nazwij tę intencję
set timer
. -
W przykładach wpisz różne sposoby ustawiania timera, używając zarówno minut, sekund, jak i kombinacji minut i sekund. Przykłady mogą być:
ustaw timer na 1 sekundę
ustaw timer na 4 minuty
ustaw timer na cztery minuty i sześć sekund
ustaw timer na 9 minut i 30 sekund
ustaw timer na 1 minutę i 12 sekund
ustaw timer na 3 minuty
ustaw timer na 3 minuty i 1 sekundę
ustaw timer na trzy minuty i jedną sekundę
ustaw timer na 1 minutę i 1 sekundę
ustaw timer na 30 sekund
ustaw timer na 1 sekundę
Wymieszaj liczby jako słowa i cyfry, aby model nauczył się obsługiwać oba.
-
Podczas wpisywania każdego przykładu LUIS zacznie wykrywać jednostki i podkreślać oraz oznaczać te, które znajdzie.
Zadanie - wytrenuj i przetestuj model
-
Gdy jednostki i intencje są skonfigurowane, możesz wytrenować model, używając przycisku Train w górnym menu. Wybierz ten przycisk, a model powinien wytrenować się w ciągu kilku sekund. Przycisk będzie wyszarzony podczas trenowania i ponownie aktywowany po zakończeniu.
-
Wybierz przycisk Test z górnego menu, aby przetestować model zrozumienia języka. Wpisz tekst, taki jak
ustaw timer na 5 minut i 4 sekundy
, i naciśnij enter. Zdanie pojawi się w polu poniżej pola tekstowego, w które je wpisałeś, a poniżej będzie top intent, czyli intencja wykryta z najwyższym prawdopodobieństwem. Powinna to byćset timer
. Nazwa intencji będzie poprzedzona prawdopodobieństwem, że wykryta intencja była właściwa. -
Wybierz opcję Inspect, aby zobaczyć szczegółowy podział wyników. Zobaczysz najwyżej ocenioną intencję z jej procentowym prawdopodobieństwem, wraz z listami wykrytych jednostek.
-
Zamknij panel Test, gdy skończysz testowanie.
Zadanie - opublikuj model
Aby używać tego modelu w kodzie, musisz go opublikować. Podczas publikowania z LUIS możesz publikować do środowiska testowego (staging) lub produkcyjnego. W tej lekcji środowisko testowe jest wystarczające.
-
Z portalu LUIS wybierz przycisk Publish z górnego menu.
-
Upewnij się, że wybrano Staging slot, a następnie wybierz Done. Zobaczysz powiadomienie, gdy aplikacja zostanie opublikowana.
-
Możesz to przetestować za pomocą curl. Aby zbudować polecenie curl, potrzebujesz trzech wartości - punktu końcowego, identyfikatora aplikacji (App ID) i klucza API. Można je znaleźć w zakładce MANAGE, którą można wybrać z górnego menu.
- Z sekcji Settings skopiuj App ID.
-
W sekcji Azure Resources wybierz Authoring Resource i skopiuj Primary Key oraz Endpoint URL.
-
Uruchom następujące polecenie curl w wierszu poleceń lub terminalu:
curl "<endpoint url>/luis/prediction/v3.0/apps/<app id>/slots/staging/predict" \ --request GET \ --get \ --data "subscription-key=<primary key>" \ --data "verbose=false" \ --data "show-all-intents=true" \ --data-urlencode "query=<sentence>"
Zamień
<endpoint url>
na Endpoint URL z sekcji Azure Resources.Zamień
<app id>
na App ID z sekcji Settings.Zamień
<primary key>
na Primary Key z sekcji Azure Resources.Zamień
<sentence>
na zdanie, które chcesz przetestować. -
Wynik tego wywołania będzie dokumentem JSON, który zawiera szczegóły zapytania, główną intencję oraz listę jednostek podzielonych według typów.
{ "query": "set a timer for 45 minutes and 12 seconds", "prediction": { "topIntent": "set timer", "intents": { "set timer": { "score": 0.97031575 }, "None": { "score": 0.02205793 } }, "entities": { "number": [ 45, 12 ], "time-unit": [ [ "minute" ], [ "second" ] ] } } }
Powyższy JSON pochodzi z zapytania o
set a timer for 45 minutes and 12 seconds
:set timer
było główną intencją z prawdopodobieństwem 97%.- Wykryto dwie jednostki typu number:
45
i12
. - Wykryto dwie jednostki typu time-unit:
minute
isecond
.
Użycie modelu rozumienia języka
Po opublikowaniu model LUIS można wywoływać z poziomu kodu. W poprzednich lekcjach używałeś IoT Hub do obsługi komunikacji z usługami w chmurze, wysyłania telemetrii i nasłuchiwania poleceń. Jest to bardzo asynchroniczne – po wysłaniu telemetrii Twój kod nie czeka na odpowiedź, a jeśli usługa w chmurze jest niedostępna, nie będziesz o tym wiedział.
W przypadku inteligentnego timera chcemy uzyskać odpowiedź natychmiast, aby poinformować użytkownika, że timer został ustawiony, lub ostrzec go, że usługi w chmurze są niedostępne. Aby to zrobić, nasze urządzenie IoT będzie wywoływać bezpośrednio punkt końcowy sieciowy, zamiast polegać na IoT Hub.
Zamiast wywoływać LUIS bezpośrednio z urządzenia IoT, możesz użyć kodu bezserwerowego z innym typem wyzwalacza – wyzwalaczem HTTP. Pozwala to aplikacji funkcji nasłuchiwać żądań REST i na nie odpowiadać. Ta funkcja będzie punktem końcowym REST, który Twoje urządzenie może wywoływać.
💁 Chociaż możesz wywoływać LUIS bezpośrednio z urządzenia IoT, lepiej jest użyć czegoś takiego jak kod bezserwerowy. Dzięki temu, gdy chcesz zmienić aplikację LUIS, którą wywołujesz, na przykład po przeszkoleniu lepszego modelu lub modelu w innym języku, musisz zaktualizować tylko kod w chmurze, a nie wdrażać ponownie kod na potencjalnie tysiącach lub milionach urządzeń IoT.
Zadanie – utwórz aplikację funkcji bezserwerowych
-
Utwórz aplikację Azure Functions o nazwie
smart-timer-trigger
i otwórz ją w VS Code. -
Dodaj wyzwalacz HTTP do tej aplikacji o nazwie
speech-trigger
, używając następującego polecenia w terminalu VS Code:func new --name text-to-timer --template "HTTP trigger"
To utworzy wyzwalacz HTTP o nazwie
text-to-timer
. -
Przetestuj wyzwalacz HTTP, uruchamiając aplikację funkcji. Po uruchomieniu zobaczysz punkt końcowy wymieniony w wynikach:
Functions: text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timer
Przetestuj to, ładując URL http://localhost:7071/api/text-to-timer w przeglądarce.
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
Zadanie – użyj modelu rozumienia języka
-
SDK dla LUIS jest dostępne jako pakiet Pip. Dodaj następującą linię do pliku
requirements.txt
, aby dodać zależność od tego pakietu:azure-cognitiveservices-language-luis
-
Upewnij się, że terminal VS Code ma aktywowane środowisko wirtualne, i uruchom następujące polecenie, aby zainstalować pakiety Pip:
pip install -r requirements.txt
💁 Jeśli pojawią się błędy, może być konieczna aktualizacja pip za pomocą następującego polecenia:
pip install --upgrade pip
-
Dodaj nowe wpisy do pliku
local.settings.json
dla swojego klucza API LUIS, Endpoint URL i App ID z zakładki MANAGE w portalu LUIS:"LUIS_KEY": "<primary key>", "LUIS_ENDPOINT_URL": "<endpoint url>", "LUIS_APP_ID": "<app id>"
Zamień
<endpoint url>
na Endpoint URL z sekcji Azure Resources w zakładce MANAGE. Będzie tohttps://<location>.api.cognitive.microsoft.com/
.Zamień
<app id>
na App ID z sekcji Settings w zakładce MANAGE.Zamień
<primary key>
na Primary Key z sekcji Azure Resources w zakładce MANAGE. -
Dodaj następujące importy do pliku
__init__.py
:import json import os from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient from msrest.authentication import CognitiveServicesCredentials
To importuje niektóre biblioteki systemowe oraz biblioteki do interakcji z LUIS.
-
Usuń zawartość metody
main
i dodaj następujący kod:luis_key = os.environ['LUIS_KEY'] endpoint_url = os.environ['LUIS_ENDPOINT_URL'] app_id = os.environ['LUIS_APP_ID'] credentials = CognitiveServicesCredentials(luis_key) client = LUISRuntimeClient(endpoint=endpoint_url, credentials=credentials)
Ten kod ładuje wartości, które dodałeś do pliku
local.settings.json
dla swojej aplikacji LUIS, tworzy obiekt poświadczeń z Twoim kluczem API, a następnie tworzy obiekt klienta LUIS do interakcji z Twoją aplikacją LUIS. -
Wyzwalacz HTTP będzie wywoływany z tekstem do zrozumienia przesłanym jako JSON, z tekstem w właściwości
text
. Następujący kod wyodrębnia wartość z treści żądania HTTP i loguje ją do konsoli. Dodaj ten kod do funkcjimain
:req_body = req.get_json() text = req_body['text'] logging.info(f'Request - {text}')
-
Prognozy są żądane od LUIS przez wysłanie żądania prognozy – dokumentu JSON zawierającego tekst do przewidzenia. Utwórz to za pomocą następującego kodu:
prediction_request = { 'query' : text }
-
To żądanie można następnie wysłać do LUIS, używając slotu staging, na który Twoja aplikacja została opublikowana:
prediction_response = client.prediction.get_slot_prediction(app_id, 'Staging', prediction_request)
-
Odpowiedź prognozy zawiera główną intencję – intencję z najwyższym wynikiem prognozy, wraz z jednostkami. Jeśli główną intencją jest
set timer
, jednostki można odczytać, aby uzyskać czas potrzebny na timer:if prediction_response.prediction.top_intent == 'set timer': numbers = prediction_response.prediction.entities['number'] time_units = prediction_response.prediction.entities['time unit'] total_seconds = 0
Jednostki typu
number
będą tablicą liczb. Na przykład, jeśli powiesz "Set a four minute 17 second timer.", tablicanumber
będzie zawierać 2 liczby całkowite – 4 i 17.Jednostki typu
time unit
będą tablicą tablic ciągów znaków, z każdą jednostką czasu jako tablicą ciągów znaków wewnątrz tablicy. Na przykład, jeśli powiesz "Set a four minute 17 second timer.", tablicatime unit
będzie zawierać 2 tablice z pojedynczymi wartościami –['minute']
i['second']
.Wersja JSON tych jednostek dla "Set a four minute 17 second timer." wygląda następująco:
{ "number": [4, 17], "time unit": [ ["minute"], ["second"] ] }
Ten kod definiuje również licznik dla całkowitego czasu timera w sekundach. Zostanie on wypełniony wartościami z jednostek.
-
Jednostki nie są powiązane, ale możemy przyjąć pewne założenia na ich temat. Będą w kolejności wypowiedzianej, więc pozycja w tablicy może być użyta do określenia, która liczba odpowiada której jednostce czasu. Na przykład:
- "Set a 30 second timer" – będzie miało jedną liczbę,
30
, i jedną jednostkę czasu,second
, więc pojedyncza liczba będzie odpowiadać pojedynczej jednostce czasu. - "Set a 2 minute and 30 second timer" – będzie miało dwie liczby,
2
i30
, oraz dwie jednostki czasu,minute
isecond
, więc pierwsza liczba będzie dla pierwszej jednostki czasu (2 minuty), a druga liczba dla drugiej jednostki czasu (30 sekund).
Następujący kod pobiera liczbę elementów w jednostkach typu
number
i używa jej do wyodrębnienia pierwszego elementu z każdej tablicy, następnie drugiego i tak dalej. Dodaj to wewnątrz blokuif
.for i in range(0, len(numbers)): number = numbers[i] time_unit = time_units[i][0]
Dla "Set a four minute 17 second timer." pętla wykona się dwa razy, dając następujące wartości:
licznik pętli number
time_unit
0 4 minute 1 17 second - "Set a 30 second timer" – będzie miało jedną liczbę,
-
Wewnątrz tej pętli użyj liczby i jednostki czasu, aby obliczyć całkowity czas timera, dodając 60 sekund dla każdej minuty i liczbę sekund dla każdej sekundy.
if time_unit == 'minute': total_seconds += number * 60 else: total_seconds += number
-
Poza tą pętlą przez jednostki, zaloguj całkowity czas timera:
logging.info(f'Timer required for {total_seconds} seconds')
-
Liczba sekund musi zostać zwrócona z funkcji jako odpowiedź HTTP. Na końcu bloku
if
dodaj następujący kod:payload = { 'seconds': total_seconds } return func.HttpResponse(json.dumps(payload), status_code=200)
Ten kod tworzy ładunek zawierający całkowitą liczbę sekund dla timera, konwertuje go na ciąg JSON i zwraca jako wynik HTTP z kodem statusu 200, co oznacza, że wywołanie zakończyło się sukcesem.
-
Na koniec, poza blokiem
if
, obsłuż sytuację, gdy intencja nie została rozpoznana, zwracając kod błędu:return func.HttpResponse(status_code=404)
404 to kod statusu dla not found.
-
Uruchom aplikację funkcji i przetestuj ją za pomocą curl.
curl --request POST 'http://localhost:7071/api/text-to-timer' \ --header 'Content-Type: application/json' \ --include \ --data '{"text":"<text>"}'
Zamień
<text>
na tekst swojego żądania, na przykładset a 2 minutes 27 second timer
.Zobaczysz następujący wynik z aplikacji funkcji:
Functions: text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timer For detailed output, run func with --verbose flag. [2021-06-26T19:45:14.502Z] Worker process started and initialized. [2021-06-26T19:45:19.338Z] Host lock lease acquired by instance ID '000000000000000000000000951CAE4E'. [2021-06-26T19:45:52.059Z] Executing 'Functions.text-to-timer' (Reason='This function was programmatically called via the host APIs.', Id=f68bfb90-30e4-47a5-99da-126b66218e81) [2021-06-26T19:45:53.577Z] Timer required for 147 seconds [2021-06-26T19:45:53.746Z] Executed 'Functions.text-to-timer' (Succeeded, Id=f68bfb90-30e4-47a5-99da-126b66218e81, Duration=1750ms)
Wywołanie curl zwróci następujące dane:
HTTP/1.1 200 OK Date: Tue, 29 Jun 2021 01:14:11 GMT Content-Type: text/plain; charset=utf-8 Server: Kestrel Transfer-Encoding: chunked {"seconds": 147}
Liczba sekund dla timera znajduje się w wartości
"seconds"
.
💁 Kod ten znajdziesz w folderze code/functions.
Zadanie – udostępnij swoją funkcję urządzeniu IoT
-
Aby Twoje urządzenie IoT mogło wywołać Twój punkt końcowy REST, będzie musiało znać URL. Kiedy uzyskałeś do niego dostęp wcześniej, używałeś
localhost
, który jest skrótem do dostępu do punktów końcowych REST na Twoim lokalnym komputerze. Aby umożliwić dostęp urządzeniu IoT, musisz albo opublikować aplikację w chmurze, albo uzyskać swój adres IP, aby uzyskać dostęp lokalnie.⚠️ Jeśli używasz Wio Terminal, łatwiej jest uruchomić aplikację funkcji lokalnie, ponieważ będą zależności od bibliotek, które uniemożliwią wdrożenie aplikacji funkcji w taki sam sposób, jak wcześniej. Uruchom aplikację funkcji lokalnie i uzyskaj do niej dostęp za pomocą adresu IP swojego komputera. Jeśli chcesz wdrożyć w chmurze, informacje na temat tego, jak to zrobić, zostaną podane w późniejszej lekcji.
-
Opublikuj aplikację Functions – postępuj zgodnie z instrukcjami z wcześniejszych lekcji, aby opublikować swoją aplikację funkcji w chmurze. Po opublikowaniu URL będzie miał postać
https://<APP_NAME>.azurewebsites.net/api/text-to-timer
, gdzie<APP_NAME>
to nazwa Twojej aplikacji funkcji. Upewnij się, że opublikowałeś również swoje ustawienia lokalne.Podczas pracy z wyzwalaczami HTTP są one domyślnie zabezpieczone kluczem aplikacji funkcji. Aby uzyskać ten klucz, uruchom następujące polecenie:
az functionapp keys list --resource-group smart-timer \ --name <APP_NAME>
Skopiuj wartość wpisu
default
z sekcjifunctionKeys
.{ "functionKeys": { "default": "sQO1LQaeK9N1qYD6SXeb/TctCmwQEkToLJU6Dw8TthNeUH8VA45hlA==" }, "masterKey": "RSKOAIlyvvQEQt9dfpabJT018scaLpQu9p1poHIMCxx5LYrIQZyQ/g==", "systemKeys": {} }
Ten klucz musi zostać dodany jako parametr zapytania do URL, więc ostateczny URL będzie miał postać
https://<APP_NAME>.azurewebsites.net/api/text-to-timer?code=<FUNCTION_KEY>
, gdzie<APP_NAME>
to nazwa Twojej aplikacji funkcji, a<FUNCTION_KEY>
to Twój domyślny klucz funkcji.💁 Możesz zmienić typ autoryzacji wyzwalacza HTTP, używając ustawienia
authlevel
w plikufunction.json
. Więcej na ten temat możesz przeczytać w sekcji konfiguracji dokumentacji wyzwalacza HTTP w Azure Functions na Microsoft Docs. -
Uruchom aplikację funkcji lokalnie i uzyskaj dostęp za pomocą adresu IP – możesz uzyskać adres IP swojego komputera w lokalnej sieci i użyć go do zbudowania URL.
Znajdź swój adres IP:
- Na Windows 10, postępuj zgodnie z przewodnikiem znajdowania adresu IP
- Na macOS, postępuj zgodnie z przewodnikiem znajdowania adresu IP na Macu
- Na Linux, postępuj zgodnie z sekcją znajdowania prywatnego adresu IP w przewodniku znajdowania adresu IP w Linux
Po uzyskaniu adresu IP będziesz mógł uzyskać dostęp do funkcji pod adresem
http://
.
-
:7071/api/text-to-timer, gdzie
<IP_ADDRESS>to Twój adres IP, na przykład
http://192.168.1.10:7071/api/text-to-timer`.
> 💁 Zwróć uwagę, że używany jest port 7071, więc po adresie IP musisz dodać `:7071`.
> 💁 To będzie działać tylko wtedy, gdy Twoje urządzenie IoT znajduje się w tej samej sieci co Twój komputer.
- Przetestuj endpoint, uzyskując do niego dostęp za pomocą curl.
🚀 Wyzwanie
Istnieje wiele sposobów na złożenie tej samej prośby, na przykład ustawienie timera. Pomyśl o różnych sposobach, aby to zrobić, i użyj ich jako przykładów w swojej aplikacji LUIS. Przetestuj je, aby zobaczyć, jak dobrze Twój model radzi sobie z różnymi sposobami składania prośby o timer.
Quiz po wykładzie
Przegląd i samodzielna nauka
- Przeczytaj więcej o LUIS i jego możliwościach na stronie dokumentacji Language Understanding (LUIS) na Microsoft Docs
- Dowiedz się więcej o rozumieniu języka na stronie o naturalnym rozumieniu języka na Wikipedii
- Przeczytaj więcej o wyzwalaczach HTTP w dokumentacji wyzwalaczy HTTP dla Azure Functions na Microsoft Docs
Zadanie
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.