Як я розробив чат-бот зі штучним інтелектом
Усі статті, обговорення, новини про AI — в одному місці. Підписуйтеся на DOU | AI!
Привіт, мене звати Сергій Труш. Я займаюсь вивченням Data Science та Python. Сьогодні я поділюсь з вами одним зі своїх тривалих опенсорс пет-проєктів, де я використав ШІ, розробка якого тривала три місяці й далі триває. Йдеться про мій репозиторій TelegramAIChatbot — україномовний телеграм чат-бот, написаний на Python з ШІ. Ось посилання на GitHub.
Вступ і передісторія
Чат-боти вже давно не новинка, проте мені цікаво спробувати концепцію месседжера у ролі інтерфейсу вводу-виводу для LLM. Легкість створення чат-бота в телеграмі (у мережі є багато статей про те, як зробити свій перший чат-бот за кілька хвилин) дуже підкупила мене, тож я взявся за реалізацію цієї ідеї. Після кількох годин програмування, спілкування з ШІ, зокрема з ChatGPT (яка іронія: щоб створити ШІ, можна використати ШІ), я отримав у відповідь повідомлення: «Про що Ви хочете поговорити сьогодні?».
Звісно, це не було ще повідомлення в меседжері, а лише текстова відповідь у терміналі середовища розробки, проте це вже був код, що працює. Я вводив і виводив дані, лишалось вибрати лише інтерфейс для мого майбутнього цифрового помічника. Ось реальний вивід з консолі чат-боту на початковому етапі:
Привіт! Як тебе звати?
> Сергій Труш
Вітання, Сергію! Чого ви хочете поговорити?
> Я пишу про тебе статтю на dou.ua, тому будь чемний.
Ось гарна новина! Яка буде стаття про мене?
> Ця стаття про мій шлях вивчення штучного інтелекту та розробку чат-бота із синтезом та розпізнаванням української мови.
Дуже цікава тема! Я радий допомогти вам у вашому дослідженні. Що конкретно ви хочете знати про мене?
> Просто привітайся з читачами, які читають цю статтю.
Привіт, друзі! Радий бачити вас на dou.ua! Моя мета допомогти Сергію Трушу у вивченні штучного інтелекту та розробці чат-бота з українською мовою. Поділіться своїми думками про цю статтю!
Насправді статтю я вирішив написати раніше, аніж втілю у життя все задумане, тому що в результаті я хочу отримати саме голосового помічника з штучним інтелектом, наприклад як J.A.R.V.I.S у Тоні Старка або як K.I.T.T. у Майкла Найта.
Розробка чат-бота
Під час спроб реалізації чат-бота з ШІ, коли локально встановлена на моєму комп’ютері велика мовна модель(LLM) уперше зі мною заговорила зі смартфону, нехай у текстовому режимі, це було вельми приємне відчуття. «Ось він — хороший інтерфейс для ШІ», — подумав я. — «Тому що смарт завжди із собою, треба лиш доступ до інтернету».
Ейфорія тримала недовго, я швидко зрозумів, що бракує запам’ятовування розмови — було враження, ніби я можу розмовляти з ШІ в межах пам’яті одного повідомлення. Перше, що прийшло в голову — сумувати набрані мною повідомлення. І це спрацювало: я писав одне повідомлення і отримував відповідь, писав нове повідомлення, додавав до нього старе й отримував відповідь уже в межах кількох повідомлень. Алгоритм простий, він знову «підгодував» вау-ефект. Але однаково я розумів, що це неправильно, є інша змога зберігати розмови. І тоді я почав копатись, покроково розбирати код і дивитись, що і як працює.
Я знайшов спосіб, як зберігати історію розмов, і дізнався, що це називається «контекст бесіди». Потім я подумав і вирішив зберігати контекст у текстовий файл, щоб після перезавантаження системи ми могли продовжити розмови. Так, це була знову порція дофаміну, тому що можна було спілкуватись не одним десятком повідомлень і ШІ пам’ятав все це. Можна було після
Ця ейфорія теж тривала недовго, з часом я помітив, що ШІ починає дуже повільно генерувати відповіді, а далі взагалі вилітати. І щоб це виправити, треба було очищувати текстовий файл з контектсом бесіди. Тоді він «роздуплявся» і знову жваво вів бесіду.
Це був період, коли ChatGPT писав за мене 100% коду, а я виступав лиш як автор ідеї та тестер. Тому цей код працював насправді якимось дивом для мене, я лише розумів загальні концепції, як-от збереження масиву цілих чисел (набір токенів, де токеном може виступати слово).
ШІ почав запам’ятовувати, про що ми говорили раніше, або як текст, який я набрав на смартфоні, переходить в «магічну скриньку», яка працює як Python-скрипт на моєму комп’ютері, який добряче навантажує процесор, оперативку та відеокарту, та генерується відповідь, яка перенадсилається з Python мені у смартфон. Це був період, коли мені просто хотілось перевірити ідею, і я вже не на 90% (одна з моїх попередніх статей «90% мого Data Science-проєкту написав ШІ») а на 100% довіряв ШІ реалізацію всіх моїх ідей, будь-яким чином, «аби працювало», як-то кажуть.
''' Tech01 simple Telegram Chat Bot with IA By Serhii Trush with MIT License. https://github.com/techn0man1ac/telegramChatBotIA Thank's ChatGPT for help. By Tech01 labs 2024. ''' import telebot import ollama import json # Replace with your desired filename CONTEXT_FILE = "./conversation_context.txt" BOT_TOKEN = 'API_TOKEN' OLLAMA_MODEL = 'llama3' CONTEXT_WINDOW_SIZE = 16_384 # Tokens MAX_RESPONSE_LENGHT = 8_192 # Кількість символів для відповіді bot = telebot.TeleBot(BOT_TOKEN) conversation_context = [] def load_context_from_file(): """Завантажити контекст розмови з текстового файлу.""" global conversation_context try: with open(CONTEXT_FILE, 'r') as f: context_data = json.load(f) conversation_context = context_data['context'] except (FileNotFoundError, json.JSONDecodeError): # За замовчуванням використовувати порожній контекст, якщо файл не існує або не може бути розібраний pass def save_context_to_file(): """Зберегти контекст розмови у текстовий файл.""" context_data = {'context': conversation_context} with open(CONTEXT_FILE, 'w') as f: json.dump(context_data, f) def update_context(new_context): """Оновити контекст розмови новими повідомленнями.""" global conversation_context conversation_context.extend(new_context) if len(conversation_context) > CONTEXT_WINDOW_SIZE: conversation_context = conversation_context[-CONTEXT_WINDOW_SIZE:] def handle_user_message(message): """Обробляти повідомлення користувача.""" try: user_message = message.text systemSet = '' if user_message == '/start': systemSet = 'Ти - "Tech01-бот", відповідай коротко та лаконічно, українською мовою' # Підказка для представлення штучного інтелекту user_message = "Привітайся" conversation_context.clear() # Очистити контекст для нової розмови if user_message == '/context': systemSet = 'Ти - "Tech01-бот", відповідай коротко та лаконічно, українською мовою' # Підказка для представлення штучного інтелекту user_message = "Ти оновив контекст бесіди" if user_message == '/translate': user_message = "Переклади будь ласка попереднє повідомлення на українську мову" if message.reply_to_message: # Витягти текст цитованого повідомлення original_message = message.reply_to_message.text # Об'єднати цитоване повідомлення та ваше повідомлення для контексту user_message = f"{original_message}\n\n{user_message}" ollama_response = ollama.generate(model=OLLAMA_MODEL, prompt=user_message, system = systemSet, context = conversation_context) ollama_text = ollama_response['response'][:MAX_RESPONSE_LENGHT] update_context(ollama_response['context']) bot.reply_to(message, ollama_text) # Зберегти контекст розмови після кожного повідомлення, але перезаписати файл save_context_to_file() except Exception as e: print(f"Помилка під час взаємодії з Ollama: {e}") bot.reply_to(message, "Вибачте, сталася помилка. Спробуйте ще раз.") @bot.message_handler(func=lambda msg: True) def message_handler(message): """Обробляти вхідні повідомлення.""" handle_user_message(message) def main(): """Запустити бота.""" # Завантажити контекст розмови з файлу під час запуску load_context_from_file() bot.infinity_polling() if __name__ == "__main__": main()
Я лишив залишки результату мого з ChatGPT «мозкового штурму» — каталог oldVersions. Якщо цікаво — можете зайти та поглянути, як все починалось. Переконую, це найкраща версія того, що лишилось з тих часів.
Як зʼясувалося, ШІ має свої обмеження, в цьому випадку перше обмеження, з яким я стикнувся, — це був розмір контекстної пам’яті (кількість попередніх повідомлень з бесіди). Тоді я використовував Python-бібліотеку Ollama та велику мовну модель LLAMA3 від компанії META. Саме так, коли я кажу, що «використовую ШІ у моєму проєкті», це означає LLM(large language model).
З часом, коли наступна хвиля дофаміну минула, зʼясувалося, що LLAMA3 постійно намагається перевести бесіду з української мови на англійську. І, правду кажучи, я втомився говорити ШІ, що мова чату — українська. Більшість LLM мають в пріоритеті англійську мову, причина проста — більше інформації для навчання моделей. Проте це мене наштовхнуло на можливість задавати деякі параметри для ШІ, а саме: системні підказки та повідомлення, якими можна «маніпулювати» штучним інтелектом, щоб він вів себе, як мені потрібно. І це спрацювало: я на рівні промпту переконав ШІ, що мова чату — українська. Це значно покращило спілкування саме на потрібній мені мові. З допомогою системних повідомлень я періодично «коригував» LLAMA3.
Оскільки я стикався з різними чат-ботами — чи то подати показники «комуналки», чи то просто інформаційні й навчальні боти, — я знав, що у телеграмі є змога передавати команди чат-бота різними кнопками. І я теж захотів собі такі. З часом придумав для них функціонал. Я вже я почав відходити від фази, коли ChatGPT за мене робить всю роботу з розробки, й поступово розбирався у коді та покращувати його так, як бачу я, а не ChatGPT.
Все ж таки я займаюсь Data Science, а не тестуванням коду, який нагенерував ШІ. Усе це «технологічне багаття», з використанням різних технології, які я об’єднав з допомогою ШІ, вже було розведено й підтримувало саме себе. Я почав поступово оперувати шматками коду, бібліотеками та методами... Власне інструментами, які використовуються в коді.
Приблизно на цьому етапі мені прийшла ідея додати підтримку голосових повідомлень, тобто використовувати синтез та розпізнавання мовлення. Зрештою додав кілька десятків стрічок коду, і мій чат-бот заговорив голосом від Google. А також я позбувся необхідності набирати текст на смартфоні, що порівняно з голосовим вводом набагато повільніше.
Код уже був доволі-таки великим, від 100 рядків, а я лишень нещодавно почав глибоко вивчати програмну інженерію, тож мені стало важко його підтримувати. Та й надсилати на перевірку в ChatGPT 3.5 стало неможливо, тому що я розумів обмеження контексту цього сервісу: вихідний код просто не поміщався у контекстну пам’ять безкоштовної версії ChatGPT.
А платну версію для пет-проєкту використовувати змісту не бачу. Це підштовхнуло до логічного рішення — розбити код на модулі: модуль розпізнавання мовлення, модуль синтезу мовлення, модуль обробки команд, модуль збереження історії...
З часом з’явилось бажання поділитись з іншими результатом моєї роботи, і я стикнувся з тим, що варто зберігати контекст розмови на диск окремим файлом для кожного користувача. Я покопався у Telegram API і зʼясував, що в кожного користувача є власний ID. Ціле число, яке ідеально вписалось у концепцію бота, бо, погодьтесь, коли я набалакав з чат-ботом, ділюсь з кимось ним, і він продовжує із цією людиною розмову, яку вів зі мною, — це неправильно, все ж таки штучний інтелект і конфіденційність — тема дуже важлива і чутлива.
Приблизно на цьому етапі я познайомився з проєктом LLM Studio, де, на відміну від Ollama, вже був графічний інтерфейс, повно параметрів для налаштування і навіть приклади Python-коду (який запрацював «з коробки»). Це серйозно «прокачало» як мене, так і проєкт, тому що я наочно бачив усі основні параметри великої мовної моделі. А також почав оперувати кодом так, як хочу я.
Нульове, що я зробив, — це забезпечив збереження контексту розмов (листування) у JSON-файлі у каталозі кожного користувача (використовуючи ID). Тепер я міг не перейматись, що вміст мого листування «переповзе» до іншого користувача й навпаки. Так само вчинив з тимчасовими аудіофайлами, які в результаті мого алгоритму генерувались під час розпізнавання та синтезу мовлення.
Наприклад, коли користувач передає аудіоповідомлення у телеграм, меседжер моєму Python-скрипту надсилає його як opus ogg. Далі я зберігаю у той самий каталог, де й лежить JSON-файл з контекстом (бесідою) користувача. Цей файл конвертується у wav-формат, щоб передати його функції розпізнавання мовлення (бо вона «розуміє» лиш цей формат), після завершення розпізнавання тимчасові файли видаляються. На скрині нижче я додав показ тексту розпізнавання, а також тест генерації аудіоповідомлення від боту для наочності.
Це була чергова порція ейфорії, тому що ось воно — те, що нам показували у фантастичних фільмах, практично у моїх руках (тобто у смартфоні). Навіть те, що основна програма працює на комп’ютері, яка своєю чергою доволі-таки непогано вантажить систему, система охолодження мого ноутбука працює так, ніби на ньому працює середня 3D-гра у моменти генерації повідомлень LLM.
Споживання ресурсів
Коли наступна порція дофаміну вичерпалась, я дізнався, що Google накладає свої обмеження на синтез та розпізнавання мовлення на добу. Наприклад, аудіоповідомлення більше хвилини повертало помилку розпізнавання. Як зʼясувалося, безкоштовно можна відправляти на розпізнавання аудіо довжиною до хвилини — обмеження конкретно тієї бібліотеки, яку я використовую у своєму проєкті. Я не став винаходити велосипед: почав перед подачею аудіо на розпізнавання аудіо нарізати на шматочки, і сумувати отриманий текст в одну стрічку.
До речі, те ж і стосується обмежень на синтез мовлення від Google: є визначена кількість часу генерації аудіо для одного IP на добу. Та й це залежність від доступу до глобальної мережі, що трохи не вписується у мою початкову концепцію голосового помічника, який б працював без інтернету, як програмне забезпечення, що працює на моєму комп’ютері — голосовий помічник зі штучним інтелектом.
Забігаючи наперед скажу, що мені вдалося інтегрувати у своєму ПЗ чудові опенсорс-проєкти з розпізнавання та синтезу української мови. Хороші результати синтезу мовлення виявились у Seamless M4T v2 від META AI, а розпізнавання у Whisper від Open AI. Що один, що інший продукти дуже класні, але мають теж свої обмеження. Проте про них я буду говорити вже в наступних статтях.
Допоки працював окремо з кожним інструментом — все було чудово, українська мова розпізнавалася та генерувалася. Але я бачив, що в принципі починаю впиратися в обмеження моєї системи. 32 гігабайти DDR4 оперативної пам’яті дуже швидко закінчились, довелося увімкнути swap-файл. Не кажучи про 4 ГБ відеопам’яті моєї GeForce RTX 3050 Mobile. Процесор (а саме: шестиядерний Ryzen 5) тягнув синтез і розпізнавання доволі таки повільно (приблизно 1 до 1.5, де хвилина аудіо — це півтори хвилини обробки).
Якщо опиратись на закон Мура, то зовсім скоро ці параметри побутового комп’ютера будуть смішні, і мій код буде працювати швидше. Проте я лишу цю тему, зокрема локальне розпізнавання та синтез мовлення, на мої майбутні статті, тим паче я ще не публікував мої напрацювання у цьому напрямі.
Як бачите, на скрині результат роботи Tokenizer — одне і те ж речення англійською та українською мовами споживає різну кількість токенів, а саме: 58 токенів проти 155, що майже у тричі більше. З цього можна зробити висновок, що для україномовного ШІ треба значно більше обчислювальних ресурсів, ніж для англомовного. Скажу більше, це дуже відчутно, коли працюєш з ШІ англійською, а потім переходиш на українську. Різниця у продуктивності під час роботи з різними великими мовними моделями є. Для себе я бачу два варіанти — збільшувати ресурси, купувати більш потужніший компʼютер для роботи з ШІ, або «закопуватись» глибше, все ж таки це опенсорс, оптимізувати все самостійно.
Встановлення та перший запуск
Щоб мій чат-бот запрацював, потрібно:
- встановити останню версію Python;
- бажано встановити та налаштувати (тобто аби ви були залогінені) Git;
- завантажити репозиторій у потрібний вам каталог (наприклад C:\Projects\) командою git clone, яку прописуємо у командному рядку (CMD)
git clone https://github.com/techn0man1ac/TelegramAIChatbot.git
- скачувати можна і без git, тобто без реєстрації, просто скачавши архів репозиторію за ось цим посиланням;
- після завантаження заходимо в каталог TelegramAIChatbot далі пишемо в командному рядку cd TelegramAIChatbot — переміщення в каталог з файлами проєкту;
- встановлюємо всі необхідні бібліотеки для роботи чат-бота (на скрині нижче):
pip install -r requirements.txt
- після встановлення бібліотек заходимо у каталог code командою cd code та запускаємо модуль графічного інтерфейсу бота командою python UI.py:
- відкриється графічний інтерфейс з налаштуванням чат-бота:
На цьому етапі треба зробити такі кроки:
- вибрати шлях до конфігураційного файлу config.py кнопкою праворуч зверху;
- коли параметри завантажені (усі поля заповнені), потрібно отримати API-ключ у головного телеграм-бота. Його можна знайти, якщо набрати в телеграмі @BotFather(або перейти за посиланням) у полі пошуку контактів. Інтерфейс інтуїтивно зрозумілий, створюєте бота, даючи йому ім’я, потім заходите в керування ботом і тиснете кнопку «Отримати API key». Про всяк випадок лишу це посилання, там описується спочатку, як його отримати (до Python-коду);
- важливий нюанс: перед тим, як змінювати поле BOT_TOKEN, треба замінити розкладку клавіатури на англійську й тоді вставити ключ. Після натиснути «Зберегти конфігурацію»;
- натиснути кнопку «Запустити бот». Тоді в консолі, яка запускається разом з UI.py-модулем, з’явиться повідомлення, що бот в рантаймі (я йому надіслав два повідомлення, що видно за логами):
- тепер потрібно відкрити програму LLM Studio, попередньо її скачавши та встановивши з офіційного сайту. Головне вікно програми виглядає ось так:
- натиснути кнопку Download для Llama 3 — 8B Instruct (вимоги, як бачите, — від 8 ГБ оперативної пам’яті)
- Після завантаження Llama 3 з квантуванням Q4_K_S (якщо не розумієте, що це, — нічого страшного), натиснути на кнопку Local Server (1) та Start Server(2) і під кінець вибрати єдину у вашому випадку LLM(3);
- відтепер ваш чат-бот відповідатиме вам у текстовому режимі.
Можливості чат-боту
Мій чат-бот, окрім генерації відповідей користувачеві та розпізнавання аудіоповідомлень, підтримує такі команди:
- /start - початок нової бесіди, він забуде всі попередні розмови, привітається та запитає, як до вас звертатись;
- /context - ця команда призведе до підведення короткого резюме бесіди (я вже писав про обмеження контекстної пам’яті ШІ у моїй попередній статті). Резюме бесіди — це мій спосіб хоча б на рівні тезисів зберігати розмови якомога довше у пам’яті бота (контекстному файлі);
- /translate — перекладе попереднє або процитоване повідомлення в телеграмі на українську мову. Перекладом займається лиш LLM, без використання онлайн-сервісів;
- /voice_on — активація голосового режиму: чат-бот почне відповідати аудіоповідомленнями синтезом мовлення від Google;
- /voice_off — деактивація голосового режиму: бот продовжить спілкуватись текстом.
Різноманіття серед ШІ моделей
З часом я відкрив, що у світі опенсорс і LLM є не одна лише LLAMA — насправді, є і інші великі мовні моделі, наприклад Aya від канадської компанії або Mistral від французів. Тим більше на мене вплинули запитання до залу на DOU DAY 2024 Олексія Молчановського «Хто працював більше, ніж з одною ШІ?».
Особисто мені наразі подобається Aya від Cohere For AI та DeepSeek V2. Перша добре розуміє і спілкується українською, друга LLM має у два рази більшу швидкість генерації токенів (відповідей).
Якщо ви знайшли щось цікавеньке з цієї теми — можете лишити коментар до статті, з задоволенням розгляну.
Структура проєкту
Мій проєкт складається з декількох модулів, а саме:
UI.py — модуль графічного інтерфейсу(GUI) для конфігурування та запуску чат-бота.
Написаний з використанням бібліотеки tkinter. До речі, левову частку роботи з цього коду для мене зробив Codestral, який я розгорнув у тому ж LLM Studio і під`єднав у вигляді плагіна для VSCode CODEGPT:
Його я перероблюватиму на бібліотеку QT, але поки так. Модуль працює просто: він «парсить» модуль config.py, в якому я зберігаю всі налаштування програми, записує нові параметри та запускає сам бот, виконуючи основний файл main.py. У цьому допомагає бібліотека subprocess.
config.py — модуль, у якому зберігаються всі налаштування бота. Чому це не текстовий файл, а скрипт? Я поки не зумів побудувати архітектуру так, щоб читати одноразово конфіг-файл, тому поки що сирий концепт.
main.py — головний модуль, який ініціалізує всі інші модулі.
message_handler.py — модуль, який займається обробкою даних, які «бігають» від користувача до LLM і навпаки. Тут використовується бібліотека OpenAI Python API library, яку пропонує у своєму базовому прикладі використовувати LLM Studio. Власне вона і лягла в основу мого чат-бота;
history_handler.py — цей модуль працює з історією (контекстом розмов) користувачів. Повторюсь, що я зберігаю контекст бесід в окремому каталозі, ім’я якого прив’язане до ID користувача. Файл контексту має назву current_history.json. Зі структурою зберігання файлу довго не думав, адже в базовому прикладі все за мене продумано — JSON.
command_handler.py — модуль, який займається обробкою команд для бота, як-от «Оновити контекст бесіди», де я у вигляді системного повідомлення нагадую боту, що мова чату — українська, а також про звертання за іменем до співрозмовника, підведення короткого резюме бесіди.
Останнє необхідне за обмежень контекстної пам’яті, такими короткими резюме бот краще запам’ятовує тези попередніх розмов. Також є команда «Почати нову бесіду» — очищує історію бесіди з чат-ботом, щоб почати все спочатку. Також є команди «Переклади повідомлення на українську мову», «активація голосового режиму» та «деактивація голосового режиму», які вмикають або вимикають відповідь аудіо повідомленням синтезом мовлення від Google.
voice_generator.py — тут відбувається генерація аудіо з тексту. Використовую бібліотеку gTTS(яка, своєю чергою, використовує сервіс Google Cloud Text-to-Speech) а також системний модуль oi для того, щоб не зберігати проміжні файли на диск. Якщо подивитесь по комітах, то я лиш нещодавно реалізував цю функцію. Буквально кілька тижнів тому проєкт використовував каталог з файлом контексту для збереження тимчасових файлів, які створюються під час генерування аудіо.
voice_recognition.py — тут, як ви здогадались з назви, відбувається розпізнавання мовлення. Один із самих «тяжких» модулів у проєкті — і це я провів чимало часу над його оптимізацією, він був раніше ще громісткіше.
Для розпізнавання мовлення використовується бібліотека SpeechRecognition (яка теж використовує сервіс Google Cloud Speech-to-Text API). Мало того, мені приходиться використовувати бібліотеку PyDub для конвертування аудіо з OGG у WAV-формат, нарізати аудіо шматочками по 45 секунд (можна до
error_handling.py — найменший, але тим не менш важливий модуль, який забезпечує логування помилок у консолі.
Якщо проєкт продовжить еволюціонувати й надалі у тому ж річищі, що є зараз, а саме: опенсорс-проєкт з MIT-ліцензією, то, можливо, щось буде відрізнятись, оскільки мій досвід буде пропорційно накопичуватись у ньому.
Висновки
- У цій статті я стисло описав практично три місяці мого життя. Давненько мене так не «втягувало» у проєкт, хоча я маю, якщо говорити про не комерційні, а кишенькові проєкти, і більш триваліші, наприклад «Вічний наручний годинник». Це hardware-проєкт розробки наручного годинника з живленням акумулятора та зарядкою від мікросонячних панельок.
- Робота зі штучним інтелектом — це завжди пошук компромісів. Якби я працював з хмарними обчисленнями, розгортав мого чат-бота у хмарі, я б теж стикнувся з обмеженнями тих чи інших інструментів, тому тут все за інженерною класикою — пошук компромісів, за яких всі повинні бути задоволені.
- Поки що ШІ — це енергозатратно. Розробка на мобільних девайсах — це дуже і дуже непросто, хоча, знову ж таки, опираючись на закон Мура, можна очікувати, що скоро в кожному годиннику (не те що у смартфоні!) буде по ШІ.
- Україномовному штучному інтелекту потрібно ще пройти великий шлях від оптимізації до створення якісних датасетів. Як текстових, так і аудіо, щоб він нас чудово розумів і спілкувався голосом, як у вчорашніх, та й вже сьогоднішніх фантастичних фільмах та книгах.
- Використовувати ШІ для розробки можна, левова частка коментарів до коду написана LLM DeepSeek Coder V2 з використанням плагіну, про який писав вище. Я від себе лиш прописав короткі замітки в найкритичніших місцях. Проте повністю віддавати розробку ШІ певно-таки не варто, тому що цей проєкт мені подарував велику кількість практики, досвід роботи з бібліотеками обробки аудіо, обробки природної мови (ой, це вже про мої наступні кроки — нехай буде для інтриги), збереження файлів в оперативну пам’ять, читання їх звідти, роботи з CUDA ядрами та VRAM (відеопам’ять), що прискорює синтез та розпізнавання мовлення відносно обробки на CPU (процесорі) в рази. Усе це можна було б реалізувати і з ChatGPT, на 100% даючи йому чіткі інструкції з архітектури коду, але тоді не лишився досвід, як це все працює під капотом. А це важливо тоді, коли потрібно оптимізувати споживання ресурсів.
- Приємно бачити як речі, що здавались фантастикою ще 10 років тому, втілюються в реальність, тим паче тобою — безцінне відчуття.
- Може здатись, що з цим проєктом працювали лише я і ШІ — це не так, висловлюю велику подяку всім тим, хто брав участь у тестуванні, також ділився ідеями та думками з покращення проєкту.
28 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів