You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/sl/6-consumer/lessons/2-language-understanding/README.md

31 KiB

Razumeti jezik

Skica pregleda te lekcije

Skica avtorja Nitya Narasimhan. Kliknite sliko za večjo različico.

Kviz pred predavanjem

Kviz pred predavanjem

Uvod

V prejšnji lekciji ste pretvorili govor v besedilo. Da bi to lahko uporabili za programiranje pametnega časovnika, mora vaša koda razumeti, kaj je bilo povedano. Lahko bi predpostavili, da bo uporabnik izrekel točno določen stavek, kot na primer "Nastavi časovnik za 3 minute", in analizirali ta izraz, da bi ugotovili, kako dolgo naj časovnik traja. Vendar to ni zelo uporabniku prijazno. Če bi uporabnik rekel "Nastavi časovnik za 3 minute", bi vi ali jaz razumeli, kaj to pomeni, vaša koda pa ne, saj bi pričakovala točno določen stavek.

Tu pride v poštev razumevanje jezika, kjer se uporabljajo AI modeli za interpretacijo besedila in vračanje potrebnih podrobnosti. Na primer, model bi lahko razumel tako "Nastavi časovnik za 3 minute" kot "Nastavi 3-minutni časovnik" in ugotovil, da je potreben časovnik za 3 minute.

V tej lekciji boste spoznali modele za razumevanje jezika, kako jih ustvariti, trenirati in uporabljati v svoji kodi.

V tej lekciji bomo obravnavali:

Razumevanje jezika

Ljudje uporabljamo jezik za komunikacijo že stotisoče let. Komuniciramo z besedami, zvoki ali dejanji in razumemo, kaj je bilo povedano, tako pomen besed, zvokov ali dejanj kot tudi njihov kontekst. Razumemo iskrenost in sarkazem, kar omogoča, da iste besede pomenijo različne stvari glede na ton našega glasu.

Razmislite o nekaterih pogovorih, ki ste jih imeli nedavno. Koliko teh pogovorov bi bilo težko razumeti računalniku, ker potrebujejo kontekst?

Razumevanje jezika, imenovano tudi razumevanje naravnega jezika, je del področja umetne inteligence, imenovanega obdelava naravnega jezika (NLP), in se ukvarja z razumevanjem besedil, poskuša razumeti podrobnosti besed ali stavkov. Če uporabljate glasovnega asistenta, kot sta Alexa ali Siri, ste že uporabljali storitve za razumevanje jezika. To so AI storitve v ozadju, ki na primer pretvorijo "Alexa, predvajaj najnovejši album Taylor Swift" v mojo hčerko, ki pleše po dnevni sobi ob svojih najljubših pesmih.

💁 Računalniki, kljub vsemu napredku, še vedno niso sposobni resnično razumeti besedila. Ko govorimo o razumevanju jezika pri računalnikih, ne mislimo na ničesar, kar bi bilo blizu človeški komunikaciji. Namesto tega mislimo na to, da vzamejo nekaj besed in izluščijo ključne podrobnosti.

Kot ljudje razumemo jezik, ne da bi o tem zares razmišljali. Če bi prosil drugega človeka, naj "predvaja najnovejši album Taylor Swift", bi ta instinktivno vedel, kaj mislim. Za računalnik je to težje. Moral bi vzeti besede, pretvorjene iz govora v besedilo, in ugotoviti naslednje informacije:

  • Predvajati je treba glasbo
  • Glasba je od izvajalke Taylor Swift
  • Specifična glasba je celoten album z več skladbami v določenem vrstnem redu
  • Taylor Swift ima veliko albumov, zato jih je treba razvrstiti po kronološkem vrstnem redu, pri čemer je najnovejši tisti, ki je potreben

Pomislite na nekaj drugih stavkov, ki ste jih izrekli pri podajanju prošenj, na primer naročanje kave ali prošnja družinskemu članu, naj vam nekaj poda. Poskusite jih razčleniti na informacije, ki bi jih računalnik moral izluščiti, da bi razumel stavek.

