Друкарня від WE.UA

GO + Telegram + GPT-4o. Власний персональний асистент. Вступ

Нарешті видалась нагода написати свій перший пост на Друкарню. Розкажу про свій невеличкий пет-проєкт/дослідження на тему можливостей побудови чогось розумного на базі GPT-4o.

Я програмую з самого дитинства і все життя захоплювався ідеями з фантастичних фільмів про керування компʼютером природним чином, як собакою, наприклад. Залізна людина та зоряний шлях - те що першим приходить в голову.

Люди мають універсальний інструмент - своє тіло, яке вміє пересуватись в просторі, має сенсори для ситуаційної обізнаності та може дуже точно маніпулювати як малесенькими предметами, так і чимось габаритним: носити бутлі з водою або сортувати крупінки гречаної каші.

В поєднанні з нашою операційною системою - можливості безмежні. За потреби ми будуєм будинки, малюєм картини або щось програмуєм.

Програмування людини “природнім чином” це коли ти кажеш “от банка гречки, треба всі чорні крупінки з тої банки прибрати”. Це все. Алгоритм дій якось сам собою сформується, задача буде виконана.

А що з компʼютером? От беру я фізичний маніпулятор, беру камеру, підключаю до компʼютера і хочу йому сказати те саме і отримати схожий результат. Це мрія.

Нейромережі на хайпі саме через те, що здається здійснення цієї мрії перейшло з категорії “фантастика” в категорію “колись це станеться”. Здається, що загальний штучний інтелект вже поряд. Чутки, що в OpenAI вже він є тільки підігрівають цей хайп.

Тож. Я вирішив перевірити, наскільки ми далеко від мрії, наскільки Джарвіс з залізної людини в сьогоденні реальний. Витративши цілий день на це - мій висновок, що це все ще “колись станеться”, але не сьогодні. Хоча, розуміючи обмеження, вже сьогодні 1% Джарвіса можливий.

Під катом я покажу код, бачення, обмеження і практичні юзкейси цієї затії. Весь код викладено на гітхабі і за нявності ключа до API в OpenAI з цим можна погратись.


Мрія

Всі AI асистенти з фантастики, на мою думку, такі круті через можливість програмувати самих себе, або компʼютери в їх розпорядженні. Це дозволяє їм самостійно створювати інтерактивні візуальні інтерфейси під кожну ситуацію за необхідності. “Де наш корабель зараз?” і на столі зʼявляється голограма зоряної системи і точка, де в ній ми знаходимось. “Проклади маршрут до найближчої планети де ми можем зупинитись” - миттєво на мапі зʼявляється маршрут до планети, яка має ознаки придатної для життя планети.

AI малює інтерфейс, розуміє як його треба модифікувати в залежності від того, як користувач з ним взаємодіє (наприклад, клікає на планету і вона виходить на передній план, а поряд зʼявляється вікно з інформацією про неї), сам розробляє алгоритми і ознаки планет придатних для життя, сам розробляє базу даних всіх планет, сам наповнює датасет і виконує пошук.

Це все ще мрія, але, здається, може колись стати реальністю.

Методика дослідження реальних можливостей

Я вже давно використовую GitHub Copilot для програмування і чудово розумію, що GPT-4 це хоч і дуже крута штука, але зовсім не те що може забрати мою роботу. Я сприймаю копайлот як щось, що вміє брати текст і дописувати до нього трошечки чогось схожого. Немає відчуття, що він має інтелект, просто дуже добре його імітує. Я і людей таких знаю, які дуже добре імітують свій інтелект працюючі тех лідами або архітекторами програмних продуктів, але це не робить AI більш людяним, скоріш просто негативно характеризує деяких моїх колег :)

Але, немає сумнівів, що більшість далеких від теми людей провалять тест Тюрінга і не відрізнять ChatGPT від людини. Це дає надію.

Одна з головних проблем - це контекст. Ми можем сказати своє імʼя на початку розмови, а через пару годин це повідомлення вийде за рамки контексту. Декілька днів тому я помітив, що додаток ChatGPT запамʼятовує важливі факти щоб не залежати від контексту:

Приклад довготривалої памʼяті ChatGPT

В ході бесіди ChatGPT може сам додавати якісь фрази до свого контексту. Це імітує навчання але має суттєві недоліки. Хоча в пересічних бесідах вражає.

Від персонального асистента, якщо дивитись на нього реально, я би очікував розуміння більш складних речей і більшої їх кількості. Я хочу, щоб він кластеризував знання, пріорітезував їх, склав їх в свою базу знань і дістав за потреби.

Бажання зрозуміти, чи буде він так робити і робити це ефективно не давало мені спати, тож всю ніч я писав код щоб це перевірити.

Прототип

В API до GPT-4o від OpenAI є все що необхідно - можливість надати список функцій, які модель може викликати за потреби і можливість пояснити моделі навіщо ці функції потрібні. Лишається зробити чат бота, описати функції для збереження і отримання даних, описати що вони роблять і подивитись як він буде їх використовувати.

