AI Arcade

Щопонеділка ми любимо шукати в Інтернеті цікаві проекти від спільноти Raspberry Pi. Іноді вони потрапляють до офіційного журналу Raspberry Pi Official Magazine, як-от ця «AI Arcade» від Григора Тодорова. Щасливого «Maker Monday», друзі!

Raspberry Pi лежить в основі багатьох ігрових консолей, зібраних власноруч. Завдяки запуску емуляторів, таких як RetroPie, Recalbox, Batocera та Lakka, наш улюблений комп’ютер цілком здатний відтворювати безліч класичних ігор з різних платформ — від 8-бітних до 32-бітних. Однак, коли Григор Тодоров вирішив створити власну консоль, він вирішив не базувати її на існуючих системах, таких як Sega Mega Drive або SNES. Натомість він реалізував проект, який дозволив би йому насолоджуватися новими іграми, створеними на льоту за допомогою магії штучного інтелекту.

Ця дерев'яна коробка — це повторно використана упаковка від набору скляних чашок.
Ігри генеруються за допомогою штучного інтелекту, а також зберігаються для подальшого використання.

Григор — завзятий геймер. «Мені подобається грати на моєму Steam Deck, особливо в рогаліки, такі як Hades і The Binding of Isaac», — каже він. «Мені подобаються ігри, які швидко запускаються, які можна перегравати і які є трохи непередбачуваними, що сильно вплинуло на ідею створення AI Arcade». Маючи вже у своєму розпорядженні Raspberry Pi та аркадний джойстик, що залишилися від інших проєктів, Григор зміг одразу ж розпочати роботу над своєю консоллю. Він хотів, щоб вона генерувала якомога більше ігор за допомогою великих мовних моделей (LLM).

«Я хотів поекспериментувати з великими мовними моделями (LLM) у більш ігровій, фізичній формі», — пояснює він. «Оскільки великі мовні моделі вдосконалюються так швидко, мені стало цікаво, яким може бути майбутнє ігор із залученням штучного інтелекту. Одним із варіантів був пристрій, здатний генерувати нескінченну кількість нових ігор, щоразу даруючи гравцеві нові враження». Для цього він звернувся до ChatGPT і протягом одного післяобіддя зайнявся «віб-кодуванням» (що передбачає опис додатка природною мовою, а не безпосереднє написання коду).

Генерація коду 

Використання Raspberry Pi для цього проєкту здавалося цілком природним. «Raspberry Pi дуже універсальний, компактний і енергоефективний, — каже Григор. — Крім того, він має величезну онлайн-спільноту та чудову документацію, що робить його ідеальним для таких проектів. Мені подобається, що консоль можна зробити повністю автономною. У цій версії я не додав батарею, але можна було б перетворити її на портативний пристрій з автономним живленням, який потрібно лише підключити до екрана».

Генерація ігор може зайняти трохи часу, але тим часом гравця розважає міні-гра.

З самого початку Григор прагнув, щоб консоль була максимально простою у використанні. «Це було однією з головних цілей, — каже він. — Я хотів, щоб комп’ютер на базі Raspberry Pi локально розміщував веб-сторінку й автоматично запускав її у повноекранному режимі під час запуску. Я також хотів, щоб користувачеві не потрібно було розуміти нічого технічного. Мета полягала в тому, щоб люди просто вмикали пристрій, підключали HDMI-кабель до екрану, чекали, поки він завантажиться, а потім або давали LLM команду створити нову гру, або грали в ту, що вже була згенерована».

З огляду на все це, Григор взявся за розробку локального веб-додатку. Він налаштував програму так, щоб вона створювала веб-інтерфейс, яким можна було керувати за допомогою джойстика з двома кнопками через API Gamepad браузера. Він також подбав про те, щоб інтерфейсом можна було керувати за допомогою клавіатури. Спочатку веб-додаток був налаштований так, щоб одразу генерувалася повністю випадкова гра, але він виявив, що це можна розширити. «Мені здалося цікавіше, коли гравець міг трохи впливати на результат», — зізнається він. «Вибір дає користувачеві певний вплив на тему, механіку або стиль кінцевої гри».

Григор каже, що ігри прості, а ігровий процес не завжди має сенс :)

У результаті було створено додаток, який використовує два виклики API великої мови (LLM). «Спочатку додаток просить модель згенерувати чотири запитання, кожне з яких має два можливі варіанти відповіді. Це займає лише кілька секунд», — каже Григор. «Потім гравець обирає один із варіантів, і його вибір використовується у другому запиті. Цей другий запит використовується для генерації HTML-файлу, який потім відображається як гра».

Ретро-коріння

Хоча він і писав код «на відчуттях», це не було справжнім скороченням шляху до успіху. «Однією з головних проблем було зробити так, щоб користувацький досвід був плавним і нагадував роботу побутової техніки, а не комп’ютера, що виконує скрипт», — каже він. «Важливою частиною цього було змусити Raspberry Pi завантажитися, розмістити локальну веб-сторінку, відкрити Chromium і автоматично перейти в повноекранний режим. Іншим викликом було впоратися з непередбачуваністю коду, згенерованого LLM. Іноді згенеровані ігри працюють напрочуд добре, а іноді вони трохи глючать. Я намагався зробити підказки більш структурованими, щоб результат був послідовним і придатним для гри».

Сам процес складання дуже простий. Григорій використовував комп'ютер Raspberry Pi 4 з 8 ГБ пам'яті.

Кінцевий результат вражає. Система здатна створювати прості, захопливі ігри, що викликають ностальгію за минулою епохою. «Ігровий процес може бути справді цікавим, а результати часто виявляються більш стабільними, ніж я очікував», — каже Григор. Але експеримент все ж показує, що штучному інтелекту ще далеко до того, щоб зрівнятися з геніальністю розробників минулого. «Іноді ігри не працюють належним чином, але експериментувати з ними все одно цікаво», — додає він. «Найслабшою ланкою зазвичай є графіка. Ресурси не надто сильні, тому я вважаю, що проект можна було б покращити, додавши ще одну модель ШІ, яка спеціалізується на створенні візуальних елементів вищої якості».

Проте це цікавий проект, який варто спробувати, і, як і личить його ретро-корінням, він не має бути складним у виготовленні. Сам корпус — це просто дерев’яна упаковка з джойстиком і двома кнопками, і саме такого результату й прагнув Григор. «Мені подобається використовувати стару упаковку, і я вирішив, що дерев’яна коробка чудово підійде для такого проекту», — пояснює він. «Для простих конструкцій я не вважаю, що 3D-друк завжди необхідний. Іноді достатньо старої коробки та свердла-коронки. Хоча, я б із задоволенням переробив її одного дня у кращу дубову коробку».

Під час створення гри користувачам задають чотири випадкові запитання, які стають основою ігрового процесу. Потім у гру можна грати за допомогою джойстика та аркадних кнопок консолі. Ігри мають виразний ретро-стиль.

Він також хотів би вивести AI Arcade на новий рівень. «Я хотів би більше зосередитися на багатокористувацькій складовій аркадних ігор і, можливо, додати додаткові кнопки», — каже він. «Також було б цікаво поекспериментувати зі створенням 3D-ігор. Наразі багато ігор, створених за допомогою LLM, досить схожі між собою. Одна з ідей, яка мене цікавить, — це попереднє створення 20–30 шаблонів ігор, а потім використання локального генератора для коригування значень, зміни механіки та заміни графічних ресурсів. Це дозволило б пристрою працювати в автономному режимі, водночас створюючи різноманітні ігри».