Modeli za razumevanje jezika so AI modeli, ki so trenirani za izluščitev določenih podrobnosti iz jezika in so nato trenirani za specifične naloge z uporabo prenosa učenja, podobno kot ste trenirali model Custom Vision z majhnim naborom slik. Lahko vzamete model in ga nato trenirate z besedilom, ki ga želite, da razume.

Ustvarjanje modela za razumevanje jezika

Logotip LUIS

Modele za razumevanje jezika lahko ustvarite z LUIS, Microsoftovo storitvijo za razumevanje jezika, ki je del Cognitive Services.

Naloga - ustvarjanje vira za avtorstvo

Za uporabo LUIS morate ustvariti vir za avtorstvo.

  1. Uporabite naslednji ukaz za ustvarjanje vira za avtorstvo v svoji skupini virov smart-timer:

    az cognitiveservices account create --name smart-timer-luis-authoring \
                                        --resource-group smart-timer \
                                        --kind LUIS.Authoring \
                                        --sku F0 \
                                        --yes \
                                        --location <location>
    

    Zamenjajte <location> z lokacijo, ki ste jo uporabili pri ustvarjanju skupine virov.

    ⚠️ LUIS ni na voljo v vseh regijah, zato če prejmete naslednjo napako:

    InvalidApiSetId: The account type 'LUIS.Authoring' is either invalid or unavailable in given region.
    

    izberite drugo regijo.

    To bo ustvarilo brezplačen vir za avtorstvo LUIS.

Naloga - ustvarjanje aplikacije za razumevanje jezika

  1. Odprite portal LUIS na luis.ai v svojem brskalniku in se prijavite z istim računom, ki ste ga uporabljali za Azure.

  2. Sledite navodilom v pogovornem oknu za izbiro svoje naročnine Azure, nato izberite vir smart-timer-luis-authoring, ki ste ga pravkar ustvarili.

  3. Na seznamu Conversation apps izberite gumb New app, da ustvarite novo aplikacijo. Poimenujte novo aplikacijo smart-timer in nastavite Culture na svoj jezik.

    💁 Obstaja polje za napovedni vir. Lahko ustvarite drugi vir samo za napovedovanje, vendar brezplačen vir za avtorstvo omogoča 1.000 napovedi na mesec, kar bi moralo zadostovati za razvoj, zato lahko to polje pustite prazno.

  4. Preberite vodnik, ki se prikaže, ko ustvarite aplikacijo, da dobite razumevanje korakov, ki jih morate opraviti za treniranje modela za razumevanje jezika. Ko končate, zaprite vodnik.

Nameni in entitete

Razumevanje jezika temelji na namenih in entitetah. Nameni so tisto, kar besede želijo doseči, na primer predvajanje glasbe, nastavitev časovnika ali naročanje hrane. Entitete so tisto, na kar se namen nanaša, na primer album, dolžina časovnika ali vrsta hrane. Vsak stavek, ki ga model interpretira, mora imeti vsaj en namen in po želji eno ali več entitet.

Nekaj primerov:

Stavek Namen Entitete
"Predvajaj najnovejši album Taylor Swift" predvajaj glasbo najnovejši album Taylor Swift
"Nastavi časovnik za 3 minute" nastavi časovnik 3 minute
"Prekliči moj časovnik" prekliči časovnik Nobena
"Naroči 3 velike pice s šunko in solato Caesar" naroči hrano 3 velike pice s šunko, solata Caesar

Pri stavkih, o katerih ste razmišljali prej, kaj bi bil namen in katere entitete bi bile v tem stavku?

Za treniranje LUIS najprej nastavite entitete. Te so lahko fiksni seznam izrazov ali pa se učijo iz besedila. Na primer, lahko zagotovite fiksni seznam hrane, ki je na voljo v vašem meniju, z različicami (ali sopomenkami) vsake besede, kot sta jajčevec in melancan kot različici za melancan. LUIS ima tudi vnaprej pripravljene entitete, ki jih lahko uporabite, na primer številke in lokacije.