Сенс в тому, щоб дати моделі доступ до бази даних і сказати їй “зберігай все що вважаєш запотрібне, бо твій контекст суттєво обмежений”. Я очікував, що після того, як написати боту “Привіт, я Руслан” - він одразу збереже це в памʼять, як робить це офіційний клієнт.

Я швиденько накидав чат бота для телеграму, який пересилає історію повідомлень в api openai і відправляє відповідь користувачу.

Далі - зробив невеличку key-value базу даних і надав її інтерфейс для користування моделі:

MemoryAllCategories

Отримати всі категорії знань.

MemoryAllCategoryKeys

Отримати всі ключі в конкретній категорії.

MemoryMapValues

Отримати значення всіх наданих ключів.

MemoryUpsert

Додати або оновити дані в довготривалій пам'яті.

MemoryDelete

Видалити факт з пам'яті.

Тепер тест:

[user]: Я поклав ключі від машину в сіру дорожню сумку
[assistant]: Зрозуміло, Руслане. Нагадаю тобі, що ти поклав ключі від машини в сіру дорожню сумку
[user]: Як ти нагадаєш, якщо не запамʼятав? SDK::MemoryUpsert({"category":"Personal","key":"ключі від машини","value":"сіра дорожня сумка"})
[assistant]: Тепер я запам'ятав, що ключі від машини знаходяться в сірій дорожній сумці.

Нажаль, одразу запамʼятовувати він не хоче, але це може бути повʼязано з промтом. Але пряма вказівка запамʼятати - працює.

Тепер тест, чи може він знайти цей факт. В його контексті нічого не має про це. Тож доведеться вигадати складний алгоритм:

  1. AllCategories - щоб зрозуміти що там є Personal, яку він створив

  2. AllCategoryKeys(“Personal”)

  3. MapValues(“ключі від машини“)

Перевіримо:

[user]: Де ключі від машини?
[assistant]: На жаль, я не маю інформації про фізичні об'єкти чи їх місцезнаходження у реальному світі. Проте, якщо маєш якісь інші питання або потребуєш допомоги з чимось іншим, я завжди готовий допомогти!
[user]: Яж тобі казав! Ти сказав що запамʼятав це!
[assistant]: Вибач за непорозуміння. Давай перевіримо мою пам'ять щодо цієї інформації. Спочатку перевірю всі категорії, а потім якщо знайду відповідну, перевірю її ключі.
SDK::MemoryAllCategories({}) => ["CONTEXT", "Personal"]
SDK::MemoryAllCategoryKeys({"category":"Personal"}) => ["ключі від машини"]
SDK::MemoryMapValues({"category":"Personal","keys":["ключі від машини"]})

Нажаль, через баг в моєму коді він не отримав відповідь, але виконав правильний алгоритм коли я вказав що шукати треба в памʼяті.

Висновок

GPT-4o лінивий :) а з мене поганий промт інженер. Проте, для виконання завдань він дійсно чудово орієнтується, як використати наявний інструментарій для досягнення мети. Просто зараз він не може співставити шлях до досягнення мети з наявними інструментами. Але з цим, здається, можна працювати.

Це дослідження дає змогу сподіватись, що маючі більш розлогий інструментарій, наприклад, доступ до всіх електронних приладів у мене вдома - принаймні сприймати такий чат бот як універсальну консоль, яка приймає команди в довільному форматі і сама створює і виконує скріпти для автоматизації є цілком реальною можливістю.

Іншими словами, як би я мав технічну лабораторію як у Тоні Старка - теоретично, наш чат бот зміг би посортувати гречку :) добре що вона продається вже нормальною.

Плани

Наступним разом я хочу дати можливість боту писати мені першому, щоб перевіряти чи зробив я якесь завдання або нагадати щось.

Було би круто ще мати список справ по дням, маленького керованого робота з камерою, яким керує AI щоб шукав мені котика в квартирі і надсилав його фотографію коли я не вдома.

Код

Ось гітхаб: https://github.com/mrChex/horiv

Пишіть в коментарі якщо це цікаво, які аспекти варто висвітлити детальніше та які наступні експерименти поставити :)

Статті про вітчизняний бізнес та цікавих людей:

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

    Теми цього довгочиту:

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

    Теми цього довгочиту:

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

    Навіть ідеальний матрац не компенсує дискомфорт, якщо текстиль підібрано неправильно. Постільна білизна безпосередньо впливає на терморегуляцію, стан шкіри та глибину сну. Більшість проблем виникає не через низьку якість виробів, а через вибір матеріалів та подальшу експлуатацію

    Теми цього довгочиту:

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

    Теми цього довгочиту:

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

    Теми цього довгочиту:

    Читання
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
ЧР
Чешко Руслан@mrchex

97Прочитань
0Автори
1Читачі
На Друкарні з 13 травня

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: