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

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

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

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

Вам також сподобається

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

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

Вам також сподобається