GitHub - terrenjpetersoncaloriecounter AWS Lex bazat pe chatbot care calculează caloriile pe baza
Contor de calorii Chatbot
Acesta este un chatbot bazat pe Lex, care va calcula caloriile făcute de călătorii la diferite restaurante de fast-food. Este activat de pe un chat FB Messenger care poate fi accesat de pe pagina de Facebook sau prin intermediul aplicației Messenger de pe telefon.
Cuprins
Utilizarea modelelor NLU
Acest bot folosește AWS Lex - un serviciu care conține informații pentru a putea descifra cererile utilizatorilor și a declanșa intenții pe baza datelor furnizate în modele. Intențiile invocă apoi funcții lambda care conțin logică de afaceri specifică intenției.

În prezent, există multe intenții diferite în care sortează procesul NLU. Iată „funcțiile de bază” ale botului.
- FoodTypeOptions (Exemplu de enunț - Care sunt opțiunile mele alimentare?)
- GetCalories (Exemplu de enunț - Câte calorii într-un Big Mac?)
- GetMexicanFoodCalories (Exemplu de enunț - Câte calorii într-un pui Burrito?)
- GetNuggetsCalories (Exemplu de enunț - Câte calorii din 20 de pepite de pui?)
- GetPizzaCalories (Exemplu de enunț - Câte calorii din 2 felii de pizza Pepperoni la Papa Johns?)
- GetChineseCalories (Exemplu de enunț - Câte calorii într-un pui Kung Pao?)
- GetChickenCalories (Exemplu de enunț - Câte calorii într-o bucată de pui de rețetă originală?)
Există, de asemenea, intenții care completează caracteristicile de bază.
- MoreDetails (Exemplu de enunț - Mai multe detalii. Notă: acest lucru poate fi invocat numai după ce solicitările anterioare sunt făcute în conversație, deoarece citesc date din sesiune).
- DailyIntakeAnalysis (Exemplu de enunț - analizați masa mea. Similar cu mai multe detalii, acest lucru folosește datele sesiunii, deci trebuie să urmați una dintre solicitările anterioare.
- WhatPizzaTypes (Exemplu de enunț - Ce tipuri de pizza există?)
- WhichRestaurants (Exemplu de enunț - Listă de restaurante.)
- CalculateBMR (Exemplu de enunț - Care este aportul meu zilnic de calorii recomandat?)
- GetCarbs (Exemplu de enunț - Câți carbohidrați din asta?)
Apoi, există intenții care formează „personalitatea” botului. Acestea au fost create pe baza utilizării reale a utilizatorilor și împiedică utilizarea mesajului de eroare generic pentru a răspunde.
- EndConversation (intenție încorporată - folosește exemple de enunțuri AWS ca - Stop)
- Introducere (Exemple de enunțuri - Bună ziua, Începeți, trimiteți un mesaj)
- Mulțumesc (Exemple de enunțuri - Mulțumesc, la revedere, la revedere)
- Complement (Exemple de enunțuri - Te iubesc)
- Critic (Exemple de enunțuri - U suge)
- Șoc (Exemple de enunțuri - wow, ouch)
- MyName (Exemple de enunțuri - care este numele tău)
- HelpRequest (intenție încorporată - folosește exemple de enunțuri AWS cum ar fi - Ajutor)
- NewRestaurant (Exemplu de enunț - Restaurant nou. Aceasta șterge sesiunea.)
În cadrul fiecăruia dintre intenții, sunt furnizate exemple de enunțuri care construiesc sentențele potențiale pe care le poate furniza un utilizator. Valoarea slotului (adică Large Fry) este transmisă funcției lambda ca un atribut unic.
Puteți obține informații rezumative din AWS CLI executând următoarea comandă.
Este o combinație a exemplelor de enunțuri și sloturi care determină ce intenție vor invoca modelele NLU. Acestea sunt întreținute în Lex și sunt utilizate pentru instruirea modelelor.
În prezent, aici sunt sloturile personalizate care sunt utilizate de intenții.
Nu este necesar să fie specificat un element în slot pentru ca NLU să-i plaseze o valoare. Cu toate acestea, dacă datele sunt rare, se poate degrada modul în care NLU interpretează solicitările utilizatorului.
Mai multe sloturi într-o singură intenție
Utilizarea unui chatbot necesită o interacțiune naturală cu un utilizator. Un concept cheie este acela de a încorpora mai multe sloturi într-o singură intenție. De exemplu, un utilizator ar putea întreba „Câte calorii într-un Big Mac, cartofi prăjiți și o Cola?” Este vorba de trei elemente diferite care trebuie analizate fiecare. În cadrul acestui chatbot, procesarea principală are multe sloturi diferite care se mapează în intenții. De exemplu, aici sunt sloturile care se încorporează în intenția GetCalories.
Există câteva elemente de menționat în acest sens.
În cererea de exemplu de mai sus, modelele NLU ar analiza datele din enunț în trei sloturi diferite (Alimente, Extra și Băutură).
Ordinea sloturilor nu contează pentru analiză, dar determină care ar fi următorul răspuns (slotul 1 - La ce restaurant sunteți?)
Există două sloturi care nu sunt necesare în acest scop - Ketchup și PacketsKetchup. Aceste informații opționale sunt solicitate dacă cartofii prăjiți sunt solicitați ca element secundar. Acest lucru este condus de codul din funcția Lambda care este invocat în cârligul codului de validare.
Logica regulilor în lambda
Toată logica formulării răspunsurilor la diferite intenții este procesată într-o serie de funcții lambda. Funcția lambda pe care o invocăm este gestionată în cadrul Lex și setată la nivelul intenției. Aceasta permite construirea modularității în cadrul aplicației, menținând funcțiile ușoare.
Există două puncte diferite în Lex care pot invoca o funcție lambda. Primul este prin validarea de bază, iar numele atributului care îl identifică se numește invocationSource. Există două valori potențiale pentru acest lucru - DialogCodeHook și FulfillmentCodeHook. Aici sunt specificate aceste funcții Lambda în Lex Bot.