GitHub - terrenjpetersoncaloriecounter AWS Lex Chatbot, який обчислює калорії на основі
Лічильник калорій Чат-бот
Це чат-бот на базі Lex, який буде обчислювати калорії, зроблені поїздками в різні ресторани швидкого харчування. Він увімкнений через чат-бот FB Messenger, до якого можна отримати доступ зі сторінки Facebook або через додаток Messenger на телефоні.
Зміст
Використання моделей NLU
Цей бот використовує AWS Lex - послугу, яка містить інтелектуальну інформацію для розшифровки запитів користувачів та ініціювання намірів на основі даних, представлених у моделях. Потім наміри викликають лямбда-функції, які містять бізнес-логіку, специфічну для наміру.

В даний час існує багато різних намірів, на які сортується процес NLU. Ось "основні функції" бота.
- FoodTypeOptions (Зразок висловлювання - Які мої варіанти харчування?)
- GetCalories (Зразок висловлювання - Скільки калорій у Big Mac?)
- GetMexicanFoodCalories (Зразок висловлювання - Скільки калорій у курячому буріто?)
- GetNuggetsCalories (Зразок висловлювання - Скільки калорій у 20 курячих нагетсах?)
- GetPizzaCalories (Зразок висловлювання - Скільки калорій у 2 скибочках піци Пеппероні в Papa Johns?)
- GetChineseCalories (Зразок висловлювання - Скільки калорій у курячому кунг-пао?)
- GetChickenCalories (Зразок висловлювання - Скільки калорій у шматочку оригінальної курячої рецептури?)
Є також наміри, які доповнюють основні функції.
- MoreDetails (Зразок висловлювання - Більше деталей. Примітка: це можна викликати лише після того, як попередні запити зроблені в розмові, оскільки це зчитування даних із сеансу).
- DailyIntakeAnalysis (Зразок висловлювання - проаналізуйте мою їжу. Подібно до більш детальної інформації, тут використовуються дані сеансу, тому потрібно слідувати одному з попередніх запитів.
- WhatPizzaTypes (Зразок висловлювання - Які типи піци існують?)
- WhichRestaurants (Зразок виступу - Список ресторанів.)
- CalculateBMR (Зразок висловлювання - Яке моє щоденне рекомендоване споживання калорій?)
- GetCarbs (Зразок висловлювання - Скільки вуглеводів у цьому?)
Потім є наміри, які формують «особистість» бота. Вони були створені на основі реального користувацького використання та запобігають використанню загального повідомлення про помилку для реагування.
- EndConversation (Вбудований намір - використовуються зразки висловлень AWS, такі як - Зупинити)
- Вступ (Зразки висловлювань - Привіт, розпочати роботу, надіслати повідомлення)
- Дякую (Зразки висловлювань - Дякую, до побачення, до побачення)
- Доповнення (зразки висловлювань - я люблю тебе)
- Критик (зразки висловлювань - U смоктати)
- Шок (зразки висловлювань - нічого собі)
- MyName (Зразки висловлювань - як вас звати)
- HelpRequest (Вбудований намір - використовуються зразки висловлювань AWS, наприклад - Довідка)
- NewRestaurant (Зразок висловлювання - Новий ресторан. Це очищає сесію.)
У межах кожного з намірів передбачено вибіркові висловлювання, які будують потенційні висловлювання, які може надати користувач. Значення слота (тобто Large Fry) передається функції лямбда як унікальний атрибут.
Ви можете отримати зведену інформацію з AWS CLI, виконавши наступну команду.
Це поєднання вибіркових висловлювань та слотів, які визначають, який намір будуть викликати моделі NLU. Вони підтримуються в Lex і використовуються для навчання моделей.
На даний момент, ось власні слоти, які використовуються за намірами.
Елемент не потрібно вказувати в слоті для NLU, щоб розмістити в ньому значення. Однак, якщо дані розріджені, це може погіршити спосіб інтерпретації запитів користувача NLU.
Кілька слотів в одному намірі
Юзабіліті чат-бота вимагає природного взаємодії з користувачем. Однією з ключових концепцій є те, як включити кілька слотів в один намір. Наприклад, користувач може запитати "Скільки калорій у Big Mac, фрі та кока-колі?" Це три різні елементи, кожна з яких повинна бути проаналізована. У цьому чат-боті основна обробка має безліч різних слотів, які відображаються за намірами. Наприклад, ось слоти, які відповідають наміру GetCalories.
У цьому є кілька пунктів, на які слід звернути увагу.
У наведеному вище прикладі запити моделі NLU аналізуватимуть дані висловлювання на три різні слоти (Їжа, Екстра та Напої).
Порядок слотів не має значення для синтаксичного аналізу, але він визначає, якою буде наступна відповідь (слот 1 - у якому ресторані ви перебуваєте?)
У цьому намірі немає двох слотів - кетчуп та PacketsKetchup. Ця додаткова інформація запитується, якщо картопля фрі просить як допоміжний продукт. Це зумовлено кодом у функції Лямбда, який викликається у гачку коду перевірки.
Правила логіки в лямбда
Вся логіка при формулюванні відповідей на різні наміри обробляється в серії лямбда-функцій. Якою лямбда-функцією викликати керує Lex і встановлює на рівні наміру. Це дозволяє вбудувати модульність у програму, зберігаючи функції легкими.
У Lex є два різних місця, які можуть викликати лямбда-функцію. Перший - через базову перевірку, а ім’я атрибута, яке його ідентифікує, називається invocationSource. Для цього є два потенційні значення - DialogCodeHook та FulfillmentCodeHook. Ось де ці функції лямбда вказані в Lex Bot.