Za nastavitev časovnika bi lahko imeli eno entiteto, ki uporablja vnaprej pripravljene številčne entitete za čas, in drugo za enote, kot so minute in sekunde. Vsaka enota bi imela več različic za edninsko in množinsko obliko - na primer minuta in minute.

Ko so entitete definirane, ustvarite namene. Ti se učijo s pomočjo modela na podlagi primerov stavkov, ki jih zagotovite (imenovanih izreki). Na primer, za namen nastavi časovnik bi lahko zagotovili naslednje stavke:

  • nastavi časovnik za 1 sekundo
  • nastavi časovnik za 1 minuto in 12 sekund
  • nastavi časovnik za 3 minute
  • nastavi časovnik za 9 minut in 30 sekund

Nato LUIS-u poveste, kateri deli teh stavkov ustrezajo entitetam:

Stavek "nastavi časovnik za 1 minuto in 12 sekund" razdeljen na entitete

Stavek nastavi časovnik za 1 minuto in 12 sekund ima namen nastavi časovnik. Ima tudi 2 entiteti z 2 vrednostma:

čas enota
1 minuta 1 minuta
12 sekund 12 sekunda

Za treniranje dobrega modela potrebujete različne primere stavkov, ki pokrivajo številne različne načine, kako bi nekdo lahko prosil za isto stvar.

💁 Kot pri vsakem AI modelu, več podatkov in bolj natančni kot so podatki, ki jih uporabite za treniranje, boljši bo model.

Razmislite o različnih načinih, kako bi lahko prosili za isto stvar in pričakovali, da bi vas človek razumel.

Naloga - dodajanje entitet modelom za razumevanje jezika

Za časovnik morate dodati 2 entiteti - eno za enoto časa (minute ali sekunde) in eno za število minut ali sekund.

Navodila za uporabo portala LUIS najdete v Quickstart: Build your app in LUIS portal documentation on Microsoft docs.

  1. Na portalu LUIS izberite zavihek Entities in dodajte vnaprej pripravljeno entiteto number s klikom na gumb Add prebuilt entity, nato izberite number s seznama.

  2. Ustvarite novo entiteto za časovno enoto z gumbom Create. Poimenujte entiteto time unit in nastavite tip na List. Dodajte vrednosti za minute in second na seznam Normalized values, dodajte edninske in množinske oblike na seznam synonyms. Po vsakem dodajanju sopomenke pritisnite return, da jo dodate na seznam.

    Normalizirana vrednost Sopomenke
    minuta minuta, minute
    sekunda sekunda, sekunde

Naloga - dodajanje namenov modelom za razumevanje jezika

  1. Na zavihku Intents izberite gumb Create, da ustvarite nov namen. Poimenujte ta namen set timer.

  2. V primerih vnesite različne načine za nastavitev časovnika z minutami, sekundami ter kombinacijo minut in sekund. Primeri bi lahko bili:

    • nastavi časovnik za 1 sekundo
    • nastavi časovnik za 4 minute
    • nastavi časovnik za štiri minute in šest sekund
    • nastavi časovnik za 9 minut in 30 sekund
    • nastavi časovnik za 1 minuto in 12 sekund
    • nastavi časovnik za 3 minute
    • nastavi časovnik za 3 minute in 1 sekundo
    • nastavi časovnik za tri minute in eno sekundo
    • nastavi časovnik za 1 minuto in 1 sekundo
    • nastavi časovnik za 30 sekund
    • nastavi časovnik za 1 sekundo

    Mešajte številke kot besede in številčne vrednosti, da se model nauči obravnavati oboje.

  3. Ko vnesete vsak primer, bo LUIS začel zaznavati entitete in podčrtal ter označil vse, ki jih najde.

    Primeri z označenimi številkami in časovnimi enotami

