Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/6283Full metadata record
| DC Field | Value | Language |
|---|---|---|
| dc.contributor.advisor | Рудаков, Костянтин Сергійович | - |
| dc.contributor.author | Андрієнко, Борис Олександрович | - |
| dc.date.accessioned | 2022-01-16T15:12:14Z | - |
| dc.date.available | 2022-01-16T15:12:14Z | - |
| dc.date.issued | 2022-01 | - |
| dc.identifier.uri | https://er.chdtu.edu.ua/handle/ChSTU/6283 | - |
| dc.description.abstract | В ході роботи були виконані наступні завдання: проаналізовано предметна область; виявлені плюси і мінуси існуючих рішень; вивчені засоби для реалізації; розроблений алгоритм реалізації проекту; сформульовані вимоги до продукту; створено інформацыйну систему піцерії, яка надає послуги з доставки в межах міста в програмі Visual Studio; створено Telegram-бот в програмі Visual Studio; створено логотип для Telegram-бота; зареєстрований і повністю налаштований бот в програмі Telegram. Таким чином, завдання випускної кваліфікаційної роботи виконані, мета роботи досягнута. У роботі актуальна науково-прикладна проблема, пов'язана з розробкою теоретичних та практичних основ побудови систем імітаційного моделювання на основі вдосконалення роботи закладу швидкого харчування, що надає послуги можливості здійснення модифікацій виробничого процесу, та моментального прийому формулюється і вирішується результат для аналізу. заходи та можливості покращити подальшу роботу. Початковими параметрами моделі були характеристики піцерії "Престо", розташованої на вулиці "Хрещатик". | uk_UA |
| dc.language.iso | uk | uk_UA |
| dc.title | Дослідження систем автоматичної інтеграції інформації в Telegram messenger | uk_UA |
| dc.type | Master Thesis | uk_UA |
| Appears in Collections: | 174 Автоматизація, комп'ютерно-інтегровані технології та робототехніка (Автоматизація та комп'ютерно-інтегровані системи та компоненти) | |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| М_151_2021_Андрієнко+.pdf Restricted Access | 3.16 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА РОБОТОТЕХНІКИ ТА СПЕЦІАЛІЗОВАНИХ КОМП’ЮТЕРНИХ
СИСТЕМ
ПОЯСНЮВАЛЬНА ЗАПИСКА
до кваліфікаційної роботи
освітнього ступеню «магістр»
на тему: Дослідження систем автоматичної інтеграції інформації в Telegram
messenger
Виконав: студент 2 курсу, групи МАКІТ-2009
спеціальності 151 Автоматизація та
комп’ютерно-інтегровані технології,
освітня програма «Комп’ютерно-
інтегровані технологічні процеси і
виробництва»
Борис Андрієнко
(ім’я, ПРІЗВИЩЕ)
Керівник Костянтин Рудаков
( ім’я, ПРІЗВИЩЕ)
Рецензент Ольга Романовська
( ім’я, ПРІЗВИЩЕ)
Черкаси 2021 року
2
ЗМІСТ
ВСТУП ......................................................................................................................... 4
1 ДОСЛІДЖЕННЯ ІСНУЮЧИХ СИСТЕМ ............................................................ 10
1.1 Діалогові інтерфейси призначені для користувача .......................................... 11
1.2 Останні розробки ................................................................................................ 12
1.3 Архітектура діалогового інтерфейсу призначеного для користувача ............ 14
1.4 Класифікація ........................................................................................................ 15
1.5 Додатки ................................................................................................................. 16
1.6 Інструменти розробника ..................................................................................... 18
1.7 Інструменти прототипування ............................................................................. 18
1.8 Канали .................................................................................................................. 19
1.9 Засоби розробки чат-ботів .................................................................................. 19
1.10 Месенджери ....................................................................................................... 20
1.11 Чат-боти .............................................................................................................. 24
1.12 Класифікація ботів для СМОП ........................................................................ 25
1.13 Примітивні боти ................................................................................................ 27
1.14 ЧБ, які здатні виокремити команду з повідомлення ...................................... 29
1.15 Боти які здатні розуміти контекст діалогу ...................................................... 30
1.16 Приклади застосування ботів ........................................................................... 32
1.17 Мікроплатежі у вашому додатку ...................................................................... 35
2 ОБРАННЯ ТЕХНОЛОГІЇ ПРОЕКТУВАННЯ ТА СЕРЕДИ РОЗРОБКИ .......... 46
2.1 Telegram Bot API .................................................................................................. 47
2.2 Heroku ................................................................................................................... 49
2.3 MongoDB .............................................................................................................. 49
2.4 Мова програмування Python ............................................................................... 52
2.5 Модуль TeleBot .................................................................................................... 54
2.6 Модуль CherryPy ................................................................................................. 56
2.7 Модуль Requests .................................................................................................. 58
2.8 HTTP-запити ........................................................................................................ 58
3
2.9 Формат JSON ....................................................................................................... 60
2.10 Алгоритм зворотнього поширення помилок .................................................. 62
2.11 Деталі використання градієнтного спуску ...................................................... 65
2.12 Основні параметри при навчанні мережі ........................................................ 67
2.13 Глибокі нейронні мережі .................................................................................. 68
2.14 Проблеми навчання глибоких мереж і їх рішення ......................................... 69
2.15 Процес створення бота та огляд Telegram Bot API ........................................ 70
3 РОЗРОБКА ПРАКТИЧНОЇ МОДЕЛІ ................................................................... 79
3.1 Моделювання роботи закладу швидкого харчування з наданням послуг щодо
доставки як системи масового обслуговування ..................................................... 79
3.2 Характеристика вхідного потоку ....................................................................... 79
3.3 Характеристика черги ......................................................................................... 81
3.4 Розробка алгоритму моделі ................................................................................ 84
3.5 Введення позначень ............................................................................................ 85
3.6 Блок-схема ............................................................................................................ 87
3.7 Програмна реалізація задачі ............................................................................... 88
3.8 Проведення модельних експериментів і опрацювання отриманих результатів
..................................................................................................................................... 90
ВИСНОВКИ ............................................................................................................... 92
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ ........................................................... 94
4
ВСТУП
Сьогодні соціальні мережі використовуються не тільки для організації
взаємодії з користувачами, а й є потужним інструментом просування, який
використовується малим приватним бізнесом для таких організацій, як National
Geographic, NASA, Lamborghini, Nike, Gucci, Louis Vuitton та багатьох інших. .
Як повідомляє сайт www.marketing.spb.ru, «Зовнішня реклама вже
випереджає рекламу в Інтернеті. Інструменти інтернет-реклами дозволяють вам
орієнтуватися на клієнта, якого ви хочете, щоб побудувати більш тісні та
ефективні відносини з вашим клієнтом. Розміщуючи рекламу в Інтернеті,
рекламодавець має можливість отримувати чіткі та актуальні звіти про кількість
людей, які здійснили заплановані дії рекламної кампанії, можливість швидко
реагувати на результати, також підвищується ефективність онлайн-реклами. До
цього списку ми додамо інтерактивне спілкування, переваги геолокації та
найнижчу ціну за контакт на всьому рекламному ринку. «[14] Це робить онлайн-
рекламу незамінним інструментом як для новостворених проектів, так і для
проектів, які тільки починаються в Інтернеті, тому питання, пов’язані з
використанням внутрішньої реклами, актуальні як ніколи.
"Ресторани швидкого харчування нашого часу заполонили все місто. Від
крихітних хот-догів до гігантів цього бізнесу вони є скрізь. Така розвинена
індустрія не могла залишитися непоміченою математичними методами
економіки. Доставка їжі стає все популярнішою в наших місто Все більше
ресторанів обирають цю послугу, все більше мешканців обирають цю послугу,
тому зараз важливо використовувати досвід західних колег і спробувати за
допомогою імітаційної моделі оптимізувати функціонування ресторанів
швидкого харчування. пропонують послуги доставки »[19].
«Проблеми ресторанів швидкого харчування досліджувалися в роботі
таких вітчизняних вчених, як: Захарченко М.Н., Карсекін В.І., Манов М.А.
Пятнизька Н.О. Сало Я. К. Фарахманд, Техаський університет A&M, А.
Франциско, Г. Мартінес, Ендрю Дж. Ньюман, Айвор Черч, Віллам Сворт. Проте
з кожним роком на Winter Simulation Conference (WSC) представлено все більше
5
досліджень у цій галузі. Робота вищезазначених авторів обговорює сам процес
обслуговування клієнтів і важливість доставки на роботу ресторану швидкого
харчування» [19].
«Метою побудови моделі піцерії, яка надає послуги доставки в межах
міста, є визначення основних особливостей функціонування такої системи,
зокрема:
• середній час обслуговування програми;
• середня довжина черги перед обслуговуючим пристроєм;
• середній час очікування клієнта в черзі;
• загальний час простою сервісних пристроїв;
• кількість клієнтів, втрачених через довжину черги, а також тривалість
очікування;
• Умови навантаження» [19].
«Створення відповідної моделі дає змогу проводити експерименти, які
чітко показують вплив можливих системних змін на прибуток компанії.
Результати моделювання діяльності ресторану швидкого харчування можуть
послужити основою для розробки рекомендацій щодо підвищення ефективності
його роботи» [19].
Інтернет в сучасних умовах є універсальним середовищем для
спілкування, розваг та навчання. В даний час у світі існує безліч засобів, форм і
методів комунікації, багато з яких так чи інакше пов’язані з сучасними
технічними навичками, зокрема у використанні глобальної комп’ютерної
мережі. Інтернет є не лише джерелом різноманітної та корисної інформації для
користувачів, це також найважливіша форма віртуального спілкування. Зв'язок з
друзями та родичами, контакти з партнерами по роботі, нові знайомства - все це
є важливою частиною повсякденного життя сучасних людей, а вибір найбільш
зручних для користувача каналів онлайн-комунікації широкий. Отже,
використання цього засобу комунікації є найбільш актуальним у реаліях
сучасної заохочуваної спільноти. Актуальність випускної кваліфікаційної
роботи зумовлена також високою популярністю месенджерів та засобів
автоматизації, таких як чат-боти з користувачами Інтернету. Чат-боти
6
спрощують щоденні рутинні завдання, такі як отримання інформації про погоду,
затори, останні новини тощо. Основна перевага класичних додатків –
можливість об’єднати всі функції на платформі месенджера.
Актуальність теми
На даний момент інтернет-магазин може відкрити кожен, хто хоче вести
бізнес в Інтернеті, оскільки йому не потрібні великі гроші. Сьогодні більшість
компаній і підприємств створюють інтернет-магазини, щоб підвищити рівень
бізнесу.
З появою всесвітньої павутини ми маємо доступ до всієї інформації та
послуг у всіх країнах. Актуальність інтернет-магазину
чи це:
- Для роботи такого магазину не потрібно платити орендну плату та
зарплату продавцям, лише за хостинг та доменні імена.
Також немає необхідності тримати товар на складі, так як це займає місце і
супроводжується додатковими витратами, тому краще купувати їх після
отримання замовлення;
- Для роботи інтернет-магазину потрібні три співробітники:
- Адміністратор сайту, який приймає замовлення, бухгалтер з бухгалтерії,
а також кур'єр, який доставляє замовлення;
- Клієнтами інтернет-магазину можуть бути не тільки користувачі нашої
країни, а й користувачі інших країн, які мають доступ до мережі Інтернет,
оскільки на сайті інтернет-магазину є кілька мов для відображення сайту;
- Виставлення рахунків з клієнтом відбувається за допомогою онлайн-
платежі або оплати після отримання платежу.
Важливий внесок у розвиток веб-технологій та інформаційної безпеки
зробили вітчизняні та зарубіжні вчені, зокрема С.А. Орлов, Б. Я. Зілкер, В. В.
Пасічник, С. Н. Бердишев, А. А. Борисенко, Є. Гарріс, Єсін В. І., Л. Г. Гагарін,
С. І. Вигонський, А. А. Лояніч, А. П. Сергєєв, Б. А. Леонтьєв, Д. Крейн, Т.
О. Шматковська, Н. Б. Шаховська, П. Лузанов, Є. Рогов, І. Левшин. Але веб-
технології висвітлені недостатньо детально. Тому доцільно створити
інформаційну систему для друкарні, щоб підвищити її ефективність.
7
Функціонал інформаційної системи інтернет-магазину може
використовуватися будь-яким користувачем з будь-яким рівнем комп’ютерної
грамотності, оскільки ця система має на меті вдосконалити та полегшити
підприємствам продавати товари та розміщувати замовлення. Інформаційна
система покликана надати користувачеві максимально зручний і зрозумілий
інтерфейс користувача; Ця інформаційна система покликана допомогти
користувачеві якомога швидше знайти товар і зробити замовлення. Поверхня
системи повинна бути простою і мати найнеобхідніший функціонал,
функціонувати швидко, надійно і без помилок.
Мета і завдання дослідження
Метою роботи є дослідження існуючих систем і методів розробки бот-
систем з метою автоматизації дій, спрямованих на привернення уваги
користувачів соціальних мереж, а також розробка вдосконаленого прикладного
додатка за результатами дослідження.
Виходячи з поставленої мети, були поставлені такі завдання:
• Аналіз обраної предметної області;
• Порівняння доступних аналогів чат-ботів;
• Вибір технологій та середовища розробки;
• Розробка чат-бота на платформі Telegram.Об’єкт дослідження – процеси
вимірювання світла.
Предмет дослідження – Методи та засоби вдосконалення систем
привернення уваги користувачів соціальних мереж до програмного продукту
автоматизації взаємодії користувачів у соціальних мережах.
Методи дослідження
Методологічними основами дослідження навчальної програми були
методи аналізу, синтезу та оптимізації, порівняння, узагальнення; На різних
етапах дослідження використовувалися загальні та спеціальні методи
надійності, інформації, теорії проектування схем; Моделювання - розробити
концептуальну модель.
Наукова новизна отриманих результатів
Вирішуючи поставлені завдання, автор досяг наступних результатів:
8
• Системний аналіз сучасних систем вимірювання освітлення та аналіз
методів вимірювання шляхом порівняння властивостей існуючих систем та
створення блок-схеми, що покращує якість вимірювань та їх відтворюваність.
• Систематичний аналіз фізичних властивостей світла шляхом виділення
основних компонентів світла, які є корисними для вимірювань, що прискорить
майбутні вимірювання.
• Методика визначення найкращої моделі люксметра на основі теорії
неповної подібності, теорії розмірів, що забезпечує правильний вибір моделі.
• Розробка моделі освітлювального приладу шляхом вивчення існуючих
моделей, щоб знизити вартість приладу, що дозволяє вимірювати інтенсивність
світла,
Науково-технічну новизну результатів і досліджень підтверджують тези та
лекції на студентській конференції.
Практична значення отриманих результатів
Практичне значення отриманих результатів полягає: в доведенні
отриманих наукових результатів до конкретних інженерних рішень: методів,
моделей та варіанти інноваційних схем побудови систем. Розроблена структурна
схема люксметру, що забезпечує можливість побудови експерементального
приладу для проведення вимірювань рівня освітленості. Розроблена блок-схема,
що полегшує вибір методу для проведення досліджень.
Апробація результатів дослідження
Результати кваліфікаційної роботи магістра доповідалися й
обговорювалися на студентських конференціях:
- дні студентської науки ЧДТУ: 16-17 квітня 2019 р. – Черкаси: ЧДТУ,
2019;
- студентська науково-практична конференція ЧДТУ : 27–30 квітня 2020.
Публікації
Andriienko B. O. Automated services of integration of information systems in
Telegram / B. O. Andriienko, K. S. Rudakov, S. A. Mitsenko // Збірник тез
доповідей студентської науково-практичної конференції ЧДТУ: 19–22 квітня
9
2021 р. [Електронний ресурс] / [упоряд. Мельник І.В.]; М-во освіти і науки
України, Черкас. держ. технол. ун-т. – Черкаси : ЧДТУ, 2021. – C. 118-119.
Структура та обсяг кваліфікаційної роботи
Кваліфікаційна робота магістра складається з вступу, трьох розділів,
висновку та списку використаних джерел. Загальний обсяг роботи складає 110
сторінок, 51 рисунка, 4 таблиці. Список використаних джерел містить
51 найменувань.
10
1 ДОСЛІДЖЕННЯ ІСНУЮЧИХ СИСТЕМ
Ми вступили в епоху інтелектуальних машин, у яких діалогові інтерфейси
лідирують. За останні кілька років ми охопили багато нових типів машин і
програмного забезпечення, широко відомих як боти. Боти — це автоматизоване
обладнання або програмне забезпечення, засноване на технології штучного
інтелекту (AI). Нещодавні розробки в алгоритмах машинного навчання, такі як
глибоке навчання та глибинна консолідація, підвищили потужність завдань ШІ,
таких як автоматичне розпізнавання мовлення (ASR), розпізнавання природної
мови (NLU), перетворення тексту в мовлення (TTS) тощо. покращує
розпізнавання зображень. Це скоротило шлях людства до технологічної
сингулярності, моменту, коли штучний інтелект виходить за межі людського
розуму кожну годину, а не день.
Однією з довгострокових цілей ШІ є створення комп’ютерних систем, які
можуть вести розмови з користувачами, як люди. Завдяки останнім досягненням
у технології штучного інтелекту ми на крок ближче до цієї мети. Недалеко зараз
ми можемо взаємодіяти з пристроями та гаджетами в наших будинках та офісах
лише за допомогою голосу. Нам ще належить пройти довгий шлях, щоб
створити стандарти та цифрові об’єкти, які зможуть вільно й боком говорити
природною мовою. Однак недавній сплеск інтересу та величезні інвестиції у
просування цих ідей показують, що ми на правильному шляху, щоб розробити
такий глобальний стандарт. Якщо вам цікаво про останні
Розробки в області штучного інтелекту та технологій автоматизації, ця
книга для вас. Ми вирушаємо в подорож у майбутнє того, що гуру-дизайнер
Марк Кертіс називає діалоговою сингулярністю, коли діалогічні пристрої
зникають, а спілкування між людиною і машиною стає безперешкодним і
природним.
11
1.1 Діалогові інтерфейси призначені для користувача
Діалогові інтерфейси користувача так само старі, як і тимчасові
комп’ютери. ENIAC, перший програмований комп’ютер загального
призначення, був побудований в 1946 році. У 1950 році Алан Тьюринг,
британський вчений-комп’ютерник, запропонував вимірювати рівень інтелекту
машин за допомогою діалогового тесту, який називається тестом Тьюринга. Тест
полягав у тому, що автомобіль в'їжджав із однією особою як співрозмовником та
людьми (іншою особою). Журі довелося взаємодіяти з кожним із двох учасників
(людиною та машиною) за допомогою текстового інтерфейсу, який відрізняється
від більшості тимчасових додатків для обміну повідомленнями. Під час
співбесіди судді мали визначити, хто з двох учасників був автомобілем. Якщо
хоча б 30% суддів не могли розрізнити двох учасників, автомобіль вважався
пройдено. Це була одна з найперших концепцій діалогових інтерфейсів і його
зв'язку з рівнем інтелекту машин, які мають такі можливості. Однак спроби
створити такий інтерфейс були успішними протягом наступних кількох
десятиліть.
Протягом приблизно 35 років, починаючи з 1980-х, графічні інтерфейси
користувача (GUI) були домінуючим способом взаємодії з машинами. З
останніми розробками в області штучного інтелекту та зростаючими
обмеженнями, такими як скорочення кількості гаджетів (від ноутбуків до
мобільних телефонів), зменшення об’єктів на екрані (розумних годинників) і
потреби зробити інтерфейси невидимими (розумний дім і робота), діалогові
інтерфейси користувача більше та більше реальності.
Наприклад, найкращим способом взаємодії з мобільними роботами, які
використовуються в розумних будинках, буде голос. Таким чином, система
повинна розпізнавати запити користувачів і відповідати на природну людську
мову. Такі можливості системи зменшать наші зусилля, спрямовані на вивчення
та розуміння сучасних складних інтерфейсів.
Діалогові інтерфейси користувача відомі під кількома назвами: інтерфейси
природної мови, розмовні діалогові системи, розмовні чат-боти, інтелектуальні
віртуальні агенти, віртуальні помічники тощо. Справжня різниця між цими
12
системами полягає в їх інтеграції елементів сервера (наприклад, бази даних або
завдання/контроль). модулі), модальності (наприклад, текст, мовлення та
візуальні аватари) та канали, на яких вони розгорнуті. Однак однією із спільних
рис цих систем є їхня здатність взаємодіяти з користувачами у розмовній формі,
використовуючи природну мову.
1.2 Останні розробки
У 2011 році Apple випустила розумного помічника під назвою Siri як
частину своїх пристроїв iPhone / iPad. Siri була змодельована як особистий
помічник, який виконував такі завдання, як здійснення дзвінків, читання
текстових повідомлень, встановлення будильників і нагадувань. Це одна з
найбільш значущих подій недавнього минулого, яка скинула історію діалогових
інтерфейсів. Спочатку користувачі Siri використовували його лише кілька разів
на місяць, щоб виконувати такі завдання, як перегляд Інтернету, надсилання
текстових повідомлень та здійснення дзвінків. Незважаючи на свою новизну, Siri
була розроблена для роботи з багатьма іншими функціями, які були додані в
наступні роки. У перші дні у Siri було багато клонів і дослідників на Android та
інших платформах для смартфонів. Більшість з них були змодельовані як
помічники і представлені у вигляді мобільних додатків. У тому ж році (2011)
IBM представила Watson, систему запитань і відповідей, яка брала участь в
ігровому шоу під назвою Jeopardy, яке вона виграла у попередніх переможців
Бреда Раттера і Кена Дженнінгса. Це стало важливою віхою в історії штучного
інтелекту, оскільки Уотсон зміг обробляти питання природної мови та
відповідати на них у режимі реального часу. Відтоді Watson перетворився на
набір інструментів, що містить набір інструментів підтримки когнітивних
функцій для розпізнавання природної мови, аналізу настроїв, керування
діалогами тощо. Після Siri і Watson наступна велика подія в Microsoft відбулася
в 2013 році, коли вони представили Cortana як стандартну функцію на
смартфонах з Windows, а потім у 2015 році в Windows 10. Як і Siri, Cortana була
особистим помічником, який виконував такі завдання, як встановлення
нагадувань і відповідаючи на запитання тощо. У листопаді 2014 року Amazon
13
запросила своїх найкращих учасників, їхнього особистого помічника на ім’я
Alexa. Alexa була доступна на власному продукті Amazon під назвою Echo. Echo
був першим у своєму роді розумним гучномовцем, який розмістив помічника, як
«привид» в автомобілі. Незважаючи на те, що його називають динаміком, на
відміну від смартфонів, планшетів і ПК, це був крихітний комп’ютер з голосом
як єдиним інтерфейсом. Користувачі могли говорити з Alexa своїм голосом і
просити її виконувати такі завдання, як встановлення нагадувань, відтворення
музики тощо. У квітні 2016 року соціальна мережа Facebook оголосила про
відкриття свого популярного месенджера для чат-ботів. Це був радикально
інший підхід до діалогових інтерфейсів у порівнянні з Siri, Alexa і Cortana. На
відміну від цих персональних помічників, реклама у Facebook призвела до
створення власних і фірмових чат-ботів. Ці боти дуже схожі на Siri, Cortana та
Alexa, але їх можна налаштувати відповідно до потреб вашого бізнесу. Тепер
чат-боти можуть порушити роботу кількох ринків, включаючи обслуговування
клієнтів, продажі, маркетинг, технічну підтримку тощо. Багато платформ обміну
повідомленнями, як-от Skype, Telegram та інші, також стали доступними для
інтеграції з чат-ботами одночасно. У травні 2016 року Google Assistant оголосив
про свою версію персонального чат-бота, доступного на кількох платформах,
таких як додаток Allo і Google Home (розумний динамік, як Echo). Усі
помічники, такі як Siri, Cortana, Alexa і Google Assistant, також відкрили канали
для сторонніх можливостей Visa. Тепер він може персоналізувати програмне
забезпечення Alexa і Google Assistant, додавши діалогові функції (так звані
навички або дії) із бібліотеки рішень сторонніх розробників. Так само, як
бренди можуть створювати власні чат-боти для різних служб обміну
повідомленнями (наприклад, Skype і Facebook Messenger), бренди можуть
розвивати навички для Alexa або Action для Google Now. У 2018 році був
запущений розумний динамік Apple Homepod, який працює на голосовій
платформі Siri. Паралельно з цими подіями також значно збільшується кількість
інструментів, доступних для створення та розширення чат-ботів. За останні два
роки інструменти для розробки, моделювання, компіляції, розгортання,
керування та монетизації чатів зросли в геометричній прогресії. Це призвело до
14
створення екосистеми, яка проектує та створює користувацькі інтерфейси для
підприємств, благодійних, державних та інших організацій по всьому світу.
1.3 Архітектура діалогового інтерфейсу призначеного для користувача
У цьому розділі ми розглянемо базову архітектуру діалогового інтерфейсу
(рисунок 1.1). Основним модулем діалогового інтерфейсу є менеджер діалогів.
Цей модуль контролює потік дзвінків. Він приймає романтичне уявлення про те,
що користувач говорить, як вхідні дані, і вирішує, як система має реагувати. Він
підтримує передачу діалогового контексту в тій чи іншій формі, наприклад, серії
пар ключ-значення, щоб створити значущий безлад під час множинних обмінів
між користувачем і системою.
Рис. 1.1. Базова архітектура діалогового інтерфейсу
Семантичне представлення визначеного користувачем введення можливе
відразу після натискання кнопки. У системах розпізнавання мовлення
висловлювання, зроблені користувачем, перекладаються за допомогою модуля
розпізнавання природної мови в семантичну передачу, що складається з
визначених користувачем цілей і параметрів (слотів і сутностей). Для цього
модуля може знадобитися попереднє навчання, щоб зрозуміти набір
користувальницьких цілей, які були визначені розробником стосовно доступних
розмовних завдань. Інтерфейси з підтримкою мовлення, які приймають голосові
вказівки користувача, також потребують модуля розпізнавання мовлення, який
може перекладати мовлення в текст, перш ніж передавати його в модуль
15
розпізнавання природної мови. Однак симетрично вам потрібен модуль синтезу
мовлення (або модуль синтезу мовлення), який перетворює текстову відповідь
системи в мовлення. Менеджер діалогів повинен взаємодіяти з модулями
сервера. Це може бути база даних або онлайнове джерело даних, яке
запитується, щоб відповісти на запитання користувача (наприклад, телевізійна
програма), або онлайн-сервіс для виконання вказівок користувача (наприклад,
бронювання квитка).
Канал – це місце, де чат-бот чекає користувача. Залежно від каналу цей
шар може формувати один або кілька модулів. Наприклад, якщо чат-бот
знаходиться у Facebook Messenger, цей рівень складається зі сторінки Facebook і
програми Facebook, яка підключається до інших модулів чат-бота, розроблених
як веб-додатки.
1.4 Класифікація
Діалогові призначені для користувача інтерфейси застосовуються в
различних сценаріях. Їх програми можна розділити на дві категорії:
корпоративні помічники і персональні помічники. Корпоративні помічники - це
чат-боти та інші діалогове ші призначені для користувача інтерфейси,
змодельовані після опитування представників служби підтримки клієнтів і
помічників магазина. Як і представники обслуговування клієнтів, боти прикают
клієнтів до розмови, виконуючи маркетингові, продажні і допоміжні завдання.
Більшість чат-ботів, розгорнутих по каналах, таким як Facebook Messenger,
Skype, Slack і багато других, є корпоративними помічниками. вони
спроектіровани і побудовані для виконання завдань, які будуть виконувати
помічники магазину і представники з обслуговування клієнтів. Корпоративні
помічники розробляються в багатьох секторах бізнесу, автоматизуючи різні
діалогові завдання. З іншого боку, персональні помічники, наприклад Alexa, Siri
і Cortana, які грають роль особистого помічника пользователя, виконують такі
завдання, як управління календарем, відправка текстів, прийом викликів і
відтворення музики. Можливості цих особистих помічників можуть бути
розширені. Наприклад, Alexa допускає таке розширення, дозволяючи
16
розробникам створювати навикі, які користувачі можуть вибрати для додавання
в свою власну Alexa. Таким чином, бренди можуть розвивати навички Alexa або
дії для Асистента Google, які дозволять Alexa і Асистенту взаємодіяти з ІТ-
послугами бренду і виконувати такі завдання, як розміщення замовлень,
перевірка статусу доставки і багато іншого. Наприклад, популярні бренди, такі
як PizzaHut, Starbucks і Domino, розробили навички, які можуть бути задіяні на
Alexa.
1.5 Додатки
Хоча чат-боти розроблялися протягом, принаймні, нескількох десятиліть,
вони не стали основними каналами для взаємодії з клієнтами до недавнього
часу. За останні два роки завдяки серйозним зусиллям таких гігантів індустрії,
як Apple, Google, Microsoft, Facebook, IBM і Amazon, а також їх подальшим
інвестиціям в розробку наборів інструментів, чат-ботів і діалогових інтерфейсів
вони стали серйозним соперніком інших каналів зв'язку з клієнтами. За цей час
чат-боти були застосовані в різних секторах і в різних діалогових сценаріях в
цих секторах: роздрібному, банківському та фінансовому, урядовому, медичному,
юридичному і незалежному секторах і багато іншого. У роздрібній торгівлі чат-
боти застосовуються для діалогів по поводу маркетингу продукту, залучення
бренду, підтримки продукту, продажів і підтримки. Браузерні чат-боти
пропонують поради і рекомендації лояльним клієнтам бренду, пов'язані з
використанням продуктів, що продаються брендом. Наприклад, чат-бот Sephora
советует користувачам підібрати ідеальну помаду. Точно так же чат-бот TK-
Maxx допомагав користувачам вибирати подарунки для своїх друзів і сім'ї під
час Різдва 2016 року. Одним з перших роздрібних продавців для вивчення чатів
для продажів був H & M. Чат-бот H & M допоміг користувачам переглянути
каталог продуктів і додати продукти в свої кошики. Виробники автомобілів, такі
як Tesla, Kia і Mercedes, розробили чат-ботів, які допомагають водіям отримати
інформацію про своїх автомобілях. Чат-боти дуже ефективні в банківській і
фінансовій індустріі. Банкінг був одним з перших секторів, які
експериментіровалі з діалоговими інтерфейсами. Банківські чат-боти
17
відповідають на загальні питання про фінансові продукти, безпечному
банківському обслуговуванні і т. д., а також надають конконкретного і
персоналізовану інформацію по рахунках пользователем. Багато найбільші
банки і постачальники фінансових послуг, включаючи Bank of America, ICICI
bank, HSBC, Royal Bank of Scotland, Capital One, MasterСard і т. д., розгорнули
чат-боти, щоб допомогти своїм клієнтам. Багато фінансові інститути створюють
чат-ботів, які виступають в якості фінансового помічника для користувачів.
Ernest.ai і Cleo - це чат-боти, які з'єднують вас з вашими банківськими
рахунками і говорять про ваших витратах, балансах, а також дають поради щодо
економії грошей. Чат боти широко використовуються в страховому секторі, де
виступають в як асистенти, здатних отримати для вас индивидуальні
котирування (наприклад, SPIXII 1).
Чат-боти застосовуються в юридичному, медичному, правительственном і
незалежному секторах. Чат-бот під назвою DoNotPay допоміг людям оскаржити
паркувальні квитки в Лондоні і Нью-Йорку в більш ніж 160 000 випадків. Після
цього було разработаале багато нових чат-ботів, що дозволяють допомогти
людям отримати доступ до судових та юридичних послуг: оцінка злочинності
(LawBot), реєстрація бізнесу (LawDroid), допомога орендарям (RentersUnion),
допомога в юридичних питаннях і документації (Lisa, LegaliBot, Lexi, DocuBot),
пошук адвокатів (BillyBot). У незалежному секторі чат-боти використовувалися
для распространання інформації про проблеми благодійності. Stoptober 1 - це
чат-бот Facebook, який був розроблений Національними службами охорони
здоров'я (NHS) у Великобританії, щоб допомогти курцям кинути палити. Інший
чат-бот, Yeshi 2, був розробити конструкцію тан, щоб привернути увагу до
водної кризи в Ефіопії. Чат боти починають вносити свій вклад в охорону
здоров'я. Чат-боти Your.MD і HealthTap були розроблені для діагностики
проблем зі здоров'ям на основі симптомів. Emily 3 - це чат-бот, розробленихний
LifeFolder, щоб допомогти прийняти рішення після смерті (наприклад,
юридична документація, підтримка життєзабезпечення, донорство органів і
багато іншого).
18
Чат-боти використовуються не тільки для того, щоб допомогти кліентам,
але і всередині, для співробітників. Чат-боти в деякому сенсі стають колегами,
допомагаючи співробітникам в роботі з повторяющимися, рутинними і нудними
завданнями. Служби обміну спільнотанями, такі як Slack і Microsoft Teams,
заохочують чат-ботів на своїх платформах для автоматизації службового зв'язку.
ці боти націлені на залучення співробітників в чат для вирішення интевій і
важливих завдань. Наприклад, є боти, здатні допомогти колегам поділитися
знаннями (Obie.ai), отримати доступ до інших службам, таким як GDrive
(WorkBot), налаштувати зустрічі (Meekan), обговорити обід (LunchTrain) і навіть
допомогти в прийнятті рішень (ConcludeBot, SimplePoll). Якщо вам цікаво
дізнатися більше варіантів використання, я б порекомендував вам поглянути на
деякі сайти з каталогами ботів, такі як botlist.co і www.chatbots.org, де ви
знайдете більше інформації та натхнення.
1.6 Інструменти розробника
За останні кілька років екосистема інструментів і послуг воколо ідеї
діалогових інтерфейсів зросла. існує безліч інструментів, які ми можемо
використовувати для дизайну, разництва і управління чат-ботами.
1.7 Інструменти прототипування
Інструменти прототипирования використовуються, щоб показати кліентам,
як буде виглядати і вести себе чат-бот. Це інструменти, коториє ви можете
використовувати під час конструювання діалогу, після того як запишете ідею і
приклади діалогів між користувачем і ботом на зворотному боці серветки.
Інструменти прототіпірованя дозволяють візуалізувати бесіду між користувачем
і ботом і продемонструвати динаміку розмови в обох напрямках. BotSociety.io
(botsociety.io) і BotMock.com (botmock.com) - приміри популярних інструментів
прототипирования. Деякі з цих інструментів дозволяють експортувати прототип
і створювати відео.
19
1.8 Канали
Канали - це місця, де користувачі можуть взаємодіяти з чата ботом. Існує
кілька каналів розгортання, за якими ваші боти можуть бути доступні
користувачам. До них відносяться служби обміну повідомленнями, такі як
Facebook Messenger, Skype, Kik, Telegram, WeChat і Line; офісні та командні
чати, такі як Slack, Microsoft Teams і багато інших; традиційні канали, такі як
веб-чат, SMS і голосові дзвінки; і розумні динаміки, такі як Amazon Echo і
Google Home. Виберіть канал, базуючись на ваших користувачів і вимогах
проекту. Наприклад, якщо ви створюєте чат-бота для споживачів, Facebook
Messenger може бути кращим вибором через зростаючого числа користувачів,
які застосовують послугу, щоб підтримувати зв'язок з друзями та родиною.
Додати вашого чат-бота в їх список контактів може бути простіше, ніж
заставити їх завантажити ваш додаток. Якщо користувачеві необходимо
взаємодіяти з ботом голосом в домашній або офісній середовищі, канали
розумних динаміків можуть бути ідеальним вибором. І нарешті, є інструменти,
які можуть підключати чат-ботів до багатьох каналах одночасно (наприклад,
інтеграція Dialogflow, служба MS Bot і Smooch.io і т. д.).
1.9 Засоби розробки чат-ботів
Існує безліч інструментів, які можна виковать для створення чат-ботів без
необхідності роботи з кодом напряму: Chatfuel, ManyChat, Dialogflow і т. д.
Chatfuel дозволяєдизайнерам створювати потік діалогу з використанням
візуальних елементів. За допомогою ManyChat ви можете вибудувати потік,
користуючись візуальну карту, яка називається FlowBuilder. Діалогові елементи,
такі як висловлювання бота і кнопки відповіді пользователя, можуть бути
налаштовані шляхом простого перетягування елементів інтерфейсу. Dialogflow
можна використовувати для створення чат-ботів, які вимагають розширених
методів розпізнавання природного мови для взаємодії з користувачами. З іншого
боку, існують мови сценаріїв, такі як мова розмітки штучного інтелекту
(Artificial Intelligence Markup Language - AIML), ChatScript і RiveScript, які
застосовуються для створення чат-ботів. Ці сценарії будуть містити діалоговий
20
контент і потік, які потім повинні бути відправлені программе інтерпретатора
або механізму правил, щоб оживити чат-бота. Інтерпретатор вирішує, як
продовжувати діалог, зіставляючи пользовательскіе висловлювання з шаблонами
в сценаріях. Хоча з допомогою цього підходу легко створювати діалогових чат-
ботів, становітся складно створювати транзакційні чати, чи не генеруючи явних
семантичних уявлень призначених для користувача висловлювань. PandoraBots -
популярна веб-платформа для створення чат-ботів AIML. В якості альтернативи
існують бібліотеки SDK, які можале використовувати для створення чатів: MS
Bot Builder, BotKit, BotFuel і т. д. SDK надається на одному або декількох мовах
программування, щоб допомогти розробникам у створенні основного
діалогового модуля управління. Можливість настройки діалогового менеджера
дозволяє розробникам гнучко форматувати бесіди і інтегрувати в бота завдання
резервного копіювання, без зайвого коду і сценарних платформ. Після створення
менеджер діалогів може бути підключений до іншим службам, таким як
розпізнавання природної мови, щоб сприймати призначені для користувача
висловлювання.
1.10 Месенджери
Свій розвиток інтернет-сервіси для спілкування почали з чатів, потім
месенджери, потім соціальні мережі, але з недавніх пір месенджери знову
очолили список найперспективніших сервісів. Це підтверджую дослідження
компанії «Білайн» в 2017 році: кількість користувачів месенджерів в Російській
Федерації збільшилася на 7%. Одночасно з цим середня кількість
месенджерів, які використовуються одним користувачем, збільшилася за 2017
рік з 1,73 до 3 штук. месенджери використовуються переважно дорослими, так
на частку осіб до 18 років припадає 7,7% від загальної кількості аудиторії,
користувачі у віці від 18 до 25 років складають 9,8%, від 25 до 35 років - 32,3%,
від 35 до 45 років - 26,8%. При цьому 13,1% користувачів месенджерів
знаходяться у віці від 45 до 55 років, а 7,6% - від 55 до 64 років. І лише 2,7%
аудиторії месенджерів знаходиться в віці старше 64 років [11].
21
Причина повторної хвилі популярності месенджерів - зміни в області
мобільного Інтернету: високі швидкості, набагато нижчі ціни, ніж раніше,
широке поширення смартфонів. Кріс Мессіна в статті «2016 will be the year of
conversational commerce »[1] назвав 2016 рік - роком діалогової або розмовної
комерції. Розуміючи під цим поняттям чати, месенджери або інші інтерфейси на
природній мові (тобто голосом), які забезпечують взаємодію людей з торговими
брендами або послугами.
Кінцевим результатом він бачить те, що користувачі будуть спілкуватися з
брендами і компаніями через месенджери. При цьому, на його думку,
неважливо, з ким будуть спілкуватися люди - зі співробітником компанії, з ботом
або з їх комбінацією.
Всі сучасні месенджери мають безліч схожих функцій, таких як відправка
повідомлень, медіафайлів, аудіо- та відео спілкування. 5В даний час існує
велика різноманітність месенджерів, серед яких варто відзначити деякі з них, а
також їх переваги та недоліки (Додаток А).
На особливу увагу заслуговує месенджер Telegram. Telegram - це
кроссплатформне додаток, розроблене на мові програмування C ++, що дозволяє
обмінюватися повідомленнями і файлами більшості форматів. Мессенджер
використовує спеціально розроблену серверну частину з закритим кодом, які
працюють на серверах Німеччини і США. Telegram має ряд переваг:
приватність — Усе чати зашифровуються, а повідомлення з
нищуються через зазначений час;
швидкість - швидкість доставки повідомлень вище, ніж у аналогів;
розподіл - сервера Telegram розташовані по всьому світу, що підвищує
відмовостійкість;
відкритість - використання відкритого протоколу MTProto і API,
безкоштовних для всіх;
відсутність підписок і реклами;
відсутність обмежень на розмір повідомлень і вкладених файлів.
З мінусів можна відзначити відсутність відеодзвінків. Засновниками
месенджера Telegram є брати Павло та Микола Дурови. Павло є фінансовою і
22
ідеологічною опорою проекту, а Микола зайнятий технічними аспектами.
Особливостями даного мессенджера є секретні чати і спеціально розроблений
протокол шифрування MTProto (рисунок 1.2)
Секретні чати потрібні для людей, які хочуть забезпечити себе
максимально безпечним спілкуванням. Крім використання основного протоколу
всі повідомлення шифруються ключами за принципом від пристрою до
пристрою. Ніхто не перехопить і не розшифрує повідомлення, включаючи
співробітників Telegram. Повідомлення з таких чатів пересилати не можна і вони
не зберігаються на серверах додатки. Але у секретних чатів є два недоліки - це
неможливість відкрити чат на пристрої, яка не брала участі в його створенні, і
ніхто не захищений від скриншота інтерфейсу Telegram з відритим секретним
чатом.
Рис. 1.2. Принцип роботи протоколу шифрування MTProto
Мессенджер Telegram доступний для всіх популярних платформ,
наприклад, Android OS, iOS, Windows Phone, Linux та інші. Також в більшості
версія для різних операційних систем доступні як мінімум англійська, російська,
23
польська та німецька мови. Приклади інтерфейсу десктопного додатка на
Windows 10 і iOS зображені на рисунках 1.2 і 1.3.
Також в більшості версія для різних операційних систем доступні як
мінімум англійську, російську, польську та німецьку мови.
Рис. 1.3. Інтерфейс Telegram на Windows 10
Останнім часом Telegram веде активну розробку своєї блокчейн-
платформи Telegram Open Network і криптовалюти Gram на її основі.
Рис. 1.4. Інтерфейс Telegram на iOS 11
24
1.11 Чат-боти
Останнім часом в месенджерах набирають популярність такі сервіси як
чат-боти. Сам термін «чат-бот» був придуманий Майклом Молдін в 1994 р для
опису розмовних програм. Вивчивши сучасний стан використання чат-ботів в
месенджерах, можна прийти до висновку, що чат-боти є універсальними
засобами, здатними до вирішення різноманітних завдань - від спілкування до
розваг, від надання медичної консультації до замовлення товарів і послуг за
допомогою спеціалізованих прикладних рішень, від розпізнавання емоцій до
вирішення складних консалтингових завдань в службах підтримки
клієнтоорієнтованих інформаційних систем. У будь-якому випадку, в
незалежності від платформи, чат-бот — це прикладна програма, яка, отримуючи
інформацію від користувача, формує коректні, логічно обґрунтовані відповіді.
На сьогоднішній момент існує величезна різноманітність чат-ботів. Деякі з
можливих варіантів представлені нижче:
ігрові чат-боти (квести, рольові ігри);
рекламні чат-боти (Хрусteam, Coca-Cola);
новинні чат-боти (Коммерсант, Meduza);
чат-боти для доставок, магазинів, сервісів (таксі «Максим», піцерія «Папа
Джонс», бронювання поїздів і літаків «Туту.рф»);
чат-боти для консультації і підтримку клієнтів (банк «Точка», каршерінг
«UrentCar») та інші.
В останнім часом великі можливості відкривають інформаційні
технології, пов'язані з чат-ботами. Вони настільки міцно увійшли в життя
людей, що застосовуються в усіх сферах людської діяльності, і з кожним днем їх
роль все більше збільшується. В першу чергу це пояснюється тим, що основну
частину свого часу люди проводять за смартфоном в email-клієнтах і
месенджерах.
Боти - це програми, які виконують різні завдання для користувача, що
знаходиться в месенджері. Бот виглядає як звичайний чат, однак спілкування
відбувається не з людиною, а з програмою, яка може прийняти замовлення на
виклик машини, якщо це - бот таксі, або надіслати свіжі статті, якщо це -
25
новинний бот, або замовити доставку їжі додому, якщо це - ресторанний бот. Не
так давно чат-боти здобули велику популярність, перевтілившись з розваги в
більш серйозну річ, так як вони, в основному, стали використовуватися для
вирішення серйозних бізнес- завдань. В епоху інформаційних технологій - це
нормальне явище, а тим більше — мережі Інтернет, адже суспільство давно
перейшло на «нове» і ділове, і неділові спілкування. По-перше, чат-боти - це
«платформи» для вирішення бізнес-завдань. По-друге, чат-бот - це програма, яка
підтримує діалог з користувачем, вибираючи відповіді з бази даних: ви
запитуєте, де пообідати і тут же отримуєте миттєвий відповідь. Крім того, чат-
боти виконують безліч корисних функцій у виконанні рутинних операцій,
пошуку інформації, об'єднання даних, роботі з клієнтурою.
Чат-бот як віртуальний співрозмовник має базу знань, яка представляє
собою набори можливих питань користувача і відповідних їм відповідей.
Найбільш поширеними варіантами для отримання потрібної відповіді є ключові
слова, збіг фрази, збіг контексту. Завжди існують якісь прості і легкі по
виконання справи, на які не хочеться витрачати час. Тут на допомогу завжди
можуть прийти чат-боти. Століття друкарських машинок, ходьби по бібліотеках
і нескінченних черг в книгарні канув в Лету. Тепер для збору інформаціі
можна використовувати чат-ботів. Звичайно, це робиться за допомогою
спілкування з людьми, але аж ніяк не завжди. Наприклад, в рамках якого-небудь
заходи чат-боти можуть повідомляти всім учасникам новини і надавати
довідкову інформацію.
1.12 Класифікація ботів для СМОП
«Класифікувати ботів можна за декількома параметрами. За способом
отримання інформації від користувача боти поділяються на:
Текстові – які отримують інформацію від користувача у текстовій формі та
обробляють її для виділення команд;
Голосові – які перетворюють людське мовлення на текст, а вже тоді його
аналізують».
26
«Текстові боти є простішими у розробці та швидшими, за рахунок того,
що немає затримки обробки інформації. Проте дана затримка зменшується з
кожним роком за допомогою нових алгоритмів обробки голосової інформації та
збільшення потужностей сучасних пристроїв. Голосові помічники є зручнішими
у багатьох випадках, оскільки вони можуть бути повноцінними
співрозмовниками. Крім того, вони можуть сприймати та розуміти людську
мову, вони, зазвичай, здатні синтезувати відповіді у вигляді аудіо. Це дозволяє
вести діалог із такою програмою».
«Одним з перших віртуальних співрозмовників була програма Еліза,
створена в 1966 році Джозефом Вейзенбаумом. Еліза пародіювала мовну
поведінка психотерапевта, реалізуючи техніку активного слухання, перепитуючи
користувача і використовуючи фрази типу «Будь ласка, продовжуйте» » [24].
«Для найбільш розвинених програм-співрозмовників існує окремий
термін– «віртуальний помічник». Вони здатні, за голосом, впізнати хто до них
звертається та врахувати це при відповіді. Наприклад, при звертанні дитини,
помічник видаватиме тільки доречний для дітей контент. Також ведеться
активна розробка засобів для аналізу емоційного забарвлення голосу
користувача. Тобто, на основі тону голосу та підбору слів користувачем, бот
може визначити яку відповідь краще надати [10]. Вважається, що ідеальна
програма-співрозмовник повинна пройти тест Тьюринга. Цей тест, призначений
для перевірки здатності машини демонструвати розумну, людську поведінку.
Щоб пройти тест, відповіді програми не повинні відрізнятися від відповідей
людини впродовж п'ятихвилинного тесту».
За призначенням чат-ботів поділяють на:
ЧБ для розмов на широкий спектр тем;
Орієнтованих на певну мету.
«Перші призначені для діалогу із користувачем на абстрактні теми та без
певної чіткої мети. Другі орієнтовані на вирішення буденних проблем засобами
«природньої» мови [11]. Боти орієнтовані на допомогу користувачу у досягненні
певної мети (регулярне отримання корисної інформації, встановлення
27
нагадувань, тощо) є найбільш поширеними та саме про них йтиметься далі у
дисертації».
«Як і при роботі із програмою, при використанні бота важливий інтерфейс
взаємодії із користувачем. Інтерфейс власне месенджера чітко визначений, проте
інтерфейс бота це поняття, в певному сенсі, більш розмите. Він включає не
тільки спосіб введення інформації, але й методи взаємодії бота із цією
інформацією».
«До взаємодії бота із інформацією можна віднести підтримку команд,
можливості виокремлення команд із повідомлення користувача та можливість
розуміти контекст діалогу» [24].
1.13 Примітивні боти
«Підтримка команд – це те, що відрізняє бота від звичайного користувача.
Примітивні боти обмежуються цим функціоналом. У таких ботів є певний
обмежений набір доступних команд, які вони здатні обробити та виконати
пов’язану із ними дію».
«Часто для зручності користувача ці команди подаються візуально у
інтерфейсі месенджера і для їх відправки достатньо просто натиснути по ній на
екрані (рис. 1.5) » [24].
28
Рис. 1.5. Приклад команд-кнопок у інтерфейсі бота для Telegram
«Загальноприйнятою концепцією є написання фіксованих команд боту
використовуючи символ «/» як префікс. Наприклад «/help» - команда реалізована
для багатьох ботів, яка зазвичай виводить список доступних команд чи іншу
необхідну користувачу інформацію для початку роботи із ботом [13]. На рисунку
1.6 наведено приклад відповіді на таку команду ботом BotFather, який дозволяє
створити бота для месенджера Telegram. У команд такого типу не допускається
наявності пробілу між словами в команді. Наприклад, команда «/set name»
вважатиметься невалідною».
«Також до таких команд можливо додавати певний текст. До прикладу,
можна реалізувати таку команду: «/встановибудильник на 10 ранку». Таких ботів
найпростіше розробляти, а введення нових функцій потребує просто внесення
нової команди в програму» [24].
29
Рис. 1.6. Результат обробки команди «/help» ботом BotFather
1.14 ЧБ, які здатні виокремити команду з повідомлення
«Виокремлення команд із повідомлення («розуміння») користувача значно
підвищує привабливість бота, а тому стає все популярнішою функцією. До
прикладу, при наявності такого функціоналу бот розумітиме різноманітні
варіації команди, наприклад: «Чи не міг би ти установити будильник на 10:00
26-го червня» чи «Установи будильник на завтра на 10:00», що є дуже схожим на
«природню» розмову. За таких умов необхідне використання засобів обробки
природної мови (NLP) [14]. Людська мова часто є неточною і в залежності від
предмета та конкретної мови, що розглядається, одне слово може означати 500
різних речей. Наприклад, англійське слово «run» має 645 різних значень».
«Засоби обробки природного мовлення визначають значущі фрагменти
інформації, наданої користувачем і на їх основі формують правильну відповідь.
Ці засоби використовують розпізнавання названого об'єкта (англ. Named Entry
30
Recognition – NER) та токенізацію, щоб точно визначити те, що хоче
користувач».
«Розпізнавання названого об'єкта - це тип вилучення інформації, який
призначений для ідентифікації та класифікації названих об'єктів у визначених
категоріях, включаючи, але не обмежуючись такими [15]:
а) Компанії та організації;
б) Місцеположення;
в) Імена людей чи назви продуктів;
г) Позначення часу» [24].
«Таким чином, система розпізнавання буде знати, що Джейн – це ім’я,
2013 рік – це 2013-й рік в григоріанському календарі, а Сан-Франциско – це
місто».
«Щоб ЧБ зрозумів речення, йому спочатку потрібно розділити його і
перетворити на серію «токенів». Ці токени можуть мати будь-яку форму – від
слова до числа або будь-якого знаку пунктуації. Це також можна назвати
сегментацією речення. Бот потім буде класифікувати всі токени за
контекстом» [24].
«Десь на межі між цим та попереднім видом ботів існують боти, що
виділяють ключові слова із фраз користувачів. В таких ботів є заготовані фрази
для відповіді на запитання із певним набором ключових слів. Наприклад, слово
«акція» для бота на сайті роздрібної компанії призведе до використання
попередньо прописаної для цього слова відповіді: «Сьогодні взуття за акційною
ціною!». Але якщо такого бота запитали щось більш складне або серію запитань
– він або попросить вас уточнити запитання, або надасть вам абсолютно
непідходящу відповідь» [24].
1.15 Боти які здатні розуміти контекст діалогу
«Наступним витком еволюції чат-ботів є можливість розуміти загальний
контекст діалогу. Для прикладу можливості розуміти контекст діалогу наведемо
приблизно можливий діалог (Л – людина, Б- бот):
Л – Додай банани у список покупок.
31
Б – Додано.
Певна перерва в діалозі, або розмова на іншу тему.
Л – Також потрібно купити упаковку борошна.
Б – Борошно додано у список покупок.».
«Результатом стане список покупок, що міститиме і банани, і упаковку
борошна. Слід також звернути увагу на різні варіанти відповіді від бота. Це ще
більше наближає штучний діалог до діалогу між людьми. У даному випадку, для
гнучкості розробки бота та для забезпечення можливості зрозуміти зв’язаність
повідомлень, необхідним є застосування нейронних мереж та машинного
навчання».
«Схожим застосуванням є використання нейронних мереж для
персоналізації та вдосконалення виводу інформації користувачеві. Наприклад,
бот проаналізував недавнє спілкування та прийшов до висновку що користувач
надає перевагу процесорам марки Intel, тому на запит «Я хотів би купити
процесор» він відповість інформацією про продукцію даної марки».
«Сучасні боти також можуть інтегруватися із сторонніми сервісами.
Наприклад, якщо сказати голосовому помічнику, від практично будь якої
компанії, щоб він включив музику – він включить її в улюбленій програмі для
відтворення музики користувача, якщо, звісно, ця програма підтримує таку
інтеграцію. На рисунку 2.3 наведено приклад використання Google Assistant
(віртуального помічника від компанії Google) на телефоні для відтворення відео
на телевізорі та керування відтворенням у режимі діалогу із ботом» [24].
32
Рис. 1.7. Використання Google Assistant на телефоні для
відтворення відео на телевізорі
1.16 Приклади застосування ботів
«Чат боти найвідоміші тим, що використовуються як агенти служби
підтримки клієнтів. Вони здатні відповісти на більшість запитань клієнта без
необхідності втручання людини. Проте крім цього існує безліч інших корисних
застосувань для таких програм. Існують боти, що дозволяють забронювати
готельні номери, скласти людині компанію, організовувати зустріч для групи
людей, відправити гроші користувачам, тощо».
«Один з найновіших ЧБ, який сколихнув увесь світ – це безкоштовний
ботюрист. Незважаючи на те, що він не скоро замінить справжнього адвоката,
він може допомогти вам створити справи для оскарження штрафів за
неправильне паркування, отримати компенсацію за неочікувані витрати при
подорожах або надасть відповіді на різноманітні юридичні питання».
«Загалом ЧБ можна запрограмувати на практично будь-що. Деякі навіть
здатні розуміти емодзі та картинки, реагуючи на них схоже на людину.
Прикладом може бути той факт, що коли бот, розроблений компанією Microsoft,
33
Xiaoice отримав фотографію людини, яка з ним розмовляла із підвернутою
ногою, він запитав наскільки було боляче при травмі».
«Прикладом використання, відомим сайтом, функціоналу бота є -
AutoTLDR бот від сайту Reddit. Більшість людей знають Reddit як «обличчя
Інтернету». Це спільнота, де можна поділитися практично всім на форумах, які
називаються субреддіти (subreddits). Однією із багатьох функцій, які Reddit
пропонує своїм користувачам є AutoTLDR (Too Long, Do not Read) бот. Він
призначений для тих, хто хоче ознайомитися з новинами, проте не має часу
читати всю статтю. За короткий проміжок часу бот створює резюме статті
довжиною у 450-700 символів, розміщуючи його на форумах разом із
посиланням на повноцінну статтю».
«Іншим прикладом використання ботів є «DR. А. І. ♥» - це чат бот «лікар».
Він може забезпечити базовий діагноз для багатьох поширених захворювань,
таких як бронхіт, розтягнута щиколотка, або лихоманка, задаючи важливі і
осмислені питання. «DR. А.І. ♥» набагато відрізняється від простого
використання пошукової системи для пошуку причини певних симптомів,
оскільки він діє так само, як і звичайний лікар, запитуючи навідні запитання та
надаючи рекомендації щодо подальших кроків. Якщо вам потрібне заключення
фахівця, «DR. А.І. ♥» також може надіслати такий запити реальному лікарю,
щоб отримати схвалення. При цьому користувачу не потрібно виходити з дому.
Звичайно, «DR. А.І. ♥» не повинен використовуватися в надзвичайних ситуаціях
і не є повною заміною справжнього лікаря» [24].
«Mezi (рисунок 1.8) – ще один корисний бот, який дозволяє легко
спланувати подорож. З його допомогою можна забронювати квитки, готелі та
навіть вечерю у ресторані. Скажіть ЧБ, коли і куди ви хочете поїхати і звідки ви
хочете полетіти і він підбере та забронює рейс та готель замість вас. Цей бот
усуває потребу у пролистуванні десятка веб-сайтів для бронювання авіа
перельотів та готелів, а надає зручний інтерфейс для їх пошуку».
34
Рис. 1.8. Інтерфейс бота Mezi
«Надзвичайно популярними є боти для доставки їжі. Вони допомагають
вам замовити їжу та її доставку, без необхідності дзвонити до ресторану. Все
більше і більше компаній використовують такого помічника, від мереж доставки
піци до крафтових броварень (рисунок 1.9). Для замовлення потрібно просто
вказати ЧБ необхідні товари, підтвердити свою інформацію та здійснити оплату.
Бот проробить усі необхідні функції для того щоб користувач отримав їжу у
визначений час» [24].
35
Рис. 1.9. Інтерфейс бота для доставки їжі Foodie у Facebook Messenger
1.17 Мікроплатежі у вашому додатку
Я провів дослідження загальнодоступного додатка для домашніх тварин
на основі чат-бота Telegram, який діє як біткойн-гаманець і дозволяє надсилати
та отримувати підказки між користувачами Telegram та іншими так званими
«додатками Lightning». Я припускаю, що ви знайомі з Bitcoin & Telegram в
цілому, я постараюся опублікувати коротко і без глибокого стрибка в деталі.
Telegram — це просто месенджер, який дозволяє створювати власні програми
(чат-боти) за допомогою їхньої платформи.
• Які ключові моменти такого додатка?
• Дозволяє оцінювати ідеї та відповіді інших користувачів на реальну
цінність «віртуальні лайки». Це виводить онлайн-розмову на абсолютно новий
рівень
36
• Реальний приклад працюючого додатка для мікроплатежів, який може
співпрацювати з іншими організаціями
через Інтернет за допомогою відкритого протоколу
• Усі модулі є проектами з відкритим вихідним кодом і їх можна легко
повторно використовувати та коригувати
для власного проекту. Додаток не поширюється на сторонні комерційні
послуги.
Навіть воно підпадає під поле електронної комерції, яке зараз майже
закрите, додаток базується на відкритих рішеннях.
Ви можете запитати, що робити, якщо у вас немає біткойнів для
використання в додатку. Ви просто можете отримати підказку від існуючого
користувача програми або купити невелику кількість біткойнів на різних біржах
або біткойн-гаманців для мобільного телефону або ПК.
Рис. 1.10. Інтерфейс існуючого користувача програми
Коли ви отримаєте біткойн, ви можете запустити @atomic_tipbot і зробити
/deposit.
Ви побачите рахунок-фактуру, ви можете вибрати бажаний спосіб оплати
та відправити гроші, просто відсканувавши QR-код або натиснувши кнопку
(«відкрити в гаманці») на рахунку-фактурі.
37
Рис. 1.11. Інтерфейс існуючого користувача програми
Підтвердьте платіж у своєму мобільному гаманці, і ви майже миттєво
побачите екран підтвердження в Telegram.
Поки що ми торкнулися двох окремих частин програми: серверної
частини бота telegram і системи обробки платежів (насправді це більше схоже на
інтерфейс).
Для створення цього Telegram-бота я використовував Python Telegram Bot.
І, звичайно, бот з відкритим кодом.
В якості системи обробки платежів для створення рахунків-фактур,
перевірки статусу, надсилання сповіщень та догляду за UX використовується
BTCPayServer, документацію якого можна знайти тут.
Якщо ви шукаєте, як безпосередньо обробляти події платежів, ви можете
переглянути сторінки керівництва Electrum CLI для платежів у мережі та
ознайомитися з рішеннями для платежів поза мережею (Lightning), як-от
Lightning-charge або Sparko.
• Ви сказали «без сторонніх» і «без хмарних служб»!?
Так, це правда. У своїй програмі я використовую безкоштовний спільний
хостинг екземпляра BTCPayServer — BTCPayJungle, але його можна розгорнути
навіть на власному виділеному сервері. Просто пам’ятайте, що тоді вам
знадобиться близько 500 ГБ місця для зберігання біткойнів і блокчейнів.
BTCPayServer не містить приватних ключів або конфіденційної інформації, яка
може дозволити хакерам контролювати кошти на вашому гаманці. Для
38
ланцюгових (стандартних) платежів вам потрібно надати ключ xpub від вашого
гаманця до BTCPayServer, щоб він міг генерувати публічні адреси. Таким
чином, архітектура BTCPay дозволяє обробляти платежі бездовірним способом
навіть у спільному середовищі. Його дуже просто налаштувати, якщо ви
використовуєте перевірені гаманці, такі як Electrum.
• Що таке Lightning Network?
Це щось на зразок надбудови до біткойна, яке додає додатковий шар абстракції
та дозволяє здійснювати миттєві та майже безкоштовні транзакції з біткойнами.
Усе це можливо завдяки магії криптографічного мультипідпису, яку часто
називають смарт-контрактом. Існує кілька реалізацій протоколу LN. Я
використовую реалізацію C-lightning C.
Основна відмінність між внутрішніми і позачейновими (Lightning)
платежами полягає в тому, як зберігаються транзакції. Усі транзакції в ланцюжку
транслюються на всю мережу, тому кожен запущений вузол біткойн
записуватиме цю транзакцію в блокчейн, якщо буде видобуто блок, що містить
цю транзакцію. Гей, BitFury, я правий? ;) Тому ми називаємо такі транзакції он-
ланцюжками. Такі транзакції будуть зберігатися в блокчейні до кінця його
існування. Можна публічно відстежувати, аналізувати та відстежувати будь-яку
таку транзакцію через мережу.
У випадку позачейнової (Lightning) транзакції все відбувається інакше.
Кожен вузол блискавки має (може бути багато) адреси в ланцюжку, з якої всі
починаються. Коли кошти надходять на таку адресу, вузол, використовуючи
методи криптографії, може відкрити так званий канал блискавки до іншого
вузла, що означає, що ці два вузли уклали угоду про наявність коштів між ними.
Пізніше всі транзакції, які здійснюються через канал (власні транзакції, або це
може бути перенаправлена транзакція з іншого вузла), зберігаються тільки на
цих двох вузлах (і проміжному вузлі, якщо такий був). Єдиними транзакціями,
які зберігаються в мережевому блокчейні, є транзакції відкриття та закриття
каналу. Ось чому транзакції Lightning ми називаємо позачейновими. В
основному вони існують лише у файлі бази даних вузлів.
39
• Все це відображено на схемі
Рис. 1.12. Схема транзакції Lightningю
Коротка розповідь:
1) Користувач надсилає повідомлення та просить внести до бота в
Telegram
2) Telegram запускає додаток Python бота
3) додаток python надсилає запит на BTPayServer
4) BTCPayServer генерує вхідні адреси для BTC і LTC, а також зв'язується
з lightning-charge, яка отримує дані від демона c-lightning. В результаті ми
отримуємо добре оброблений HTML-фрейм для обробки платежів
5) Користувач оплачує рахунок і побачить підтвердження
6) BTCPayServer надсилає сповіщення про оплату рахунку-фактури (IPN)
на вказану URL-адресу зворотного виклику, у нашому випадку це
40
перейде до callbacks.py (інша програма Python для прослуховування
зворотних викликів)
7) Відповідно до повної інформації про платіж баланс користувача
змінюється, і користувач отримує сповіщення
… якщо користувач вирішив зняти кошти (підказки, які він отримав)
8) Додаток Python бота прослуховує текст або зображення QR, коли
отримує дані рахунка-фактури (довгий рядок символів), а потім надсилає запит
на оплату цього рахунка іншій програмі python paylightning.py*, яка ініціалізує
виплати за допомогою c-lightning RPC.
Рис. 1.13. Зображення QR, дані рахунка-фактури
* Щоб бути справедливим, я маю зазначити, що мій pay-wrapper
paylightning.py є неповним і може повертати помилково-негативний у деяких
конкретних випадках. Ви повинні використовувати добре перевірену платіжну
оболонку для c-lightning у випадку використання, подібного до виробництва.
41
Користувачі можуть надсилати один одному підказки в групових чатах та
надсилати/отримувати цінність без будь-яких обмежень. Але це ще не все.
Завдяки протоколу Lightning Network, який є в якійсь уніфікованій і спрощеній
платіжній мережі, ви можете надсилати однакові монети балансу в абсолютно
різні програми. У Telegram є ще один біткойн-бот — @lntxbot. Користувач може
запросити депозит цьому боту
Рис. 1.14. Інтерфейс біткойн-бота — @lntxbot
Просто пересилайте дані з @lntxbot до @atomic_tipbot і вуу!
Це більше не «обмін номерами в базі даних», а оплата між двома
окремими, не пов’язаними «базами даних». У бота вже є кілька інтегрованих
LApps: sat2.io та lnsms.world.
Ви можете запитати, що саме означає інтеграція LApp?
Кожен вузол Lightning Network виконує роль біткойн-гаманця. Він має
баланс як на ланцюжку, так і поза ланцюгом. Баланс на ланцюжку зазвичай
42
використовується для відкриття каналів і зберігання коштів із закритих каналів,
коротше — для обслуговування вузлів. Позаланцюговий баланс – це те, що саме
використовується для обміну коштів між вузлами. Основними функціями
кожного вузла є можливість надсилати або отримувати кошти, тому вузол як
програмне забезпечення надає методи оплати та виставлення рахунків. Я
коротко покажу, як це відбувається:
user@ln-node:/ % lightning-cli invoice 1000000000 internal_description
external_description
{
"payment_hash" :
"64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"expires_at" : 1558709834,
"bolt11" :
"lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqd
pqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstc
g76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkm
s2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd
59r0g2mw4wzztwr6dcprxzej6"
}
У цьому випадку формується рахунок-фактура BOLT11, який є
уніфікованим форматом для запитів на оплату в мережі Bitcoin (а також
Litecoin). Цей рядок містить дані про одержувача рахунка-фактури, суму, мітку
часу, термін дії тощо. Для декодування цього рядка c-lightning надає метод
decodepay:
user@ln-node:/ % lightning-cli decodepay
lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdp
qv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg
76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms
2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd5
9r0g2mw4wzztwr6dcprxzej6
43
{
"currency" : "bc",
"created_at" : 1558105034,
"expiry" : 604800,
"payee" :
"025a14b8ed40583d67aec92da19453e0b2d1fbbf75f96f85d3dd0ff61a51ee0490",
"msatoshi" : 1000000000,
"amount_msat" : "1000000000msat",
"description" : "external_description",
"min_final_cltv_expiry" : 10,
"routes" : [
[
{
"pubkey" :
"03a20c0c2ae4508b669a70e5f82f08f69a3da5da3bf0c973673c3fe977db0f61e3",
"short_channel_id" : "574012x1255x1",
"fee_base_msat" : 1000,
"fee_proportional_millionths" : 1,
"cltv_expiry_delta" : 144
}
]
],
"payment_hash" :
"64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"signature" :
"304502210099f31dffd18b6db8296637db3e3a1ffbaf7b7db087a2ad1eedb7639f25e78
b25022079038370073681aa1e1a7a05de6588e98ead078896d0a37a15b755c212dc3d3
7"
}
Якщо нам потрібно сплатити якийсь рахунок, ми повинні використовувати
метод оплати c-lightning:
44
user@ln-node:/ % lightning-cli pay
lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql
2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0m
njerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j
{
"id" : 163,
"payment_hash" :
"c3e644a005f56e33df89facbce2c9dfcabbef5d105285a98272cacc77ab2de63",
"destination" :
"03021c5f5f57322740e4ee6936452add19dc7ea7ccf90635f95119ab82a62ae268",
"msatoshi" : 200000,
"amount_msat" : "200000msat",
"msatoshi_sent" : 200003,
"amount_sent_msat" : "200003msat",
"created_at" : 1558106072,
"status" : "complete",
"payment_preimage" :
"1a9552b9f4e9199e26839353f870b12cc85b7674a2fb134e78aa370032611019",
"bolt11" :
"lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql
2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0m
njerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j"
}
Усі статуси платежів обробляє вся мережа і ваш власний вузол. Вам не
потрібно (але у вас є можливість) спілкуватися з розробниками додатків на
стороні-отримувачі або їх API, деяким постачальником карток чи будь-яким
банком, щоб отримати підтвердження про ваш платіж або вивільнити кошти з
ваших власних рахунок. Немає жодних відкликань або будь-якого іншого
зовнішнього впливу на баланс ваших рахунків. Все, що вам потрібно, це
програмне забезпечення, яке діє за правилами децентралізованої мережі. Це
рішення для обміну вартості через Інтернет, без необхідності будь-якого арбітра
45
в середині, який вирішує про сумісність вашого платежу з деякими правилами,
іноді навіть раніше невідомими всім сторонам. У біткойні немає «внутрішніх»
правил, усі правила, які потрібно виконати у вашому додатку, відкриті та відомі.
Це робить можливим прямий, майже безкоштовний і миттєвий обмін
цінностями через Інтернет між людьми або навіть самим програмним
забезпеченням по-справжньому автономним способом.
Якщо є спосіб отримати платіжні дані з іншого додатка, ви можете діяти з ним у
фінансовому сенсі. Як і в нашому прикладі, lnsms.world — це веб-додаток, який
дозволяє відправляти смс на будь-який номер і платити за це біткойном. Щоб
інтегрувати таку опцію в наш додаток, нам просто потрібно передати необхідні
дані з веб-форми в lnsms.world:
payload = {
'number': phone_number,
'text': text,
'force_unicode': 0
}
send_req = requests.post('https://lnsms.world/invoice', data=payload)
if send_req.status_code == 201:
plain_invoice = str(send_req.text)
Я не знаю з якої причини, але lnsms відповідає кодом статусу 201 HTTP і
повертає рахунок-фактуру BOLT11. Що ж, цього достатньо, щоб оплатити цей
рахунок, і наші користувачі надішлють sms незабаром після отримання платежу.
Ми можемо стягувати певну плату зверху чи ні, це наш вільний вибір.
Тепер уявіть, що ваш бот насправді є більш корисним додатком і платить
не іншому боту, а якомусь іншому суб’єкту, підключеному до Інтернету. Або це
можуть бути платежі між програмним забезпеченням, машинами, магазинами,
постачальниками послуг, які регулярно повторюються кожні кілька секунд? Чи
відчуваєте ви силу мікроплатежів? Так буде виглядати Інтернет речей. Вже зараз
є такі проекти, як https://althea.org/, і найближчим часом ми зіткнемося з
великими змінами у сфері того, що ми називаємо електронною комерцією.
46
2 ОБРАННЯ ТЕХНОЛОГІЇ ПРОЕКТУВАННЯ
ТА СЕРЕДИ РОЗРОБКИ
Node.js - програмна платформа на движку V8, який транслює JavaScript-
код в машинний. Цей движок перетворює вузькоспеціалізований мову JavaScript
в мову загального призначення. У Node.js з'явилася можливість взаємодіяти з
пристроями введення-виведення через свій API, написаний на C ++,
використовувати сторонні бібліотеки, створені за допомогою різних мов
програмування, викликаючи їх з JavaScript-коду.
Node.js використовується переважно як back-end мову програмування,
виконуючи роль сервера, але так само є можливість розробки віконних
десктопних додатків за допомогою спеціальних фреймворків, наприклад, NW.js,
AppJS або Electron. З особливостей можна відзначити можливість
використовувати мову Node.js для розробки додатків в сфері «інтернету речей»
(Internet of Things, IoT). Останнім часом ми все частіше зустрічаємося з смарт-
браслетами, колонками і будь-який інший «розумної» технікою, яка в теорії
може бути запрограмована на Node.js.
Історія Node.js почалася з розробки нового JavaScript-движка V8 в
датському відділенні компанії Google. Провідний розробник Lars Bak виділив
основні проблеми, які повинні були вирішені в движку, це продуктивність і
масштабованість. Перша лабораторна версія була готовий 3 липня 2008 року, а
пізніше був представлений перший браузер Chromium в публічний реліз якого
входив новий движок. Крім браузерів на основі Chromium, наприклад, Chrome,
Comodo Dragon, Opera, Аміго та інші, існує ряд інших продуктів, що
використовують V8:
• Maxthon - веб-браузер з вбудованим блокуванням реклами, що
використовує два движка рендеринга: WebKit і Trident;
• стандартний браузер Android;
• операційна система Android;
• HP webOS - операційна система від Hewlett-Packard для
• комунікаторів, нетбуків і планшетів;
47
• Google Chrome OS - операційна система від Google на базі проекту
Chromium, орієнтована на хмарні сервіси.
У 2009 році програміст Rayn Dahl, після двох років експериментів над
створенням серверних веб-компонентів, являє Node.js. В ході досліджень
розробник прийшов до висновку, що замість традиційної моделі паралелізму на
основі потоків слід звернутися до собитійнооріентірованним системам через їх
простоти, низьких витрат і швидкодії. Сам Node.js пропонує «легкий спосіб
побудови масштабованих мережних серверів». Всю розробку фінансує компанія
Joyent.
Як приклад на малюнку 8 зображено фрагмент коду, який реалізує
простий сервер.
Рис. 2.1. Реалізація простого сервера на Node.js
2.1 Telegram Bot API
Bot API представляє собою HTTP-інтерфейс для роботи з ботами в
Telegram. Кожен бот - це спеціальний аккаунт, створений для автоматичного
оброблення та відправлення повідомлень. Існує два протилежних за логікою
способу отримання оновлень від бота:
• long pulling - додаток автоматично опитує сервера Telegram на наявність
будь-яких оновлень для бота. За замовчуванням 100мс;
48
• webhook - сервера Telegram самі сповіщають додаток на сервері як
тільки з'являться будь-які оновлення.
Вхідні оновлення будуть зберігатися на сервері до тих пір, поки їх не
оброблять, але не довше 24 годин. Незалежно від способу отримання оновлень,
у відповідь відправляється об'єкт Update, серіалізовані в JSON.
Всі запити до Telegram Bot API повинні здійснюватися через HTTPS в
наступному вигляді: https://api.telegram.org/bot<token>/НАЗВАНИЕ_МЕТОДА.
Принцип роботи взаємодії чат-бота і користувача зображений на рисунку 2.2.
Рис. 2.2. Принцип роботи чат-бота на платформі Telegram
Для того щоб отримати token необхідно написати спеціальному боту
@BotFather. Приклади доступних для API методів описані нижче:
• getUpdates - цей метод використовується для отримання оновлень за
технологією long polling;
• setWebhook - метод прив'язує до боту url домену, де міститься
запущений бот;
• sendMessage - метод відправляє текстове повідомлення в клієнт
Telegram;
• sendLocation - метод відправляє повідомлення з координатами в клієнт
Telegram;
• getFile - метод повертає долучення по його імені і ін. Допускаються
POST і GET запити.
Для передачі параметрів в Bot API є 4 способи:
• запит в URL;
49
• application / x-www-form-urlencoded;
• application / json (не прийнятний для завантаження файлів);
• multipart / form-data (для завантаження файлів).
2.2 Heroku
Heroku - хмарна PaaS-платформа, що підтримує ряд мов програмування. З
2010 року є дочірньою компанією Salesforce. Heroku, одна з перших хмарних
платформ, з'явилася в червні 2007 року і спочатку підтримувала тільки мову
програмування Ruby, але на даний момент список підтримуваних мов також
включає в себе Java, Node.js, Scala, Clojure, Python, Go і PHP. На серверах Heroku
використовуються операційні системи Debian або Ubuntu.
Heroku заснували в 2007 році Джеймс Лінденбаун, Адам Віггінс і Оріон
Генрі для підтримки проектів, заснованих на Rack. 8 грудня 2010 року Heroku
була куплена компанією Salesforc, зробивши її своєю дочірньою компанією. У
2011 році Ю. Мацумото, творець мови програмування Ruby, прийшов в
компанію в ролі провідного інженера. У цьому ж місяці була впроваджена
підтримка Node.js і Clojure. Також платформа надає підтримку таких СУБД, як
Cloudant, Membase, MongoDB і Redis, крім PostgreSQL.
Програми, що працюють на платформі Heroku, використовують також
DNS-сервер (зазвичай додатки мають доменне ім'я виду
«Імя_пріложенія.herokuapp.com»). Для всіх додатків виділяються кілька
незалежних віртуальних процесів, названі «dynos». Вони розподілені по
спеціальній віртуальній сітці, яка складається з декількох серверів. На Heroku є
власну систему контролю версій.
2.3 MongoDB
MongoDB - документо-орієнтована база даних з відкритим вихідним
кодом, яка не вимагає опису схеми таблиць. Основні можливості:
• підтримка відмовостійкості і масштабованості: асинхронна реплікація,
набір реплік і розподілу бази даних на вузли;
• документо-орієнтоване зберігання (JSON-подібна схема даних);
50
• ефективне зберігання великих об'єктів, адміністративний інтерфейс,
серверні функції, Map / Reduce і інше;
• використання Javascript в якості мови для формування запитів;
• профілювання запитів;
• широкий набір атомарних операцій над даними (умовний пошук, складна
вставка / оновлення тощо);
• різні типи даних (в тому числі підтримка масивів);
• підтримка індексів (B-Tree);
• повнотекстовий пошук, в тому числі російською мовою, з підтримкою
морфології;
• журнал операцій, що змінюють дані в базі даних.
На відміну від реляційних баз даних MongoDB пропонує
документоорієнтованих модель даних, завдяки чому вона працює швидше, має
кращу масштабованість, її легше використовувати.
Але, навіть враховуючи всі недоліки традиційних баз даних і гідності
MongoDB, важливо розуміти, що завдання бувають різні і методи їх вирішення
бувають різні. В якійсь ситуації MongoDB дійсно поліпшить продуктивність
вашої програми, наприклад, якщо треба зберігати складні за структурою дані. В
іншій же ситуації краще буде використовувати традиційні реляційні бази даних.
Крім того, можна використовувати змішані підхід: зберігати один тип даних в
MongoDB, а інший тип даних - в традиційних БД.
Вся система MongoDB може представляти не тільки одну базу даних, що
знаходиться на одному фізичному сервері. Функціональність MongoDB дозволяє
розташувати кілька баз даних на декількох фізичних серверах, і ці бази даних
зможуть легко обмінюватися даними і зберігати цілісність.
Розглянемо кілька властивостей цієї бази даних:
1) Формат даних в MongoDB.
Одним з популярних стандартів обміну даними та їх зберігання є JSON
(JavaScript Object Notation). JSON ефективно описує складні за структурою дані.
Спосіб зберігання даних в MongoDB в цьому плані схожий на JSON, хоча
51
формально JSON не використовується. Для зберігання в MongoDB
застосовується формат, який називається BSON або скорочення від binary JSON.
BSON дозволяє працювати з даними швидше: швидше виконується пошук
і обробка. Хоча треба зазначити, що BSON на відміну від зберігання даних в
форматі JSON має невеликий недолік: в цілому дані в JSON- форматі займають
менше місця, ніж в форматі BSON, з іншого боку, даний недолік з лишком
окупається швидкістю.
2) Кросплатформеність.
MongoDB написана на C ++, тому її легко перенести на найрізноманітніші
платформи. MongoDB може бути розгорнута на платформах Windows, Linux,
MacOS, Solaris. Можна також завантажити вихідний код і самому скомпілювати
MongoDB, але рекомендується використовувати бібліотеки з офіційного сайту.
3) Колекції.
Якщо в традиційному світі SQL є таблиці, то в світі MongoDB є колекції. І
якщо в реляційних БД таблиці зберігають однотипні жорстко структуровані
об'єкти, то в колекції можуть містити найрізноманітніші об'єкти, що мають різну
структуру і різний набір властивостей.
4) Реплікація.
Система зберігання даних в MongoDB представляє набір реплік. У цьому
наборі є основний вузол, а також може бути набір вторинних вузлів. Всі
вторинні вузли зберігають цілісність і автоматично оновлюються разом з
оновленням головного вузла. І якщо основний вузол з якихось причин виходить
з ладу, то один з вторинних вузлів стає головним.
5) Простота у використанні.
Відсутність жорсткої схеми бази даних і в зв'язку з цим потреби при
щонайменшій зміні концепції зберігання даних пересоздавать цю схему значно
полегшують роботу з базами даних MongoDB і подальшим їх масштабуванням.
Крім того, економиться час розробників. Їм більше не треба думати про
пересоздании бази даних і витрачати час на побудову складних запитів.
6) GridFS.
52
Однією з проблем при роботі з будь-якими системами баз даних є
збереження даних великого розміру. Можна зберігати дані в
файлах,використовуючи різні мови програмування. Деякі СУБД пропонують
спеціальні типи даних для зберігання бінарних даних в БД (наприклад, BLOB в
MySQL).
На відміну від реляційних СУБД MongoDB дозволяє зберігати різні
документи з різним набором даних, однак при цьому розмір документа
обмежується 16 Мб. Але MongoDB пропонує рішення - спеціальну технологію
GridFS, яка дозволяє зберігати дані за розміром більше, ніж 16 Мб.
Система GridFS складається з двох колекцій. У першій колекції, яка
називається files, зберігаються імена файлів, а також їх метадані, наприклад,
розмір. А в іншій колекції, яка називається chunks, у вигляді невеликих
сегментів зберігаються дані файлів, зазвичай сегментами по 256 Кб.
2.4 Мова програмування Python
Python це мова програмування загального призначення, націлений в
першу чергу на підвищення продуктивності самого програміста, ніж коду, який
він пише. Говорячи простою мовою, на Python можна написати практично що
завгодно (веб- / настільні додатки, ігри, скрипти по автоматизації, комплексні
системи расчѐта, системи управління життєзабезпеченням і багато іншого) без
відчутних проблем. Більш того, поріг входження низький, а код багато в чому
лаконічний і зрозумілий навіть того, хто ніколи на нѐм писав. За счѐт простоти
коду, подальший супровід програм, написаних на Python, стає легше і
приємніше в порівнянні з Java або C ++. А з точки зору бізнесу це влечѐт за
собою скорочення витрат і збільшення продуктивності праці співробітників [5].
Безсумнівним достоїнством є те, що інтерпретатор Python реалізований
практично на всіх платформах і операційних системах. Першим таким мовою
був Сі, однак його типи даних на різних машинах могли займати різну кількість
пам'яті і це служило деяким перешкодою при написанні дійсно яку переносять
програми. Python ж таким недоліком не володіє.
53
Так само, важлива риса - розширюваність мови, цього надається велике
значення і, як пише сам автор Гвідо ван Россум, мова був задуманий саме як
розширюваний. Це означає, що є можливість вдосконалення мови усіма
зацікавленими програмістами. Інтерпретатор написаний на Сі і вихідний код
доступний для будь-яких маніпуляцій. У разі необхідності, можна вставити його
в свою програму і використовувати як вбудовану оболонку. Або ж, написавши на
Cи свої доповнення до Python і скомпілювавши програму, отримати
"розширений" інтерпретатор з новими можливостями.
Наступне гідність - наявність великого числа підключаються до програми
модулів, що забезпечують різні додаткові можливості. Такі модулі пишуться на
Сі і на самому Python і можуть бути розроблені усіма досить кваліфікованими
програмістами. Як приклад можна навести такі модулі:
• Numerical Python - розширені математичні можливості, такі як маніпуляції
з цілими векторами і матрицями;
• Tkinter - побудова додатків з використанням графічного інтерфейсу
користувача (GUI) на основі широко розповсюдженого на X-Windows Tk-
інтерфейсу;
• OpenGL - використання великої бібліотеки графічного моделювання дво- і
тривимірних об'єктів Open Graphics Library фірми Silicon Graphics Inc.
Даний стандарт підтримується, в тому числі, в таких поширених
операційних системах як Microsoft Windows 95 OSR 2, 98 і Windows NT
4.0.
Єдиним недоліком, поміченим автором, є порівняно невисока швидкість
виконання Python-програми, що обумовлено її інтерпретованих. Однак, це з
лишком окупається перевагами мови при написанні програм не дуже критичних
до швидкості виконання.
З використаних модулів можна виділити: TeleBot, CherryPy, Requests, які
більш детально будуть описані нижче.
54
2.5 Модуль TeleBot
Цей модуль є оболонкою над запитами до Telegram Bot API,
використовується для спрощення та мінімізації написаного коду.
Всі типи визначені в types.py. Всі вони повністю відповідають визначенню
типів API Telegram, за винятком from поля Message, яке перейменовано в
from_user (оскільки from це зарезервований токен Python). Таким чином, до
таких атрибутів як message_id можна звертатися безпосередньо, наприклад:
message.message_id. Варто звернути увагу, що атрибут message.chat може
належати як певному користувачеві, так і групового чату.
Об'єкт Message також має content_type атрибут, який визначає тип
повідомлення. Атрибут content_type може бути одним з наступних рядків: text,
audio, document, photo, sticker, video і так далі. Можна використовувати декілька
типів в одній функції.
Всі методи API розташовані в класі TeleBot. Вони перейменовані, щоб
слідувати загальним угодами про імена Python. Наприклад: sendMessage
перейменований в send_message, editMessageText в edit_message_text [6].
Оброблювач повідомлень - це функція, прикрашена декоратором
примірника TeleBot. Обробники повідомлень складаються з одного або
декількох фільтрів. Кожен фільтр повертає True або False для певного
повідомлення, і якщо повертається True, то обробник отримує дозвіл на обробку
повідомлення. Приклад оголошення обробника повідомлень наведено в лістингу
2.1.
Лістинг 2.1 - Структура декоратора
@ Bot.message_handler (filters) def function_name (message):
bot.reply_to (message, "This is a message handler")
Ім'я функції не має ніяких обмежень, крім тих, що встановлені мовою.
Функція повинна приймати не більше одного аргументу, яким є повідомлення,
яке повинна обробляти функція. Поле filters - список аргументів, ключових слів.
55
Фільтр оголошуються в такий спосіб: ім'я = аргумент. Один обробник може мати
кілька фільтрів. Підтримувані TeleBot фільтри можна побачити в таблиці 2.1.
Важливо розуміти що, все обробники перевіряються в тому порядку, в
якому вони були оголошені. У лістингу 2.2 наведено кілька прикладів
використання фільтрів і обробників повідомлень.
Таблиця 2.1 - Підтримувані фільтри
Имя Аргументы Описание
Возвращает True,
Список допустимых
если
content_types типов (по умолчанию
message.content_types
[‗text‘])
находится в списке.
Возвращает True, если
функция re.search(regexp)
Регулярное выражение в
Regexp возвращает True и
виде строки
message.content_type ==
‗text‘.
Возвращает True, если
message.content_type ==
Список допустимых ‗text‘ и message.text
Commands
команд начинается с команды,
которая находится в
списке.
Функция (lambda или Возвращает True, если
Func произвольная функция) lambda или функция
возвращает True.
Лістинг 2.2 - Приклади декораторів
# Обробляє всі текстові повідомлення, що містять команди
'/ Start' або '/ help'.
@ Bot.message_handler (commands = [ 'start', 'help']) def handle_start_help
(message):
pass
# Обробляє всі відправлені документи і аудіофайли
@ Bot.message_handler (content_types = [ 'document',
56
'Audio']) def handle_docs_audio (message):
pass
# Обробляє всі текстові повідомлення, які відповідають регулярному
виразу
@ Bot.message_handler (regexp = "SOME_REGEXP") def handle_message
(message):
pass
# Обробляє всі повідомлення, для яких лямбда повертає True
@ Bot.message_handler (func = lambda message:
message.document.mime_type == 'text / plain', content_types = [ 'document'])
def handle_text_doc (message):
pass
В оновленні bot2.0 з'явилися так звані запит зворотного дзвінка
вбудовуються в inline-кнопки. Для обробки таких об'єктів використовується
спеціальний декоратор, пріведѐнний в лістингу 2.3.
Лістинг 2.3 - Оброблювач зворотного виклику
@ Bot.callback_query_handler (func = lambda call: True) def test_callback
(call):
logger.info (call)
2.6 Модуль CherryPy
CherryPy - це об'єктно-орієнтована веб-фреймворк, написаний на мові
програмування Python. Спроектовано для швидкої розробки веб-додатків для
мережі Інтернет. Являє собою надбудову над HTTP-протоколом, але остаѐтся на
низькому рівні і не виходить за рамки вимог RFC 2616.
Встановити CherryPy зовсім нескладно, досить завантажити його і
виконати кілька коротких інструкцій з файлу README. Модуль CherryPy
57
встановлюється точно так же, як і будь-який інший модуль Python, тому в
даному випадку не доводиться говорити про каталог установки. На відміну від
інших, більш складних серверних технологій, модуль CherryPy просто стає
доступним для використання щоразу, як тільки буде імпортовано за допомогою
інструкції import, як і будь-який інший модуль Python. Насправді CherryPy - це
не більше ніж самостійний додаток на мові Python, яке управляє своїм власним
багатопотоковим веб-сервером, завдяки цьому виконати «сценарій на стороні
сервера» так само просто, як запустити просту команду у вікні терміналу [7].
За замовчуванням сервер запускається локально на 8080 порту, і виконує
передану йому функцію, але так само можна задати деякі параметри вручну, такі
як: IP-адреса, порт, відкритий і закритий ключі SSL. Приклад завдання
параметрів і запуск веб-сервера приведений в лістингу 2.4.
Лістинг 2.4 - Приклад запуску веб-сервера
bot.remove_webhook () bot.set_webhook (url = WEBHOOK_URL_BASE +
WEBHOOK_URL_PATH,
certificate = open (WEBHOOK_SSL_CERT, 'r')) cherrypy.config.update ({
'Server.socket_host': WEBHOOK_LISTEN,
'Server.socket_port': WEBHOOK_PORT,
'Server.ssl_module': 'builtin',
'Server.ssl_certificate': WEBHOOK_SSL_CERT,
'Server.ssl_private_key': WEBHOOK_SSL_PRIV
})
cherrypy.quickstart (WebhookServer (), WEBHOOK_URL_PATH,
{ '/': {}})
Наведений приклад використовується для того, щоб після установки
вебхуков «слухати» коли прийде повідомлення від сервера Telegram.
58
2.7 Модуль Requests
Requests - бібліотека Python, яка елегантно і просто виконує HTTP-запити
(HyperText Transfer Protocol). У лістингу 2.5 приведений приклад отримання
інформації про веб сторінці через запит.
Лістинг 2.5 - Отримання публічного тайм-лайн GitHub
import requests
resp = requests.get ( 'htthps: //api.github.com/events')
Після виконання цього коду, в об'єкті resp зберігається вся необхідна
інформація про цей об'єкт.
Простий API Requests означає, що всі форми HTTP запитів є очевидними.
Наприклад, в лістингу 2.6 приведений, як можна зробити HTTP POST запит.
Лістинг 2.6 - POST запит
resp = requests.post ( "http://httpbin.org/post")
Інші HTTP-запити (PUT, DELETE, HEAD, OPTIONS) робляться за
аналогією [8].
2.8 HTTP-запити
Що стосується вивчення REST API. REST - це стиль архітектури
програмного забезпечення для побудови розподілених масштабованих веб-
сервісів, які використовують HTTP запити [9].
Протокол Передачі Гіпертексту (HTTP), один з протоколів стека TCP / IP
(Transmission Control Protocol / Internet Protocol), був спочатку розроблений для
публікації і отримання HTML (Hyper Text Markup Language) сторінок і тепер
використовується для розподілених інформаційних систем. HTTP
використовується у Всесвітній Павутині для передачі даних і є одним з найбільш
широко застосовуваних прикладних протоколів.
59
HTTP визначає протокол типу запит / відповідь. Коли клієнт, наприклад
веб браузер, посилає повідомлення запиту на сервер, HTTP протокол визначає
типи повідомлень, які використовуються клієнтом для запиту веб сторінки, а
також типи повідомлень, що застосовуються сервером для відповіді. Трьома
распространѐннимі типами повідомлень є GET, POST і PUT. На рисунку 2.3
наведено приклад GET-запиту.
POST і PUT використовуються, щоб посилати повідомлення, які
завантажують дані на веб сервер. Наприклад, коли користувач вводить дані в
форму, вбудовану в веб сторінку, POST включає дані в повідомлення, що
посилається на сервер. PUT завантажує ресурси або контент на веб сервер.
Будучи надзвичайно гнучким, HTTP не є безпечним протоколом.
Повідомлення POST завантажують інформацію на сервер у вигляді звичайного
тексту, який може бути перехоплений і прочитаний. Аналогічно, відповіді
сервера, як правило, HTML сторінки також не зашифровані.
Рис. 2.3. HTTP протокол з використанням GET
60
Для безпечної комунікації через Інтернет використовується Безпечний
HTTP протокол (HTTPS), щоб отримувати доступ або публікувати інформацію
на веб сервері. HTTPS може використовувати аутентифікацію і шифрування,
щоб убезпечити дані, коли вони переміщуються між клієнтом і сервером. HTTPS
визначає додаткові правила для проходження даних між Прикладним і
Транспортним Рівнями.
2.9 Формат JSON
JSON (JavaScript Object Notation) - простий формат обміну даними,
зручний для читання і написання як людиною, так і комп'ютером. Він
заснований на підмножині мови програмування JavaScript, визначеного в
стандарті ECMA-262 3rd Edition - December 1999. JSON - текстовий формат,
повністю незалежний від мови реалізації, але він використовує угоди, знайомі
програмістам C-подібних мов, таких як C, C ++, C # , Java, JavaScript, Perl,
Python і багатьох інших. Ці властивості роблять JSON ідеальним мовою обміну
даними.
JSON заснований на двох структурах даних:
• Колекція пар ключ / значення. У різних мовах, ця концепція реалізована як
об'єкт, запис, структура, словник, хеш, іменований список або
асоціативний масив.
• Впорядкований список значень. У більшості мов це реалізовано як масив,
вектор, список або послідовність.
Це універсальні структури даних. Майже всі сучасні мови програмування
підтримують їх в будь-якій формі. Логічно припустити, що формат даних,
незалежний від мови програмування, повинен бути заснований на цих
структурах.
В нотації JSON це виглядає так:
• Об'єкт - невпорядкований набір пар ключ / значення. Об'єкт починається з
відкриває фігурної дужки і закінчується закриває фігурної дужки. Кожне
ім'я супроводжується двокрапкою, пари ключ / значення розділяються
комою (рисунок 2.4).
61
Рис. 2.4. Схематичне уявлення об'єкта JSON
• Масив - впорядкована колекція значень. Масив починається з відкриває
квадратної дужки і закінчується закриває квадратної дужкою. Значення
розділені коми (рисунок 2.5).
Рис. 2.5. Схематичне уявлення масиву JSON
• Значення може бути рядком в подвійних лапках, числом, true, false, null,
об'єктом або масивом. Ці структури можуть бути вкладеними (рисунок
2.6).
Рис. 2.6. Схематичне уявлення значення в JSON
Рядок - набір символів в кодуванні Unicode і нультермінатора, укладена в
подвійні лапки, використовуючи зворотний слеш в якості символу екранування.
Символ представляється як одне символьний рядок. Схожий синтаксис
використовується в C і Java (рисунок 2.7).
62
• Число представляється так само, як в C або Java, крім того, що
використовується тільки десяткова система числення (рисунок 2.7).
Прогалини можуть використовуватися між будь-якими лексемами.
Виключаючи деякі деталі кодування, вищевикладене повністю описує
мову [11].
Рис. 2.7. Схематичне уявлення значення в C і Java
2.10 Алгоритм зворотнього поширення помилок
Алгоритм розповсюдження помилок визначає стратегію вибору ваг
багатошарової мережі за допомогою методів оптимізації градієнта. Оскільки
цільова функція, яка зазвичай визначається як сума квадратичних різниць між
фактичними та очікуваними початковими значеннями, є безперервною, методи
оптимізації градієнта є високоефективними при навчанні мережі. При такому
способі навчання багатошарової нейронної мережі необхідно обчислити вектор
градієнта відносно параметрів усіх шарів мережі.
Нехай є кінцевий набір навчальних даних (м прикладів). Для тренування
нейронної мережі ми використовуємо пакетний градієнт спуску. Функція
вартості у квадратичній помилці для одного прикладу буде розрахована за
формулою:
63
Тоді цільова функція, для m прикладів, буде виглядати так:
Перший член виразу J (W, b) - це сума помилок у квадраті, другий - термін
регуляризації (L2 - втрата ваги - розпад ваги), що зменшує вагові значення та
запобігає перекваліфікації. Параметр вагової регуляризації λ використовується
для перевірки відносної значущості частин цього виразу. У бінарних задачах
класифікації y представлений нулем або одиницею (оскільки сигмоїдна функція
дає значення в діапазоні від 0 до 1, але при використанні функції активації,
заснованої на гіперболічній дотичній, інтервал був би від -1 до 1) . Основне
завдання у навчанні - мінімізувати J (W, b). Для тренування нейронної мережі
необхідно ініціалізувати кожен параметр зі випадковими значеннями, близькими
до нуля, а потім застосувати алгоритм оптимізації (градієнтний спуск, згаданий
вище) [29].
Оскільки J (W, b) не є опуклою функцією, спуск градієнта сприйнятливий
до локальної оптими. Кожна ітерація градієнта спуску оновлює параметри
наступним чином:
64
Тут α – швидкість навчання.
Далі опишемо кроки алгоритму зворотного поширення помилки:
a) Здійснюється прямий прохід по мережі, обчислюються активації шарів L2,
L3 і так далі, аж до вихідного шару Lnl;
b) Для кожного вихідного елементу i в вихідному шарі nl (the output layer)
розраховується помилка.
c) Для l = nl − 1, nl − 2, nl − 3, ...; Для кожного елемента в шарі l,
розраховується:
d) Вираховуються часткові похідні:
65
2.11 Деталі використання градієнтного спуску
Основними недоліками градієнтного спуску при навчанні мережі є параліч
мережі та визначення оптимального розміру кроку.
Мережний параліч виникає в результаті встановлення значень ваги мережі,
як результат корекції, на дуже великі значення. Оскільки помилка, що
надсилається назад у процесі навчання, пропорційна похідній компресійної
функції, процес навчання може практично припинитися. Цього можна уникнути,
зменшивши крок η, проте процес навчання триватиме більше часу.
Ще одна проблема - визначення оптимального кроку для спуску. Якщо
значення кроку не змінюється і воно досить мало, то метод конвергується
занадто повільно. Якщо крок занадто великий, може статися параліч мережі.
Необхідно змінити значення кроку: збільшувати, поки поліпшення оцінки в
напрямку антиградієнта не зупиняється і зменшується, якщо оцінка не
покращиться.
Якщо для спуску градієнта партії функція втрат обчислюється для всіх
зразків, взятих разом після закінчення ери, а потім змінюються вагові
коефіцієнти нейронів, то для стохастичного методу вагові коефіцієнти
змінюються після обчислення вихідної мережі в кожному з прикладів навчання.
Недоліком спуску градієнта партії є його можливе «застрягнення» в локальних
мінімумах.
Незважаючи на те, що стохастичний метод працює повільніше, ніж
пакетний метод, він здатний вийти з локальних мінімумів, що призводить до
кращих результатів навчання мережі (стохастичний метод використовує
відсутність градієнта градієнта).
Для підвищення ефективності тренінгу функція перехресної ентропії
використовується як функція втрат, де y`i - задані значення, а yi - правильні
значення [29].
66
Також для покращення ефективності навчання нейронної мережі можливо
застосовувати такі методи регуляризації:
ü L1-регуляризація;
ü L2-регуляризація;
ü Викидання (dropout);
ü Штучне розширення даних для навчання.
При використанні L1-регуляризації відбувається зміна нерегуляризованої
цільової функції шляхом додавання суми абсолютних значень ваг:
«За такого методу відбувається прямування одного або декількох значень
ваг до 0.0, тому відповідна функція більше не буде потрібною. Цей ефект
називається селекцією функцій (feature selection).
Використання L2-регуляризації (також відомої як weight decay) на відміну
від L1-регуляризації, припускає зменшення ваг на величину, пропорційну до
них» [24].
«Метод регуляції Dropout не впливає на значення цільової функції. За
його використання змінюється сама структура мережі. Кожен нейрон
видаляється з мережі з певною ймовірністю p. У отриманій прорідженій мережі
відбувається зворотнє поширення помилки, для решти ваг робиться градієнтний
крок. Після цього вилучені нейрони відновлюють в мережі. При навчанні
нейромережі вихід кожного нейрона домножуєтся на (1-p). Так буде отримано
математичне очікування відповіді мережі по її 2N (де N - кількість нейронів в
мережі) архітектурах. Навчена таким чином мережа є результатом усереднення
67
2N мереж. Наприклад, окрема нейронна мережа, навчена за допомогою ранньої
зупинки, має дуже велику помилку, однак усереднення декількох таких
нейронних мереж призводить до істотного зниження помилки» [24].
2.12 Основні параметри при навчанні мережі
Ось основні параметри, на які слід звернути увагу при навчанні мережі.
Одним із головних є темп навчання. Для його практичного застосування
спочатку необхідно оцінити граничне значення для η, при якому значення
цільової функції миттєво починає зменшуватися без коливань. По-перше,
значення оцінки встановлюється на η = 0,01. Якщо значення цільової функції
зменшується протягом перших епох, то необхідно збільшувати швидкість
навчання до тих пір, поки не буде знайдено значення коливань цільової функції.
Якщо при початковій швидкості навчання значення цільової функції
коливаються, необхідно її зменшити. Швидкість навчання коригує розмір кроку
при спуску градієнта залежно від значення цільової функції, визначаючи, чи
занадто великий розмір кроку спуску градієнта.
Застосування ранньої зупинки використовується для визначення розміру
епох навчання. Рання зупинка означає, що наприкінці кожної епохи потрібно
обчислити точність класифікації на валідаційному наборі. Коли підвищення
точності припиняється, процес навчання повинен бути припинений. Така
зупинка також запобігає перекваліфікації [29].
Графік тренувань є ідеєю - зберігати темп навчання незмінним, поки
точність даних перевірки не погіршиться. Тоді необхідно зменшити темп
навчання (наприклад, у 10 разів).
Розмір пакету - також надзвичайно важливий параметр при навчанні
мережі. Якщо розмір пакету занадто малий, ви не зможете повністю
скористатися хорошими бібліотеками матриць, оптимізованими для швидкого
обладнання. Якщо розмір пакету занадто великий, мережеві масштаби не
оновлюватимуться досить часто. Ви повинні вибрати компромісне значення, яке
максимально збільшує швидкість навчання.
68
2.13 Глибокі нейронні мережі
Глибокі нейронні мережі - це ті мережі, в яких є кілька прихованих шарів.
Оскільки кожен прихований шар обчислює нелінійне перетворення
попереднього шару, глибока мережа може мати набагато більшу
репрезентативну потужність (тобто може представляти набагато складніші
функції), ніж мережі з невеликою кількістю шарів. Під час вивчення глибокої
мережі важливо використовувати функцію нелінійної активації у кожному
прихованому шарі. Це пов'язано з тим, що багато шарів лінійних функцій
поодинці обчислювали б лише функцію лінійного введення, і тому було б не
більш точним, ніж використання лише одного прихованого шару [30].
Основна перевага глибоких мереж - це стисле зображення досить великого
набору функцій. Можна показати, що є функції, які k-шарова мережа може
представляти коротко, і мережа (k-1) -шару не зможе це зробити, якщо б вона не
мала експоненціально велику кількість елементів у прихованих шарах.
Використовуючи описаний вище метод, ви можете покластися лише на
мічені дані для тренувань. Однак спостережуваних даних часто недостатньо, і
тому для багатьох завдань важко отримати достатню кількість прикладів, щоб
відповідати параметрам складної моделі. Наприклад, враховуючи високу
вираженість глибоких нейронних мереж, навчання з невеликими даними
призведе до перекваліфікації.
Навчання мережі з невеликою кількістю шарів (наприклад, з 1 прихованим
шаром) за допомогою керованого навчання зазвичай призводить до збіжності
параметрів із відповідними значеннями. Але при вивченні глибокої мережі це
працює набагато рідше. Зокрема, навчання нейронної мережі на прикладі
навчання передбачає вирішення проблеми з неопуклою оптимізацією
(наприклад, мінімізація помилки навчання, залежно від мережного
параметра W).
69
«У глибокій мережі з'являється велика кількість локальних оптимумів,
тому навчання з градієнтним спуском перестає працювати. При використанні
методу зворотного поширення помилки для обчислення похідних, градієнти, які
поширюються від вихідного шару до більш ранніх шарів мережі, швидко
зменшуються в міру збільшення глибини мережі. В результаті похідна від
загальної вартості по відношенню до ваги в більш ранніх шарах дуже мала.
Таким чином, при використанні градієнтного спуску ваги ранніх шарів
змінюються повільно, а ранні шари навчитися значно повільніше. Цю проблему
часто називають «дифузією градієнтів» (diffusion of gradients)» [24].
2.14 Проблеми навчання глибоких мереж і їх рішення
Проблема зникаючого градієнта полягає у труднощах, що виникають при
навчанні штучних нейронних мереж з використанням градієнтних методів
навчання та поширення помилок назад. У таких методах кожна вага в нейронній
мережі оновлюється пропорційно градієнту функції помилок щодо поточної ваги
при кожній ітерації тренування. Стандартні функції активації, такі як
гіперболічна дотична, мають градієнти в діапазоні (-1, 1), і метод зворотного
розповсюдження помилок обчислює їх відповідно до ланцюгового правила. Далі
ці числа множать для обчислення градієнтів "передніх" шарів у n-шаровій
мережі, що означає, що градієнт (сигнал помилки) зменшується експоненціально
з n, а передні шари вчаться дуже повільно. Якщо використовуються функції
активації, похідні яких можуть набути важливого значення, існує ризик
зіткнутися з проблемою градієнта, що вибухає. Ось можливі варіанти вирішення
цієї проблеми.
Багаторівнева ієрархія: Мережевий рівень заздалегідь підготовлений за
допомогою методів навчання без нагляду, а потім його значення коригується за
допомогою методу зворотного розповсюдження помилок. Таким чином, кожен
шар мережі має коротке уявлення про те, що подається на наступний шар [30].
Довга короткочасна пам'ять - один із типів архітектури періодичних
нейронних мереж. Коли значення помилок поширюються у зворотному
напрямку від вихідного шару, помилка не вивільняється із пам'яті блоку LSTM.
70
Він безперервно передається назад кожному з нейронів, поки вони не навчаться
відкидати подібні значення [20].
Залишкові мережі (ResNets) - один з найбільш ефективних методів
вирішення проблеми зникаючого градієнта. Більш глибока мережа матиме
більшу помилку навчання, ніж мережа з невеликою кількістю шарів. Група
дослідників Microsoft виявила, що поділ глибокої мережі на частини (скажімо,
кожна частина є тришаровою мережею) та перенесення вхідних даних до
кожного фрагмента перед тим, як перенести його на наступний, допомогло
майже повністю усунути проблему зникнення градієнта. Ніяких додаткових
параметрів або змін в алгоритмі навчання не потрібно. ResNets виявив меншу
помилку в навчанні (і помилку тесту), ніж їх менший рівень аналогічного шару,
уникаючи проблеми з градієнтом, що зникає, шляхом поділу на менші
підмережі.
Використання сигмоїдальних функцій активації може спричинити
проблеми в навчанні глибоких мереж, а саме значення активацій у заключному
шарі будуть наближеними до нуля на ранніх етапах навчання, уповільнюючи цей
процес. Запропоновані альтернативні функції активації, які не втрачають стільки
часу через таке обмеження.
Вибір відповідної шкали та стохастичного градієнтного спуску на основі
імпульсу (на основі імпульсу стохастичний градієнт спуску) суттєво впливає на
здатність глибокої мережі вчитися [30].
2.15 Процес створення бота та огляд Telegram Bot API
Для створення бота в системі Telegram є бот - BotFather, на рисунок 2.8.
Вам потрібно розпочати з ним діалог і виконати кілька простих кроків. Основна
мета цієї процедури - отримати маркер авторизації бота, який дозволяє серверам
Telegram однозначно ідентифікувати бота. Цей маркер буде використаний
програмою для будь-яких запитів до сервера [31].
Після початку роботи з ботом BotFather вам потрібно використовувати
команду "/ newbot" для створення нового бота. Перед створенням маркера
авторизації BotFather попросить вказати ім’я бота та ім’я користувача.
71
Ім'я бота - це те, що з’явиться в контактній інформації користувачів та в
багатьох інших місцях. Ім'я користувача для бота - це коротке ім'я, яке буде
використано у посиланнях та посиланнях на сайт telegram.me. Імена
користувачів мають бути довжиною від 5 до 32 символів. Вони нечутливі до
регістру, але можуть включати лише латинські символи, цифри та підкреслення.
Ім'я бота має закінчуватися на "бот", наприклад, «PersonalizedInfoBot» або
«personalized_info_bot».
«Не слід недооцінювати важливість імені бота, оскільки воно завжди
видиме користувачу і фактично асоціюється із компанією. Зазвичай ботів
називають так як і компанію (лише з приставкою «bot»), або комбінують назву
компанії із функцією яку виконуватиме бот, наприклад: «Domino's Pizza Bot» чи
«Amazon Search & Price Bot». Діалог обрання імені бота та імені користувача для
бота, наведено на рисунку 2.9» [24].
Рис. 2.8. Початок роботи із ботом BotFather та доступні команди
BotFather – це також інструмент для управління вже створеними ботами.
Список доступних команд для редагування ботів складається з:
72
a) / mybots - повертає список ботів і дозволяє редагувати їх налаштування за
допомогою зручних елементів керування;
b) / mygames - повертає список ігор та дозволяє редагувати їх налаштування
за допомогою зручних елементів керування;
c) / setname - дозволяє змінити ім’я бота;
d) / setdescription - дозволяє змінити опис бота - короткий текст до 512
символів, який описує його суть. Користувач бачить цей текст перед тим,
як розпочати розмову з ботом під заголовком «Що може зробити цей
бот?»;
e) / setabouttext - дозволяє змінювати інформацію про бота - короткий текст
до 120 символів. Користувачі бачать цей текст на сторінці профілю бота
(мал. 4.3). Коли вони діляться з ким-небудь своїм ботом, цей текст
надсилається разом із посиланням;
f) / setuserpic - дозволяє змінювати зображення профілю бота. Зображення
бота відображається у списку пошуку, діалозі та списку контактів
користувача, тому важливо серйозно поставитися до його вибору;
g) / setcommands - дозволяє змінювати список команд, підтримуваних ботом.
Користувачі побачать ці команди як пропозиції, коли вони ввійдуть "/" у
чат. Кожна команда має ім'я, яке повинно починатися з косої риски "/",
містити літери, цифри або підкреслення і бути коротшою. 32 символи,
параметри та опис тексту;
73
Рис. 2.9. Процес отримання токену за допомогою BotFather
h) / deletebot - дозволяє видалити бота. Це робить його ім’я користувача
доступним для інших;
i) / setinline - дозволяє включити або вимкнути режим використання в будь-
якому чаті для бота;
j) / setinlinegeo - дозволяє боту використовувати дані про місцезнаходження
користувач надає результати на основі місцезнаходження;
k) / setjoingroups - дозволяє змінити можливість додавання бота до груп.
Будь-який бот повинен мати можливість обробляти приватні
повідомлення, але якщо він не призначений для роботи в групах, потрібно
вимкнути цю опцію;
l) / setprivacy - дозволяє визначити, які повідомлення отримуватиме бот під
час роботи в групах. Якщо "/ setprivacy" вимкнено - бот отримає всі
повідомлення.
74
Отримавши маркер, ви можете перейти до подальшого процесу розробки
та пам’ятайте про ключові технічні відмінності між ботами та користувачами:
a) Боти не мають статусу, який відображає, чи є бот в Інтернеті, і,
відповідно, немає позначки часу, коли бот востаннє був у мережі.
Натомість у всіх ботів є назва "bot" під назвою, як, наприклад, у вікні
опису бота "MarkerBot" на рисунку 2.10;
b) У ботів обмежена ємність зберігання у хмарі, тому застарілі повідомлення
будуть видалені з сервера, як тільки їх прочитає користувач. Однак
програми можуть зберігати цю інформацію на власних серверах;
c) Боти не можуть розпочати діалог із самим користувачем. Користувач
повинен або додати їх до групи або спочатку написати особисте
повідомлення. Користувачі можуть скористатися посиланням telegram.me/
<ім'я_боти> або здійснити пошук для початку діалогу з ботом;
d) Імена користувачів ботів закінчуються на "бот";
e) Після їх додавання до групи боти за замовчуванням отримують не всі
повідомлення від неї. Це можна змінити в налаштуваннях.
Перш ніж вибрати інструменти розробки, вам необхідно ознайомитись з
інтерфейсом прикладного програмування (API), який надає месенджер для
розробників. Інтерфейс прикладного програмного забезпечення - сукупність
визначень взаємодії програмного забезпечення різних типів [33]. Якщо
простіше, це рівень абстракції, необхідний для зручного спілкування декількох
програм, в якому одна або обидві надають доступ до певних функцій високого
рівня іншим, не розкриваючи їх внутрішню реалізацію. У той же час програма,
яка використовує API, отримує доступ до функціональності програми, яка її
забезпечує, без необхідності детально вивчати структуру та взаємозв'язок її
елементів. Інтерфейси програмування додатків полегшують розробникам
використання певних технологій під час створення додатків. API також
дозволяють приховати внутрішні особливості впровадження методів підвищення
безпеки та надання можливостей для зовнішньої взаємодії з програмою.
75
Рис. 2.10. Вікно інформації про бота
У попередніх розділах ми дійшли висновку, що найкращим варіантом
створення чату є Telegram Messenger. Telegram пропонує розробникам два типи
API. Перший - API Telegram, який призначений для створення сторонніх клієнтів
для платформи Telegram. Він не буде використаний у цій роботі. Другий - API
Bot, який дозволяє легко створювати додатки, які використовують повідомлення
Telegram як інтерфейс для спілкування з користувачем.
Насправді API Bot - це те, що дозволяє легко та зручно створювати чати.
Цей API дозволяє підключати ботів до системи Telegram. З точки зору системи
Telegram, боти - це спеціальні рахунки, для яких не потрібно встановлювати
додатковий номер телефону. Ці облікові записи служать інтерфейсом для коду,
який буде працювати на нашому сервері [32].
Вам не потрібно нічого знати про те, як працює протокол шифрування
MTProto, який використовується в системі Telegram - їх проміжний сервер
обробляє все шифрування та зв’язок з API Telegram. Для спілкування з цим
76
сервером використовується простий інтерфейс HTTPS, який пропонує спрощену
версію API Telegram.
Будь-які запити до API Telegram Bot повинні передаватися через HTTPS і
мати таку форму: https://api.telegram.org/bot <TOKEN> / <METHODNAME>.
Сайт <TOKEN> повинен містити маркер авторизації бота відповідно, а сайт
<METHOD NAME> повинен містити метод, який буде використовуватися з API.
API підтримує GET та POST HTTP-запити. Запит GET використовується,
коли необхідно отримати певну інформацію від API, а GET-запит
використовується, коли необхідно передавати певну інформацію через API Bot
[32].
Відповідь на будь-який запит містить об'єкт JSON, у якому завжди є
логічне поле "ok", яке вказує на успіх запиту, і може мати необов'язкове поле
"опис" з описом результату. Якщо для параметра "ОК" встановлено значення
"вірно", запит був успішним, а результат запиту можна знайти в полі "результат".
У разі невдалого запиту "ok" містить "false", а помилка описується у полі
"description". Числове поле типу "error_code" вказує код помилки. Деякі помилки
можуть також мати необов’язкове поле "параметри", яке може допомогти
автоматично обробити помилку.
Існує два взаємовиключні способи отримання оновлень для бота - метод
"getUpdates" та використання веб-гаків, обробників подій. Якщо
використовуються веб-гачки, сервер Telegram, якщо є необроблені оновлення,
запустить подію, з якою пов’язаний веб-крок, і веб-крок відповість на нього та
отримає необхідні оновлення. Вхідні оновлення зберігаються на сервері, поки
бот не отримає їх будь-яким із перерахованих вище способів, але не більше 24
годин. Тому отримувати вхідну інформацію потрібно не рідше одного разу на 24
години. Насправді це потрібно робити набагато частіше, оскільки частина цієї
інформації є повідомленнями користувачів.
Розглянемо основні типи, які підтримує API Bot, і які можна передавати як
у ботовому запиті, так і у відповідь на цей запит:
a) Користувач - цей об’єкт є користувачем або ботом;
b) Чат - цей об’єкт - чат або група;
77
c) Повідомлення - цей об’єкт є повідомленням. Використовується як для
надсилання інформації користувачеві, так і для отримання відповідей від
нього;
d) MessageEntity - один з елементів повідомлення (наприклад, тег, ім’я
користувача або URL-посилання);
e) PhotoSize - відображає розмір фотографії, ескізу або наклейки файлу;
f) Аудіо - аудіофайл, який можна відтворити за допомогою месенджера;
g) Документ - файл будь-якого типу, який не описаний;
h) Відео - описує відеофайл;
i) Голос - голосове повідомлення, надіслане користувачем;
j) VideoNote - відео повідомлення, що надсилається користувачем;
k) Контакт - описує контакт телефонної книги;
l) Розташування - відповідає певній точці на карті;
m) Місце проведення - описує конкретне місце події;
n) UserProfilePhotos - зображення профілю користувача;
o) Файл - файл, який можна завантажити. Гарантується, що посилання буде
дійсною не менше години. Коли посилання закінчується максимальний
розмір файлу для завантаження - 20 Мб;
А також – команди пов’язані зі створенням індивідуальної клавіатури,
відповідями від такої клавіатури, надсиланням різноманітних медіафайлів, а
також пов’язані з роботою із елементами та користувачами чатів.
«Відповідно до наведених типів існують методи пов’язані із їх
надсиланням та отриманням. Також існують методи для більш зручної роботи із
чатами – вони дозволяють, наприклад, змінювати елементи, такі як фото, опис,
та ін., заблокувати користувача чату чи розблокувати його та багато інших
корисних функцій» [24].
«Важливо що Телеграм, як платформа, дозволяє ботам проводити
різноманітні операції як із повідомленнями, так і з чатами, а також підтримує та
навіть заохочує використання ботів для різноманітної взаємодії. Факт того, що
для покращення взаємодії із користувачами, вони обрали бота, як інтерфейс для
створення інших ботів, тільки підтверджує те, що боти стали невід’ємною
78
частиною сучасного спілкування. Крім того, як частина месенджера доступний
бот для надсилання стікерів – спеціальних картинок, які заміняють emoji».
«Гнучкість, зумовлена наявністю великої кількості доступних функцій,
дозволяє персоналізувати ботів під потреби різних замовників. Для
використання бота можна використовувати команди, повідомлення, інтерактивні
клавіатури чи навіть голосові повідомлення. Відповіді користувачу можна
наводити у формі текстових повідомлень, фото, відео чи файлів» [24].
79
3 РОЗРОБКА ПРАКТИЧНОЇ МОДЕЛІ
3.1 Моделювання роботи закладу швидкого харчування з наданням послуг
щодо доставки як системи масового обслуговування
Значна частина систем, які важко вивчити аналітично, але які легко
вивчаються за допомогою статистичного моделювання, зводиться до систем
черги (СМЯ). Як видно з рисунка 3.1, типова система черги (система черг)
складається з трьох основних компонентів: початкова загальна сукупність
(населення) джерел користувачів (клієнтів) цієї сервісної системи; система
обслуговування; сценарії виходу клієнтів із сервісної системи (повернутися до
початкової загальної сукупності чи залишити її?).
Рис. 3.1. Компоненти СМО
3.2 Характеристика вхідного потоку
У проблемі, розглянутій у цій роботі, буде два типи додатків, програми
першого типу будуть відвідувачами закладу, а додатки другого типу стануть
телефонними замовленнями.
Є два основні моменти, які слід враховувати при розгляді потоків вхідних
додатків у систему обслуговування. По-перше, необхідно проаналізувати часові
інтервали між наступними двома послідовними вхідними додатками та
визначити закон їх статистичного розподілу. Загальновизнано, що інтервали між
80
вхідними запитами на послуги розподіляються експоненціально, як показано на
малюнку 1.2.
Рис. 3.2. Експоненціальний (показниковий) розподіл
По-друге, ви можете встановити певний проміжок часу T і спробувати
визначити, скільки програм може увійти в систему за цей період Т. Для цього
найчастіше використовується розподіл Пуассона. [4]
(ɰ k
t)
( )= Þɰt
P t e
k
k !
де Pk – ймовірність того, що за час t до системи надходить К замовлень; λ –
інтенсивність, кількість замовлень за одиницю часу.
Основними властивостями пуасонівського потоку є [5]:
• стаціонарність (ймовірність надходження замовлень за певний час
залежить від цього проміжку часу, а не від розташування його на осі
часу);
• відсутність післядії;
• ординарність.
81
3.3 Характеристика черги
Пацієнт - це запит клієнта, який чекатиме моменту надання послуги
сервісною компанією стільки часу, скільки це необхідно. Згідно теорії черг,
навіть якщо клієнт веде себе нетерпляче і висловлює своє невдоволення, той
факт, що він все ще продовжує чекати, дозволяє нам називати його пацієнтом.
Існує два типи нетерплячих вхідних потоків. Клієнти (додатки) першого типу
прибувають до системи обслуговування, оглядають її та чергу, і вирішують
негайно виїхати. До другого типу належать ті, хто приїжджає, знайомиться з
ситуацією, стоять у черзі, а потім, стоячи деякий час, ще йдуть. Поведінка
першого типу називається не приєднанням до черги (Balking), а другого -
повторною оцінкою умов очікування (Reneging).
Слід зазначити, що в цій проблемі перший тип додатків має нижчий рівень
неприєднання до черги, але другий тип додатків характеризується нижчим
рівнем переоцінки умов очікування. Тобто програми, отримані по телефону, не
витримують тривалого очікування, але, швидше за все, передзвоніть. Хоча
відвідувачі закладу можуть злякатися довжини черги і просто не потрапляти в
неї. Однак рівень неприєднання черги може бути різним залежно від
характеристик черги.
Основними характеристиками черг є: довжина черги, кількість черг
("хвости") та дисципліна черги.
Черга називається однолінійною, якщо сервісна система працює з однією
чергою, вбудованою в один рядок. Багаторядкові черги складаються з двох або
більше однорядкових черг, сформованих до двох або більше каналів
обслуговування. Вони також включають кілька однорядкових черг, які
з'єднуються в певній точці перерозподілу в одну лінію. Особливість
багаторядкових черг на підприємствах, що перевантажують послуги, полягає в
тому, що вони не є постійними і часто змішуються, наприклад, якщо кілька
запитів надходять через короткі проміжки часу, одна черга може бути довшою,
ніж інші, а клієнти переходять від неї до коротшої. Те ж саме відбувається, якщо
очевидно, що обслуговування клієнтів в інших чергах займає менше часу
82
Дисципліна черги - це правило або сукупність правил, що визначають
пріоритетний порядок обслуговування клієнтів у черзі. Правила, обрані
компанією, можуть мати дуже серйозний вплив на загальну продуктивність
системи обслуговування. Кількість клієнтів у черзі, середній час очікування,
діапазон зміни довжини черги, продуктивність роботи сервісної компанії та
багато іншого залежать від правил пріоритетності.
Найпоширеніше правило пріоритету - це правило «Перший прихід,
перший сервіс» (FCFS). За його словами, клієнти в черзі обслуговуються в
хронологічному порядку прибуття, і ніякі інші характеристики порядку
обслуговування не впливають. Це правило вважається найсправедливішим, але
на практиці воно часто дискримінує тих клієнтів (додатків), час служби яких
значно коротший, ніж час обслуговування інших.
У цій роботі ми припускаємо, що другий тип додатків (телефон) має
пріоритет.
Ще одна важлива характеристика черги - це час, який клієнт або одиниця
потоку (запиту) проводить в контакті з каналом обслуговування з початку
процесу обслуговування. Обговорені вище формули використовували
інтенсивність обслуговування, визначену як потужність сервісного каналу в
кількості одиниць, потік за певний проміжок часу (наприклад, 12 завершених
операцій на годину), а не як час обслуговування, який для цей приклад в
середньому становить п'ять хвилин. Якщо кожна служба має однакову
тривалість, то поговоріть про правило постійного часу обслуговування.
Дотримання цього правила (а також постійного інтервалу прийому заявок) чаші
притаманне лише автоматично виконуваним операціям.
Якщо час обслуговування має довільне значення, як, наприклад,
розглядається в цій роботі, то для його опису використовується закон
експоненціального розподілу. Виходячи з цього, визначте середню кількість,
позначену µ, одиницями потоку (додатками) або клієнтами, які можуть
обслуговуватися протягом цього періоду
83
«Як видно з рисунка 3.3. , потік заявок, що підлягають обслуговуванню,
може проходити через одну чергу, через декілька черг або через комбінацію цих
двох варіантів» [19].
Рис. 3.3. Структура черг
«Вибір формату структури частково залежить від кількості клієнтів
(заявок), потребуючих в обслуговуванні, і частково — від обмежень, пов’язаних
з конкретним порядком, в якому повинне проводитися обслуговування» [19].
«В цій курсовій роботі розглядається комбінована схема обслуговування.
Після обслуговування клієнта існує два сценарії його виходу з системи:
1) він може повернутися в початкову генеральну сукупність і відразу стати
вірогідним кандидатом на наступне таке ж обслуговування;
84
2) клієнт не повертається взагалі або вірогідність повторного
обслуговування його в даній системі дуже мала» [19].
«Якщо говорити несерйозно, то перший випадок можна назвати
«рецидивною нежиттю», а другої «одноразової аппендектоміею» » [19].
3.4 Розробка алгоритму моделі
Розглянемо роботу ресторану швидкого харчування, який містить два
прилади обслуговування - касир та кухар. Спочатку заявки обох типів надходять
в одну з кас, де вони затримуються в середньому на три хвилини. Перед
касовими апаратами може скластись черга. Оскільки будь-який касир може
забрати телефон і прийняти замовлення на телефон, можна сформувати дві
незалежні черги. Наступним етапом обслуговування буде виконання замовлень
на кухні. Тому після обробки заявок на касі вони опиняться в загальній черзі на
кухню. Добре відомо, що кухня з однією духовкою може одночасно виконувати
до чотирьох застосувань.
Процес обслуговування відбувається за методом виробничої лінії, який є
одним із найпопулярніших методів у ресторанах швидкого харчування [4].
Таким чином, процес обслуговування розглядається як виробничий процес, а не
як надання послуг. У спрощеному вигляді структура системи черги ресторану
швидкого харчування має вигляд, показаний на рисунку 3.4:
Рис. 3.4. Структура СМО функціонування закладу швидкого харчування
«Як показує практика, методологія моделювання може також виявитися
корисним у виробництві або інших галузях сфери обслуговування, що
використовують аналогічні методи масового обслуговування» [19].
85
3.5 Введення позначень
«Число замовлень, які надходять у систему за проміжок часу [0, t] є
вхідний потік замовлень – α(t) » [19].
ķ (t )
Інтенсивність вхідного потоку замовлень: ɰ=
t
«Число замовлень, які виходять з системи за проміжок часу [0, t] є
вихідний потік замовлень – δ(t) » [19].
Рис. 3.5. Потоки замовлень
͈ (t) =ķ (t ) -Ĺ(t )– заштрихована площа між кривими [5].
«Надалі будемо вважати, що t це достатньо малий проміжок часу, тож
ймовірністю поступлення в систему, або виходу з неї за цей проміжок більше
ніж одної заявки кожного типу можна знехтувати» [19].
«Середній час знаходження замовлення у системі за інтервал [0, t]:
͈ (t)
T ⁃‽=
ķ (t )
Середня кількість замовлень, що перебували у системі за інтервал [0, t]:
͈ (t )
N⁃‽=
t .
86
Операційними змінними мережі є: ǃ
k – кількість вимог, що надійшли до
вузла k;
Ck , j – кількість вимог, що залишили вузол k і надійшли до вузла j;
B
k – загальний час обслуговування у вузлі k;
B
k
S =
k – середній час обслуговування у вузлі k;
Ck
B
k
U =
k – коефіцієнт використання вузла;
T
C
k
X =
k – інтенсивність потоку вимог від вузла;
T
V
k – коефіцієнт відвідування вузла. Пропускна спроможність мережі МО
визначається тим вузлом, коефіцієнт використання якого є максимальним:
Ud=max{Uk};
Ud = max{Vk * Sk}. Граничне значення продуктивності системи:
1
X =
0
V S .
d d
Рух модельного часу здійснюється від одної зміни стану системи до іншої
– принцип ∆ x (алгоритм орієнтований на подію).
Уводимо такі позначення:
{ Xi} – множини станів системи X ;
i
{A j } – множина подій з елементом системи (j-та подія, i-ий елемент);
i
{d j } – множина дій з елементом системи(j-та дія, i-ий елемент);
{ļ i
j } – множина відрізків часу тривалості дій, які моделюються за
допомогою датчиків випадкових чисел, згідно із експоненційним
(показниковим) законом розподілу ймовірностей;
t i ti i
{ j= jÞ1+ ļ j} – множина моментів закінчення дій над елементами системи;
i i
{d j , t j} – множина активностей, моментів закінчення j-х дій над i-м
елементом системи.
87
Початок наступного кроку моделювання при випадковому кроці по часу:
tk+1= min{ tij ,Tk }, T k – момент закінчення процесу функціонування системи.
3.6 Блок-схема
«Відповідно до поставленої задачі спрощена блок-схема матиме вигляд,
представлений » [19].
‖‗ ǝ ‾ ‗
ϲ ͪ
‖‗ ǝ ‾ ‗ Å
Å
ͺ ‽ Ⅎͪ ͤ
‗ ‗ ͫ ͤ
‴ ‽ ͪ ‽ ⁍ ‗ ‶ ‖‽ Ⅎͣ ͤ
‽Ơ ͤ ‾ ‽ ⁍ ̜ ‾ ‾ ͪ
‗ ͣ ͤ ‗ ͣ ͤ
ͪ
ϲ ͪ
‽ ⁍ ̜ ‾ ‾ ͪ
‴ ‽ ͪ ‽ ‗ ͣ ͤ
‽ ‖ ‽ ͪ ͤ ͪ ⁃ ‾ ̜ ͪ ̜ ‗ ‗
⁃ ‗ ͣ ‗ ⁃ ⁍ ‗ ⁍ͣ ǝ‗ ‗
‖‽ ⁃ ‾‽‗ ͣ
ͪ Ⅎ̜
‾
‶ ⁃ ⁍ ‗ ⁍ ͤ
⁃ ͪ
‶ ⁃ ⁍ ‗ ⁍ ͤ
⁍Å ͪ
Рис. 3.6. Спрощена блок-схема
Для побудови повної блок-схеми введемо такі позначення:
t
r - час появи заявки r -того типу
88
w
i -час звільнення i -того обслуговуючого пристрою типу каса.
1
w j - час звільнення j -того обслуговуючого пристрою типу кухар.
n
r - довжина черги для заявок r -того типу.
u
i -час початку простою i -того обслуговуючого пристрою типу каса.
u j -час початку простою j -того обслуговуючого пристрою типу кухар.
ki ,k j – кількість обслужених заявок i -тим обслуговуючим пристроєм
типу каса, і j -тим обслуговуючим пристроєм типу кухар відповідно.
l i ,l j – кількість простоїв i -того обслуговуючого пристрою типу каса, і j -
того обслуговуючого пристрою типу кухар.
pi , p j – загальний час простою i -того обслуговуючого пристрою типу
каса, і j -того обслуговуючого пристрою типу кухар.
3.7 Програмна реалізація задачі
«В процесі дослідження було обрано і створено двофазний, асинхронний,
дискретно-подійний алгоритм. Його було реалізовано з допомогою пакету
надбудов AniLogic 6.4 над мовою програмування Java, розробленого
корпорацією XjTechnologies» [19].
Таблиця 3.1 - Систему позначень для побудови моделі в AniLogic
Об'єкт Queue моделює чергу
заявок(клієнтів), які очікують прийому
Queue
пристроєм, що що ознайомлює клієнтів з
видами страхування
Об'єкт Servise моделює чергу
Service заявок(клієнтів), які очікують прийому
пристроєм, що який обслуговує клієнтів
Черга клієнтів, до пристрою що ознайомлює
Delay
клієнтів з видами страхування.
Направляє клієнтів, що входять, в один з
SelectOutput двох вихідних портів залежно від виконання
заданої умови.
Задає набір ресурсів, які можуть
ResourcePool
захоплюватися і звільнятися клієнтами.
Створює заявки тих клієнтів які прийшли в
Source
компанію.
Sink Знищує заявки тих кліянтів, що поступають.
89
Тепер перейдемо до реалізації моделі в АniLogіc. Процес виконання
моделі який відображає зв’язки моделі представлено на рисунку 3.7 [19].
Рис. 3.7. Реалізація моделі
Для створення моєї моделі необхідно виконати наступні кроки:
1. Клацніть по кнопці панелі інструментів Створити або Виберіть
Файл|Створити|Модель з головного меню.
2. З'явиться діалогове вікно Нова модель.
3. Введіть ім'я нової моделі в поле Ім'я моделі.
4. Задайте місце розташування каталогу, в якому зберігатимуться файли
моделі. Ви можете вибрати потрібний Вам каталог за допомогою кнопки
Вибрати, або ж самостійно ввести шлях в поле Місце розташування.
5. При необхідності зміните ім'я створюваного Java пакету моделі в полі Java
пакет.
6. Клацніть мишею по кнопці Далі. Відкриється друга сторінка Майстра
створення моделі. Тут Вам буде запропоновано вибрати шаблон моделі, на
базі якого Ви розроблятимете Вашу модель. Якщо Ви хочете використати
шаблон моделі, встановите прапорець Використати шаблон моделі і
виберіть використовуваний Вами метод моделювання в розташованому
90
нижче списку Виберіть метод моделювання. Після цього конфігуруйте
шаблон створюваної моделі, вибираючи на подальших сторінках Майстра
ті опції, які Ви хочете додати у Вашу модель.
7. Клацніть мишею по кнопці Готово.
8. Перейдіть в панель Властивості і виберіть одиниці модельного часу для
цієї моделі з випадного списку Одиниці модельного часу.
3.8 Проведення модельних експериментів і опрацювання отриманих
результатів
«Загальна інформація про результати роботи моделі:
• START TIME – початковий час, тобто абсолютний модельний час у
момент початку моделювання. У даному випадку моделювання
розпочинається на нульовій хвилині;
• END TIME – кінцевий час, тобто значення абсолютного модельного часу
в момент, коли лічильник завершень набуває значення 0. Для цієї моделі
він дорівнює 600 хвилин, адже необхідно змоделювати роботу протягом
одного робочого дня, який в піцеріях та ресторанчиках, зазвичай довший
за 8 годин. Під час побудови моделі вважаємо, що робочий день триває 10
годин.
Результат виконання роботи представлені на рисунку 3.8.
Рис. 3.8. Результат прогону моделі
91
Таким чином видно, що при заданих параметрах моделі отримаємо такі
результати:
92
ВИСНОВКИ
Інтернет вже давно став частиною повсякденного життя людей, і тепер,
коли хтось відкриває свою справу або починає працювати над новим проектом,
йому просто необхідно просувати свою справу в соціальних мережах. Для
великих компаній, на кшталт Coca Cola або Uber, не складає труднощів
витрачати десятки або навіть сотні тисяч доларів на рекламу, але крім таких
гігантів в світі дуже багато простих людей без стартового капіталу. Таким
людям, в початку їх діяльності в Інтернеті, необхідне рішення, яке дозволить
привернути увагу інших користувачів до того, що вони роблять. При цьому таке
рішення не повинно призводити до труднощів у фінансовому плані. по-цього
Telegram-бот, який буде працювати на будь-яких платформах, без будь-яких
вкладень є актуальною темою.
Було написано близько 1411 рядків коду.
В ході роботи були виконані наступні завдання:
• проаналізовано предметна область;
• виявлені плюси і мінуси існуючих рішень;
• вивчені засоби для реалізації;
• розроблений алгоритм реалізації проекту;
• сформульовані вимоги до продукту;
• створено інформацыйну систему піцерії, яка надає послуги з доставки в
межах міста в програмі Visual Studio;
• створено Telegram-бот в програмі Visual Studio;
• створено логотип для Telegram-бота;
• зареєстрований і повністю налаштований бот в програмі Telegram.
Таким чином, завдання випускної кваліфікаційної роботи винени, мета
роботи досягнута.
У роботі актуальна науково-прикладна проблема, пов'язана з розробкою
теоретичних та практичних основ побудови систем імітаційного моделювання
на основі вдосконалення роботи закладу швидкого харчування, що надає
послуги можливості здійснення модифікацій виробничого процесу, та
93
моментального прийому формулюється і вирішується результат для аналізу.
заходи та можливості покращити подальшу роботу.
Початковими параметрами моделі були характеристики піцерії "Престо",
розташованої на вулиці "Хрещатик".
94
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
1. Agaltsov V. Databases: distributed and remote systems. Berlin: Springer, 2018. 271
p.
2. Banker K. MongoDB in Action. 2nd ed. Shelter Island: Manning, 2016. 400 p.
3. Karpov Y. Simulation modeling with AnyLogic. St. Petersburg: Lan, 2015.
4. Powers S. Learning Node.js. Sebastopol: OReilly Media, 2014. 400 p.
5. Sadalage P., Fowler M. NoSQL Distilled: a brief guide to the emerging world of
polyglot persistence. Boston: Addison-Wesley, 2012.
6. ISO 9001:2015 Quality management systems Requirements. Geneva: ISO, 2015.
7. Fowler M. Patterns of Enterprise Application Architecture. Boston: Addison-
Wesley, 2003. 192 p.
8. Flanagan D. JavaScript Pocket Reference. 3rd ed. Sebastopol: OReilly Media,
2013. 230 p.
9. Herron D. Node.js Web Development. Birmingham: Packt Publishing, 2014. 144 p.
10. Holmes S. Getting MEAN with Mongo, Express, Angular, and Node. Shelter Island:
Manning, 2015. 496 p.
11. Date C. J. An Introduction to Database Systems. 8th ed. Boston: Pearson, 2004. 336
p.
12. Young A., Meck B., Cantelon M. Node.js in Action. Shelter Island: Manning, 2018.
432 p.
13. Church I., Newman A. Using simulations in service delivery optimization. Leeds,
2010.
14. Farahmand K., Francisco A., Martinez G. Simulation and animation of service
systems. Texas A&M University, 2012.
15. Kharwat A. Computer simulation in industry. IEEE, 2010.
16. Radziwill N., Benton M. Evaluating quality of chatbots and intelligent
conversational agents. 2017.
17. Avanesyan N. Telegram as a messenger: capabilities and development perspectives
// Scientific Potential XXI. 2017.
18. Archakov D. Node.js Telegram bot development. 2016. URL: https://archakov.im
95
19. Begman Y. Simulation of delivery service systems. 2011.
20. Telegram bot development guide. URL: https://tproger.com
21. Smolynets O. Service for thematic analysis in Telegram. Kyiv: KPI, 2018. URL:
https://ela.kpi.ua
22. Skorokhod V. Development tools for chatbot systems. 2017. URL:
https://phm.kspu.kr.ua
23. Begman Y. Delivery service simulation models. 2011.
24. Cherniuk A. Development of HMI interface for KNX networks. Kyiv: KPI, 2018.
URL: https://ela.kpi.ua
25. Ivanov A. Chatbots as information channels // Volga University Journal. 2016.
26. Kozlov A., Batyshchev A. Telegram bots for information access // Territory of
Science. 2017.
27. Matveeva N., Zolotaryuk A. Chatbot technologies // Young Researchers Journal.
2018.
28. Node.js Official Website. URL: https://nodejs.org
29. Telegram API Documentation. URL: https://core.telegram.org/api
30. Telegram bots overview. URL: https://ain.ua
31. Messenger statistics. URL: https://www.statista.com
32. Messaging apps analytics. URL: https://www.statista.com
33. Heroku Platform. URL: https://www.heroku.com
34. DBMS ranking. URL: https://db-engines.com
35. Python Requests documentation. URL: https://docs.python-requests.org
36. Eway service. URL: https://www.eway.in.ua
37. Python tutorial. URL: https://docs.python.org
38. Telegram bot development guide. URL: https://medium.com
39. Telegram bot documentation examples. URL: https://core.telegram.org
40. Node.js + Express + MongoDB guide. URL: https://www.mongodb.com
41. CherryPy Framework. URL: https://cherrypy.org
42. Radziwill N., Benton M. Evaluating chatbots. URL: https://arxiv.org
43. Messina C. Conversational commerce. URL: https://medium.com
96
44. Most popular messaging apps. URL: https://www.statista.com
45. Python Requests. URL: https://docs.python-requests.org
46. Telegram Bot API. URL: https://core.telegram.org/bots/api
47. Telegram bots overview. URL: https://core.telegram.org
48. Telegram FAQ. URL: https://telegram.org/faq
49. Andriienko B. O. Automated services of integration of information systems in
Telegram / B. O. Andriienko, K. S. Rudakov, S. A. Mitsenko // Збірник тез
доповідей студентської науково-практичної конференції ЧДТУ: 1922 квітня
2021 р. [Електронний ресурс] / [упоряд. Мельник І.В.]; М-во освіти і науки
України, Черкас. держ. технол. ун-т. Черкаси : ЧДТУ, 2021. C. 118-119.