Naloga - treniranje in testiranje modela

  1. Ko so entitete in nameni konfigurirani, lahko model trenirate z gumbom Train v zgornjem meniju. Izberite ta gumb, model pa se bo treniral v nekaj sekundah. Gumb bo med treniranjem onemogočen in ponovno omogočen, ko bo končano.

  2. Izberite gumb Test v zgornjem meniju, da preizkusite model za razumevanje jezika. Vnesite besedilo, na primer nastavi časovnik za 5 minut in 4 sekunde, in pritisnite return. Stavek se bo pojavil v polju pod besedilnim poljem, kamor ste ga vnesli, spodaj pa bo prikazan top intent ali namen, ki je bil zaznan z najvišjo verjetnostjo. To bi moralo biti set timer. Ime namena bo spremljala verjetnost, da je zaznani namen pravilen.

  3. Izberite možnost Inspect, da si ogledate razčlenitev rezultatov. Videli boste namen z najvišjo oceno in njegovo odstotno verjetnost, skupaj s seznami zaznanih entitet.

  4. Ko končate s testiranjem, zaprite okno Test.

Naloga - objava modela

Da bi ta model uporabili v kodi, ga morate objaviti. Pri objavi iz LUIS lahko objavite v okolje za testiranje (staging) ali v produkcijsko okolje za polno izdajo. V tej lekciji je okolje za testiranje dovolj.

  1. Na portalu LUIS izberite gumb Publish v zgornjem meniju.

  2. Prepričajte se, da je izbrana možnost Staging slot, nato izberite Done. Obvestilo vas bo obvestilo, ko bo aplikacija objavljena.

  3. To lahko preizkusite z uporabo ukaza curl. Za sestavo ukaza curl potrebujete tri vrednosti - končno točko (endpoint), ID aplikacije (App ID) in API ključ. Te vrednosti lahko pridobite na zavihku MANAGE, ki ga izberete v zgornjem meniju.

    1. Iz razdelka Settings kopirajte App ID.
  4. V razdelku Azure Resources izberite Authoring Resource in kopirajte Primary Key ter Endpoint URL.

  5. Zaženite naslednji ukaz curl v ukazni vrstici ali 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>"
    

    Zamenjajte <endpoint url> z Endpoint URL iz razdelka Azure Resources.

    Zamenjajte <app id> z App ID iz razdelka Settings.

    Zamenjajte <primary key> z Primary Key iz razdelka Azure Resources.

    Zamenjajte <sentence> z besedilom, ki ga želite testirati.

  6. Rezultat tega klica bo JSON dokument, ki podrobno opisuje poizvedbo, glavni namen (top intent) in seznam entitet, razčlenjenih po tipih.

    {
        "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"
                    ]
                ]
            }
        }
    }
    

    Zgornji JSON je rezultat poizvedbe z besedilom set a timer for 45 minutes and 12 seconds:

    • set timer je bil glavni namen z verjetnostjo 97 %.
    • Zaznani sta bili dve entiteti number, 45 in 12.
    • Zaznani sta bili dve entiteti time-unit, minute in second.

Uporaba modela za razumevanje jezika

Ko je model LUIS objavljen, ga lahko kličete iz kode. V prejšnjih lekcijah ste uporabljali IoT Hub za komunikacijo s storitvami v oblaku, pošiljanje telemetrije in poslušanje ukazov. To je zelo asinhrono - ko pošljete telemetrijo, vaša koda ne čaka na odgovor, in če storitev v oblaku ne deluje, tega ne boste vedeli.

Za pametni časovnik želimo takojšen odgovor, da lahko uporabniku povemo, da je časovnik nastavljen, ali ga opozorimo, da storitve v oblaku niso na voljo. Da to dosežemo, bo naša IoT naprava neposredno klicala spletni endpoint, namesto da bi se zanašala na IoT Hub.

Namesto da bi LUIS klicali neposredno iz IoT naprave, lahko uporabite strežniško kodo z drugačnim sprožilcem - HTTP sprožilec. To omogoča, da vaša funkcijska aplikacija posluša REST zahteve in nanje odgovarja. Ta funkcija bo REST endpoint, ki ga lahko pokliče vaša naprava.

💁 Čeprav lahko LUIS neposredno kličete iz svoje IoT naprave, je bolje uporabiti nekaj, kot je strežniška koda. Na ta način, ko želite spremeniti LUIS aplikacijo, ki jo kličete, na primer ko trenirate boljši model ali model v drugem jeziku, morate posodobiti samo kodo v oblaku, ne pa ponovno namestiti kode na potencialno tisoče ali milijone IoT naprav.

Naloga - ustvarite aplikacijo za strežniške funkcije

  1. Ustvarite Azure Functions aplikacijo z imenom smart-timer-trigger in jo odprite v VS Code.

  2. Dodajte HTTP sprožilec tej aplikaciji z imenom speech-trigger z naslednjim ukazom znotraj terminala v VS Code:

    func new --name text-to-timer --template "HTTP trigger"
    

    To bo ustvarilo HTTP sprožilec z imenom text-to-timer.

  3. Testirajte HTTP sprožilec tako, da zaženete funkcijsko aplikacijo. Ko se zažene, boste v izhodu videli seznam endpointov:

    Functions:
    
            text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timer
    

    Testirajte to tako, da naložite URL http://localhost:7071/api/text-to-timer v brskalniku.

    This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
    

Naloga - uporabite model za razumevanje jezika

  1. SDK za LUIS je na voljo prek Pip paketa. Dodajte naslednjo vrstico v datoteko requirements.txt, da dodate odvisnost od tega paketa:

    azure-cognitiveservices-language-luis
    
  2. Prepričajte se, da je terminal v VS Code aktiviral virtualno okolje, in zaženite naslednji ukaz za namestitev Pip paketov:

    pip install -r requirements.txt
    

    💁 Če naletite na napake, boste morda morali nadgraditi pip z naslednjim ukazom:

    pip install --upgrade pip
    
  3. Dodajte nove vnose v datoteko local.settings.json za vaš LUIS API Key, Endpoint URL in App ID iz zavihka MANAGE v LUIS portalu:

    "LUIS_KEY": "<primary key>",
    "LUIS_ENDPOINT_URL": "<endpoint url>",
    "LUIS_APP_ID": "<app id>"
    

    Zamenjajte <endpoint url> z Endpoint URL iz razdelka Azure Resources zavihka MANAGE. To bo https://<location>.api.cognitive.microsoft.com/.

    Zamenjajte <app id> z App ID iz razdelka Settings zavihka MANAGE.

    Zamenjajte <primary key> z Primary Key iz razdelka Azure Resources zavihka MANAGE.

  4. Dodajte naslednje uvoze v datoteko __init__.py:

    import json
    import os
    from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
    from msrest.authentication import CognitiveServicesCredentials
    

    To uvozi nekaj sistemskih knjižnic ter knjižnice za interakcijo z LUIS.

  5. Izbrišite vsebino metode main in dodajte naslednjo kodo:

    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)
    

    Ta koda naloži vrednosti, ki ste jih dodali v datoteko local.settings.json za vašo LUIS aplikacijo, ustvari objekt z poverilnicami z vašim API ključem, nato pa ustvari LUIS odjemalca za interakcijo z vašo LUIS aplikacijo.

  6. Ta HTTP sprožilec bo poklican z besedilom za razumevanje, poslanim kot JSON, z besedilom v lastnosti text. Naslednja koda izvleče vrednost iz telesa HTTP zahteve in jo zapiše v konzolo. Dodajte to kodo v funkcijo main:

    req_body = req.get_json()
    text = req_body['text']
    logging.info(f'Request - {text}')
    
  7. Napovedi se zahtevajo od LUIS z pošiljanjem zahteve za napoved - JSON dokumenta, ki vsebuje besedilo za napoved. Ustvarite to z naslednjo kodo:

    prediction_request = { 'query' : text }
    
  8. To zahtevo lahko nato pošljete LUIS, pri čemer uporabite staging slot, na katerega je bila vaša aplikacija objavljena:

    prediction_response = client.prediction.get_slot_prediction(app_id, 'Staging', prediction_request)
    
  9. Odziv napovedi vsebuje glavni namen - namen z najvišjo oceno napovedi, skupaj z entitetami. Če je glavni namen set timer, lahko entitete preberete, da dobite čas, potreben za časovnik:

    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
    

    Entitete number bodo polje števil. Na primer, če rečete "Set a four minute 17 second timer.", bo polje number vsebovalo 2 števili - 4 in 17.

    Entitete time unit bodo polje polj nizov, pri čemer je vsaka časovna enota polje nizov znotraj polja. Na primer, če rečete "Set a four minute 17 second timer.", bo polje time unit vsebovalo 2 polji z enim vrednostjo vsako - ['minute'] in ['second'].

    JSON različica teh entitet za "Set a four minute 17 second timer." je:

    {
        "number": [4, 17],
        "time unit": [
            ["minute"],
            ["second"]
        ]
    }
    

    Ta koda prav tako definira števec za skupni čas za časovnik v sekundah. Ta bo napolnjen z vrednostmi iz entitet.

  10. Entitete niso povezane, vendar lahko naredimo nekaj predpostavk o njih. Bodo v vrstnem redu, kot so bile izgovorjene, zato lahko položaj v polju uporabimo za določitev, katera številka ustreza kateri časovni enoti. Na primer:

    • "Set a 30 second timer" - to bo imelo eno številko, 30, in eno časovno enoto, second, zato bo ena številka ustrezala eni časovni enoti.
    • "Set a 2 minute and 30 second timer" - to bo imelo dve številki, 2 in 30, ter dve časovni enoti, minute in second, zato bo prva številka za prvo časovno enoto (2 minuti), druga številka pa za drugo časovno enoto (30 sekund).

    Naslednja koda pridobi število elementov v entitetah number in uporabi to za izvlečenje prvega elementa iz vsakega polja, nato drugega in tako naprej. Dodajte to znotraj bloka if.

    for i in range(0, len(numbers)):
        number = numbers[i]
        time_unit = time_units[i][0]
    

    Za "Set a four minute 17 second timer." bo to zanko izvedlo dvakrat, kar bo dalo naslednje vrednosti:

    št. zanke number time_unit
    0 4 minute
    1 17 second
  11. Znotraj te zanke uporabite številko in časovno enoto za izračun skupnega časa za časovnik, pri čemer dodate 60 sekund za vsako minuto in število sekund za vsako sekundo.

    if time_unit == 'minute':
        total_seconds += number * 60
    else:
        total_seconds += number
    
  12. Zunaj te zanke skozi entitete zapišite skupni čas za časovnik:

    logging.info(f'Timer required for {total_seconds} seconds')
    
  13. Število sekund je treba vrniti iz funkcije kot HTTP odgovor. Na koncu bloka if dodajte naslednje:

    payload = {
        'seconds': total_seconds
    }
    return func.HttpResponse(json.dumps(payload), status_code=200)
    

    Ta koda ustvari vsebino, ki vsebuje skupno število sekund za časovnik, jo pretvori v JSON niz in jo vrne kot HTTP rezultat s statusno kodo 200, kar pomeni, da je klic uspešen.

  14. Na koncu, zunaj bloka if, obravnavajte primer, ko namen ni bil prepoznan, tako da vrnete kodo napake:

    return func.HttpResponse(status_code=404)
    

    404 je statusna koda za ni najdeno.

  15. Zaženite funkcijsko aplikacijo in jo preizkusite z uporabo curl.

    curl --request POST 'http://localhost:7071/api/text-to-timer' \
         --header 'Content-Type: application/json' \
         --include \
         --data '{"text":"<text>"}'
    

    Zamenjajte <text> z besedilom vaše zahteve, na primer set a 2 minutes 27 second timer.

    Videli boste naslednji izhod iz funkcijske aplikacije:

    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)
    

    Klic curl bo vrnil naslednje:

    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}
    

    Število sekund za časovnik je v vrednosti "seconds".

💁 To kodo lahko najdete v mapi code/functions.

Naloga - omogočite dostop do vaše funkcije za vašo IoT napravo

  1. Da bo vaša IoT naprava lahko klicala vaš REST endpoint, bo morala poznati URL. Ko ste ga prej dostopali, ste uporabili localhost, kar je bližnjica za dostop do REST endpointov na vašem lokalnem računalniku. Da omogočite dostop IoT napravi, morate aplikacijo objaviti v oblaku ali pridobiti vaš IP naslov za lokalni dostop.

    ⚠️ Če uporabljate Wio Terminal, je lažje zagnati funkcijsko aplikacijo lokalno, saj bo odvisnost od knjižnic pomenila, da aplikacije ne morete namestiti na enak način, kot ste to storili prej. Zaženite funkcijsko aplikacijo lokalno in dostopajte do nje prek IP naslova vašega računalnika. Če jo želite objaviti v oblaku, bodo informacije o tem na voljo v kasnejši lekciji.

    • Objavite funkcijsko aplikacijo - sledite navodilom iz prejšnjih lekcij za objavo funkcijske aplikacije v oblaku. Ko je objavljena, bo URL https://<APP_NAME>.azurewebsites.net/api/text-to-timer, kjer <APP_NAME> predstavlja ime vaše funkcijske aplikacije. Poskrbite, da objavite tudi lokalne nastavitve.

      Pri delu z HTTP sprožilci so ti privzeto zaščiteni s ključem funkcijske aplikacije. Da pridobite ta ključ, zaženite naslednji ukaz:

      az functionapp keys list --resource-group smart-timer \
                               --name <APP_NAME>                               
      

      Kopirajte vrednost vnosa default iz razdelka functionKeys.

      {
        "functionKeys": {
          "default": "sQO1LQaeK9N1qYD6SXeb/TctCmwQEkToLJU6Dw8TthNeUH8VA45hlA=="
        },
        "masterKey": "RSKOAIlyvvQEQt9dfpabJT018scaLpQu9p1poHIMCxx5LYrIQZyQ/g==",
        "systemKeys": {}
      }
      

      Ta ključ bo treba dodati kot parameter poizvedbe v URL, tako da bo končni URL https://<APP_NAME>.azurewebsites.net/api/text-to-timer?code=<FUNCTION_KEY>, kjer <APP_NAME> predstavlja ime vaše funkcijske aplikacije, <FUNCTION_KEY> pa vaš privzeti funkcijski ključ.

      💁 Nastavitve avtorizacije HTTP sprožilca lahko spremenite z nastavitvijo authlevel v datoteki function.json. Več o tem lahko preberete v razdelku o konfiguraciji dokumentacije Azure Functions HTTP trigger na Microsoft Docs.

    • Zaženite funkcijsko aplikacijo lokalno in dostopajte prek IP naslova - pridobite IP naslov vašega računalnika v lokalnem omrežju in ga uporabite za sestavo URL-ja.

      Poiščite vaš IP naslov:

      Ko pridobite vaš IP naslov, boste lahko dostopali do funkcije na http://. <IP_NASLOV> :7071/api/text-to-timer, kjer bo <IP_ADDRESS>vaš IP naslov, na primerhttp://192.168.1.10:7071/api/text-to-timer`.

      💁 Upoštevajte, da uporablja vrata 7071, zato boste morali za IP naslovom dodati :7071.

      💁 To bo delovalo le, če je vaša IoT naprava v istem omrežju kot vaš računalnik.

  2. Preizkusite končno točko tako, da jo dostopate z uporabo ukaza curl.


🚀 Izziv

Obstaja veliko načinov za zahtevo iste stvari, na primer nastavitev časovnika. Razmislite o različnih načinih, kako to storiti, in jih uporabite kot primere v svoji LUIS aplikaciji. Preizkusite jih, da vidite, kako dobro se vaš model spopada z različnimi načini zahteve za časovnik.

Kviz po predavanju

Kviz po predavanju

Pregled in samostojno učenje

Naloga

Prekliči časovnik


Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem maternem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda.